Vezbe 10 - Gui, Swing

download Vezbe 10 - Gui, Swing

of 15

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