Swing нинг бу компонентаси жараѐн кўрсатгичи ѐки жараѐн индикатори (рус тилида индикатор процесса) деб аталади. Индикатор бирор жараѐннинг қанчаси бажарилганлигини ѐки яна қанчаси қолганлигини кўрсатиб турувчи асбоб ѐки панел. Бу компонентанинг қўлланишини сиз кўп кузатгансиз. Масалан, бирор программани компьютерга ўрнатишда, программаларни кўчиришда, компьютерда тест топширишда ва ҳ.к. Замонавий программаларнинг деярли барчасида бу компонента қўланилади. Қуйида бу компонентани қўллаш усуллари билан танишамиз. Бунинг учун:
Янги проект яратинг.
Формага оддий панел ўрнатинг. Панелга бирор ранг беринг ва панел формани тўлалигича қопласин. Бу ишни амалга ошириш олдинги бўлимлардан сизга таниш.
Панелга Progress Bar компонента ўрнатинг. У горизонтал кўринишда бўлади. Соддалик учун унга Pb1 ном беринг.
Progress Bar компонента Sliderкомпонентага ўхшаб кетади ва унинг айрим хоссаларини мерос қилиб олган. Масалан, Progress Bar нинг хоссалар ойнасидаги maximum, minimum ва valueпараметрларнинг маъноси Slider ники кабидир. Progress Bar ўрнатилганда бу параметларнинг қийматлари мос равишда 100, 0, 0 сонларга тенг бўлади. Программанинг мазмунига қараб бу сонларни ўзгартириш ҳам мумкин.
Хоссалар ойнасидаги string бўлимида 0% кўринишдаги ѐзув мовжуд ва у жараѐнинг бажарилган қисмини фоизларда акслантиришни билдиради. Жараѐн фоизларда аксланиши учун хоссалар ойнасидаги stringPainted бўлими фаол бўлиши лозим, акс ҳолда компонентада матн ҳам, фоиз ҳам аксланмайди.
Компонентанинг string бўлимида 0% ўрнига ихтиѐрий матн туриши ҳам мумкин, у ҳолда компонентада шу сатр аксланади.
Энди панелга оддий тугма ўрнатинг .
Фараз қилайлик тугманинг номи B1, тугма устидаги ѐзув Ok ва тугма босилгандаги ҳодисанинг номи B11 бўлсин (3.4.1-расм). В11 ҳодисада Pb1 нинг бажарилишини фоизларда акслантирайлик. Ҳодисанинг программасини қуйидагича ѐзинг.
private void B11(java.awt.event.ActionEvent evt) { class LongProcess extends Thread { public void run() { while ( Pb1.getValue() < Pb1.getMaximum() ) { try {
Pb1.setValue(Pb1.getValue() + 1); sleep((int)(Math.random()*1000));
} catch (Exception ex) { ex.printStackTrace();
} } } } new LongProcess().start();
}
3.4.1-расм.
3.4.2-расм.
3.4.3-расм.
Агар сиз Pb1 нинг хоссалар ойнасида string бўлимидаги 0% ўрнига бирор матн ѐзсангиз, масалан, Salom, у ҳолда фоиз ўрнида шу матн ҳосил бўлади (3.4.2-расм). Бу ҳолда компонента вертикал кўринишда жойлашган.
B11 ҳодисанинг программасига эътибор беринг. У LongProcess номли
ички класс ҳосил қилишдан бошланган ва бу класс Swing нинг кутубхонасида жойлашган Thread номли класснинг меросхўри сифатида яратилмоқда, яъни LongProcess класси Thread классининг методларидан фойдаланиш ҳуқиқига эга. Бу имкониятдан фойдаланиш учун программа бошида import javax.swing.*; буйриғи туриши лозим.
public void run() методи жараѐн индикатори билан асосий программани параллел ишлашини таъминлайди, акс ҳолда асосий программа иши якунлангандан кейингини жараѐн индикатори ишлайди. Бу мақсадга мувофиқ эмас. Чунки жараѐн индикаторининг вазифаси асосий программанинг ишлаш ҳолатини у ѐки бу кўринишда акслантиришдан иборат.
В11 ҳодиса учун асосий программа
while(Pb1.getValue() < Pb1.getMaximum() )
операторининг ишини бошқаришдан, яъни Pb1 жараѐн индикаторининг жорий қиймати унинг максимал қийматига етганча такрорлашдан иборатдир.
Бу иш setValue ва getValue() методлари ѐрдамида амалга оширилган.
sleep((int)(Math.random()*1000)); буйруғи жараѐн ишини маълум миқдорда секинлаштириш (пауза), яъни кузатиш имкониятини беради. Бу буйруқ ўрнига такрорлаш буйруқларидан ҳам фойдаланиш мумкин.
start() методи Thread класснинг методларидан бири бўлиб, LongProcess класси меросхўр сифатида ундан фойдаланиши ҳуқуқига эга. Бу метод run() методи билан бир пайтда ишга тушади (new
LongProcess().start();).