Vezbe 10 - Gui, Swing
Transcript of Vezbe 10 - Gui, Swing
-
7/25/2019 Vezbe 10 - Gui, Swing
1/15
VEBE 10
GUI
Postoje dva paketa za kreiranje GUI aplikacija. AWT(Abstract Window Toolkit) je originalni grafiki alat koji obezbe!"je #ava $.%.
Upotrebljava GUI operativnog siste&a. 'n je efikasan i brzo radi.packageawt;
importjava.awt.*;
publicclassAwtPrimer{Frame okvir;
// konstruktorpublicAwtPrimer( ) {
okvir= newFrame( );
// dodavanje okvira sa tekstom
TextField tekst= newTextField( );tekst.setText("Pritisnite dume");
// dodavanje dumeta!utton dume = new!utton("liknite ovde");
// dodavanje kom#onenti u $rejmokvir.add(tekst);okvir.add(dume);
// #akovanje $rejmaokvir.#a%k();
&
publicvoidrun() {okvir.set'isile( true);
&
publicstaticvoidmain(trin + ars) {AwtPrimer #rimer = newAwtPrimer( );#rimer.run( );
&&
Pri&er awt.AwtPri&er.java
SWINGje napredniji paket za rad sa grafiko&. wing obezbe!"je sopstvena pona*anja+sopstveni ,izgled i ose-aj (/look and feel,). 0bog toga+ aplikacije koje koriste wingpaket izgledaj" isto na svi& platfor&a&a. 'snovne ko&ponente s" #1"tton+ #2abel+#Te3t4ield+ #56ec61o3+ #7adio1"tton.
$
-
7/25/2019 Vezbe 10 - Gui, Swing
2/15
8oncept izrade GUI aplikacije se zasniva na kreiranj" frej&a+ dodavanj" ko&ponenti na frej& i pode*avanj" izgleda (la9o"t) pode*avanj" akcija.
'snovni redosled akcija je predstavljen " slede-e& pri&er"
Pri&er $ 8reiranje provog frej&a sa jedni& #2abel polje& i njegovo pokretanje.packageawt;
importjava.awt.Flow,a-out;
importjavax.swin.Frame;importjavax.swin.,ael;importjavax.swin.wintilities;
publicclassavawin0 {// konstruktor
publicavawin0(){// 01 kreiranje $rejmaFrame jfrm= newFrame("win Primer");
// 21 #odesavanje veli%inejfrm.seti3e(244564);
// 71 #rekidanje #rorama #ri asenjujfrm.set8e$ault9lose:#eration(Frame.EXIT_ON_CLOSE);
// 1 #odesavanje i3ledajfrm.set,a-out(newFlow,a-out());
//
-
7/25/2019 Vezbe 10 - Gui, Swing
3/15
Pri&er : kreirati klas" 4or&a izveden" iz klase 4ra&e i preko pokazivaa t6is+ dodati d"g&e ilabel" " n"ll la9o"t. Podesiti i& polo;aj preko koordinata.
packagers;
importjava.awt.event.A%tion@vent;
importjava.awt.event.A%tion,istener;importjavax.swin.!utton;importjavax.swin.Frame;importjavax.swin.,ael;importjavax.swin.wintilities;
publicclassForma extendsFrame{
private,ael laela= new,ael("Test");private!utton dume= new!utton("#romeni");
publicForma(){// #odesavanje veli%ine $ormethis.seti3e(445 44);// #odesavanja na%ina 3atvaranja// DISPOSEO!"#OSE na B 3atvara samo tu $ormu// E$I%O!"#OSE na B 3atvara sve5 asi a#lika%ijuthis.set8e$ault9lose:#eration(DISPOSE_ON_CLOSE);// #odesavanje la-outa5 sami ras#oredjujemo kom#onentethis.set,a-out(null);
// #odesavanje #o3i%ije i veli%ine dumeta i laele// od ornje levo ula B5C5widtD5 DeiDtdume.set!ounds(045 245 0445
-
7/25/2019 Vezbe 10 - Gui, Swing
4/15
Prepor"ka for&e kreirati kao posebne niti preko wingUtilities
LAYOUTS42'W
sadr3aj.set,a-out(new Flow,a-out());Grid(
-
7/25/2019 Vezbe 10 - Gui, Swing
5/15
P7I=?7 < 4low la9o"t. @odavanje #1"ttonBa " pl"taj"-i izgled+ probati razvlaenje for&eimportjava.awt.9ontainer;importjava.awt.8imension;importjava.awt.Flow,a-out;importjava.awt.Toolkit;importjavax.swin.!utton;importjavax.swin.Frame;
publicclassFlow extendsFrame{// 8e$ini%ija kom#onenti
private!utton 0;private!utton 2;private!utton 7;private!utton ;private!utton
-
7/25/2019 Vezbe 10 - Gui, Swing
6/15
publicstaticvoidmain(trin+ ars) {wintilities.invokeLater(new?unnale() {
E:verridepublicvoidrun() {
Flow $ = newFlow();&
&);
&&:stali #rimeri 3a ,a-out su u #rojektu OOP1'#aket gui
AKCIJA OTVARANJE UGRAENIH OPCIONIH PANELA
Unutar !n"trut!raza d"g&e je #!tr$%n! &!&at' A(t'!nL'"t$n$r )*ta se radi na klik*Priliko& obrade akcije &og"-e je koristiti "gra!ene panele za interakcij" sa korisniko&0.addA%tion,istener(newA%tion,istener() {
publicvoida%tionPer$ormed(A%tion@vent e) {
trin tekst = :#tionPane.showInputDialog("nesi teskt");:#tionPane.showMessageDialog(null5 tekst);
inti3or = :#tionPane.showConfirmDialog(null5 ":daeri");// C@ = 45 : = 05 9A9@, = 2:#tionPane.showMessageDialog(null5 i3or);
&&);
0. 2.
7. .
D
-
7/25/2019 Vezbe 10 - Gui, Swing
7/15
+,-.,// 2.34 567/ -,8 +,934/3 ,4:;6?3
JButt!nEFH A%tion,istener
JC@$(B!
JKHLKMMNO O KQORS
KLSVO
setele%ted()
isele%ted()
A%tion,istener
9Dane,istener
#7adio1"tton
JKHLKMMNO O KQORSKLSVO
setele%ted()isele%ted()
!uttonGrou#.add(...)
A%tion,istener9Dane,istener
JL'"t
SXNOetele%ted'alue()etele%tedItem()
,istele%tion,istener
#Te3t4ield
YQMKZSMSVX[K LK\ OFMKX N[XNO
etText()setText()
et8o%ument()
8o%ument,istener(Added to Document object
returned by getDocument().)
JT$tAr$a
]S^ZSMSVX[K LK\ OFMKX N[XNO
JTa%%$&Pan$
JONS MO [KV XQKQOVF [KHLKMMN
addTa()insertTa()
etele%ted9om#onent()setele%ted9om#onent()
9Dane,istener
JS(r!Pan$
JKHLKMMNO OX[KZK_O` QOO
[KHLKMMNSset'iew#ort'iew()
JS#'tPan$
JKHLKMMNO O LKQZFQOO [KHLKMMNS
set8ivider,o%ation()
JC!#!n$nt
_ [KHLKMMNMOXZFVF K_F[KHLKMMNF
Jouse,istener
http://www.javamex.com/tutorials/swing/text_fields_labels.shtmlhttp://www.javamex.com/tutorials/swing/jcheckbox.shtml -
7/25/2019 Vezbe 10 - Gui, Swing
8/15
Pri&er > kreirati klas" 4or&a izveden" iz klase 4ra&e i preko pokazivaa t6is+ dodati dva radiob"ttonBa i " zavisnosti koji je odabran ispisati odgovaraj"-" por"k".
packagers;
importjava.awt.event.A%tion@vent;
importjava.awt.event.A%tion,istener;
importjavax.swin.!uttonGrou#;importjavax.swin.Frame;importjavax.swin.,ael;importjavax.swin.?adio!utton;importjavax.swin.wintilities;
publicclassForma2 extendsFrame {
private?adio!utton #rvo= new?adio!utton("::P");private?adio!utton druo= new?adio!utton("IP");private,ael naslov= new,ael(":daeri #redmet");private,ael is#is= new,ael("Trenutno slusam 1 ");
publicForma2(){this.seti3e(445744);
this.set8e$ault9lose:#eration(EXIT_ON_CLOSE);this.set,a-out(null);// radioutton trea ua%iti u ru#u// da i se 3nalo koji se medjusono isklju%uju!uttonGrou# ru#a = new!uttonGrou#();ru#a.add(#rvo);ru#a.add(druo);
naslov.set!ounds(0450457445
-
7/25/2019 Vezbe 10 - Gui, Swing
9/15
// dodavanje ak%ije na dume druodruo.addA%tion,istener(newA%tion,istener() {
E:verridepublicvoida%tionPer$ormed(A%tion@vent e) {
if(druo.isele%ted())is#is.setText("Trenutno slusam 1 IP");
&&);
&
publicstaticvoidmain(trin+ ars) {// kreiranje niti 3a $ormu5 svaka $orma #o nitwintilities.invokeLater(new?unnale() {
E:verridepublicvoidrun() {
Forma2 $ = newForma2();&
&);&
&
Na#!$na kada se akcije &e!"sobno isklj""j" kao " ovo& sl"aj"+ &og"-e je klas" for&aizvesti iz JDra$a da i&ple&entira A(t'!nL'"t$n$rinterfejs ija se &etoda i&ple&entira
E:verridepublicvoida%tionPer$ormed(A%tion@vent e) {
if(#rvo.isele%ted())is#is.setText("Trenutno slusam 1 ::P");
elseis#is.setText("Trenutno slusam 1 IP");
&
a #7adio1"ttoBe je potrebno dodati i&ple&entiran listener a ne praviti nove.#rvo.addA%tion,istener(this);druo.addA%tion,istener(this);
e&a potrebe i&ati dva Action2istenera.
-
7/25/2019 Vezbe 10 - Gui, Swing
10/15
0A@ATA88reirati klas" t"dent sa
para&etri&a i&e+ prezi&e+ prosek. Para&etarizovani& konstr"ktoro& 'veride totring &etode
8reirati klas" Test4rej& sa (prikazan na sl.$) Para&etro& " lista st"denta < #2abel i < #Te3t4ield objekta koji& -e se "nosti podaci o st"denti&a. #2abel polje za ispis rez"ltata i por"ka dva d"g&eta sa slede-i& akcija&a
o @'@A# proverava for&at polja prosek+ da li je float+ i ako je ok dodaje objekat "list" st"denata
o A#1'2#I ispis"je podatke totring &etodo& o st"dent" sa najbolji& proseko&" #2abel> objekat
8o&ponente kreirati i dodavati kao " prvo& pri&er" ili koristiti neki GUI editor za br;ekreiranje izgleda frej&a.
$%
-
7/25/2019 Vezbe 10 - Gui, Swing
11/15
E('#"$ #u'n F'n&!F %u'&$rUkoliko pri kreiranj" nove klase ne&ate window b"ilder potrebno ga je dodati " eclipse
a linka6ttpshheclipse.orghwindowb"ilderhdownload.p6podabrati "pdate 'nza verzij" eclipse koj" posed"jete
Un"tar eclipse idite na elp instal new software"neti link koji ste pret6odno kopirali i cekirati sve pakete koji se pojave+ i "raditi install
akon "spesne instalacije neop6odno je restartovati eclipse i nakon toga se &o;e koristitiwindow b"ilder.
$$
-
7/25/2019 Vezbe 10 - Gui, Swing
12/15
7??#? OOP10 "tu& #a$t.4rej& kreiran " et1eans razvojno& okr";enj" po&o-" GUI editora.
'dabiro& ko&ponente i prevlaenje& na ;eljen" pozicij"kreira se objekat.
Postavljena < #2ablel objetkta i&e+ prezi&e+ prosekPostavljena < #Te3t4ieldBa
Postavljena : d"g&eta @'@A#+ A#1'2#I
Postavljen $ #Te3t4ield por"ka za ko&entare
@esni kliko& na1"tton Add?ventandler action actionPerfor&edkreira se telo &etode za obrad" njegove akcije
ma;niji delovi koda
publicclasstudent {privatetrin ime;privatetrin #re3ime;privatefloat#rosek;
publictudent(trin ime5 trin #re3ime5 float#rosek) {super();this.ime= ime;this.#re3ime= #re3ime;this.#rosek= #rosek;
&publictudent() {&
publicfloatetProsek() {
return#rosek;&
E:verridepublictrin totrin() {
// %ODOAutoenerated metDod stureturn(imeK" "K#re3imeK"1 "K#rosek);
&&
$:
-
7/25/2019 Vezbe 10 - Gui, Swing
13/15
// Generisan kod sa Lindow!uilderompublicclassTestFrame extendsFrame {
privatePanel %ontentPane;
privateTextField textField;privateTextField textFieldM0;
privateTextField textFieldM2;
private,ael #oruka;
Arra-,istNtudentO ls;
/*** ,aun%D tDe a##li%ation.*/
publicstaticvoidmain(trin+ ars) {@ventueue.invokeLater(new?unnale() {
publicvoidrun() {tr({
TestFrame $rame = newTestFrame();$rame.set'isile(true);& catch(@x%e#tion e) {
e.#rintta%kTra%e();&
&&);
&
/*** 9reate tDe $rame.*/
publicTestFrame() {
ls= newArra-,istNtudentO();
set8e$ault9lose:#eration(Frame.EXIT_ON_CLOSE);set!ounds(0445 0445
-
7/25/2019 Vezbe 10 - Gui, Swing
14/15
%ontentPane.add(textField);textField.set9olumns(04);
textFieldM0= newTextField();textFieldM0.set!ounds(0265 05 65 24);%ontentPane.add(textFieldM0);textFieldM0.set9olumns(04);
textFieldM2= newTextField();textFieldM2.set!ounds(0265 Q5 65 24);%ontentPane.add(textFieldM2);textFieldM2.set9olumns(04);
!utton tn8odaj = new!utton("8odaj");btnDodaj)add*ction#istener+new*ction#istener+,{
publicvoida%tionPer$ormed(A%tion@vent e) {trin ime = textField.etText();trin #re3ime = textFieldM0.etText();trin #rosektr = textFieldM2.etText().trim();tr({
float#rosek = Float.parseFloat(#rosektr);tudent s = newtudent(ime5 #re3ime5 #rosek);ls.add(s);
%learFields();& catch(@x%e#tion ex) {
#oruka.setText("Prosek1 #oresn $ormat>>>");&
&&);tn8odaj.set!ounds(
-
7/25/2019 Vezbe 10 - Gui, Swing
15/15
#oruka= new,ael("");#oruka.set!ounds(H5 0Q5 2QQ5 0);%ontentPane.add(#oruka);
&privatevoid%learFields(){
textField.setText("");textFieldM0.setText("");
textFieldM2.setText("");
#oruka.setText(" ");&
&
OAI
apraviti pri&er za nek" f"nkcionalnost iz W1 palete.
pr 1o32a9o"t pri&er+ #5o&bo1o3 pri&er
Te&" prijaviti na &oodl"+ jedno& prijavljena te&a se nes&e prijaviti ponovo od strane nekog dr"gog st"denta.
D!rat &!a$ kopirati definisani for&at do&a-eg zadatka i " tabel" ispod "baciti kod iprikaz for&e
Pri&er I=? P7I=?7A tekst zadatka
-OD forme i obrade akcija. komentarisati najva/nije delove primera
Print%rean $orme
Pr$&a$ "$ F!r& &!u$nt ' rar ar@'Ma #r!$ta #!& na'M! n#r #5o&bo1o3 pri&er.rar
$C