Transcript File

Glava 4
Pisanje klasa
Pisanje klasa
• Koristili smo predefinisane klase. Sada cemo
vidjeti kako napisati vlastitu klasu za definisanje
objekata
• U glavi 4 razmatramo:








Definicije klase
Instanciranje podataka
Inkapsulaciju i Java modifikatore
Deklaraciju metoda i prenos parametara
Konstruktore
Graficke objekte
Dogadjaje i slusaoce (events i listeners)
Dugmad i tekstualna polja
© 2004 Pearson Addison-Wesley. All rights reserved
4-2
Pregled
Anatomija klase
Inkapsulacija
Anatomija metode
Graficki objekti
Graficki interfejs korisnika (GUI)
Dugmad i tekstualna polja
© 2004 Pearson Addison-Wesley. All rights reserved
4-3
Pisanje klasa
• Programi koje smo pisali u prethodnim primjerima
koriste klase definisane u standardnim
bibliotekama
• Sada pocinjemo pisati programe koji se zasnivaju
na klasama koje sami pisemo
• Klasa koja sadrzi metodu main je start programa
• Pravo objektno-orijentisano programiranje se
zasniva na definisanju klasa koje predstavljaju
objekte sa dobro definisanim karakteristikama i
funkcionalnoscu
© 2004 Pearson Addison-Wesley. All rights reserved
4-4
Klase i objekti
• U Glavi 1 smo rekli da objekat ima stanje i ponasanje
• Razmotrimo kocke sa sest strana
 njihova stanja mogu biti definisana kao strana koja se vidi
 njihovo osnovno ponasanje je u tome da mogu biti bacene
• Klasa sluzi kao kalup za pravljenje objekata
• U softveru mozemo predstaviti jednu kocku koja je model
opisanog stanja i ponasanja
• Mi mozemo instancirati onoliko objekata kocka koliko nam je
potrebno u datom programu
© 2004 Pearson Addison-Wesley. All rights reserved
4-5
Klase
• Klasa sadrzi deklaracije podataka i deklaracije
metoda
int velicina, tezina;
char kategorija;
Deklaracije podataka
Deklaracije metoda
© 2004 Pearson Addison-Wesley. All rights reserved
4-6
Klase
• Vrijednosti podataka definisu stanje objekta koji je
kreiran pomocu te klase
• Funkcionalnost metoda definise ponasanje objekta
• Za klasu Die (Kocka), mozemo deklarisati jedan
cio broj koji predstavlja vrijednost na strani koja
se vidi
• Jedna od metoda treba “bacati” kocku
postavljajuci tu vrijednost na slucajan broj izmedju
jedan i sest
© 2004 Pearson Addison-Wesley. All rights reserved
4-7
Klase
• Zelimo dizajnirati klasu Die (Kocka) sa njenim
podacima i metodama i uciniti je reupotrebljivom i
lako prilagodljivom za prelaz sa aplikacije na
aplikaciju
• Nece svaki program koristiti sve aspekte date
klase
• Vidi RollingDice.java (strana 157)
• Vidi Die.java (strana 158)
© 2004 Pearson Addison-Wesley. All rights reserved
4-8
Klasa Kocka
•
Klasa Kocka sadrzi dvije vrijednosti
 konstantu MAX koja predstavlja maksimalnu vrijednost
stranice
 integer faceValue koji predstavlja vrijednost aktuelne
stranice
• Metoda roll koristi random metodu iz klase Math
za odredjivanje nove aktualne vrijednosti stranice
• Takodje su date metode za eksplicitno postavljanje
i vracanje aktualne vrijednosti stranice u bilo kom
trenutku
© 2004 Pearson Addison-Wesley. All rights reserved
4-9
Metod toString
• Svaka klasa koja predstavlja objekte mogla bi
definisati jedan toString metod
• Metod toString vraca string karaktera koji na
neki nacin predstavlja objekat
• Metod se automatski poziva kada se objekat
dopisuje na string ili kada objekat saljemo na
println metod
© 2004 Pearson Addison-Wesley. All rights reserved
4-10
Konstruktori
• Kao sto smo vec rekli, konstruktor je specijalan
metod koji se koristi za inicijalno kreiranje objekta
• Konstruktor ima isto ime kao i klasa
• Konstruktor Die (Kocka) koristi se za inicijalno
postavljanje broja stranice na jedan, za svaki novi
objekat
• Konstruktore cemo detaljnije razmotriti kasnije
© 2004 Pearson Addison-Wesley. All rights reserved
4-11
Doseg podataka
• Doseg (scope) podataka je oblast u programu u kojoj podaci
mogu biti referencirani (koristeni)
• Podaci deklarisani na nivou klase mogu biti referencirani od
strane svake metode te klase
• Podaci deklarisani u nekoj metodi mogu biti koristeni samo u
toj metodi
• Podaci deklarisani u nekoj metodi nazivaju se lokalni podaci
• U klasi Die (Kocka), varijabla result je deklarisana unutar
metode toString – ona je lokalna za taj metod i ne moze biti
koristena nigdje vise
© 2004 Pearson Addison-Wesley. All rights reserved
4-12
Podaci instanci
• Varijabla faceValue u klasi Die naziva se podatak
instance jer svaka instanca (objekat) koji se kreira
ima svoju verziju tog podatka
• Klasa deklarise tipove podataka, ali ne rezervise
prostor u memoriji za te podatke
• Svaki put kada se kreira neki objekat tipa Kocka,
kreira se takodje nova vrijednost varijable
faceValue
• Objekti klase dijele definiciju metoda, ali svaki
objekat ima svoj vlastiti prostor
• To je jedini nacin da objekti mogu imati razlicita
stanja
© 2004 Pearson Addison-Wesley. All rights reserved
4-13
Podaci instanci
• Mi mozemo uzeti dva objekta iz klase Kocka
programa RollingDice kao sto slijedi:
kocka1
faceValue
5
kocka2
faceValue
2
Svaki objekat upravlja svojom varijablom
faceValue, pa prema tome i svojim stanjem
© 2004 Pearson Addison-Wesley. All rights reserved
4-14
UML Dijagrami
• UML je skracenica od Unified Modeling Language
• UML dijagrami pokazuju relacije izmedju klasa i
objekata
• Neki UML class dijagram sastoji se od jedne ili
vise klasa, svaka sa sekcijom za ime klase,
atribute (podatke), i operacije (metode)
• Linije izmedju klasa predstavljaju asocijacije
• Isprekidana linija pokazuje da jedna klasa koristi
drugu (zove njene metode)
© 2004 Pearson Addison-Wesley. All rights reserved
4-15
UML dijagram klasa
• UML dijagram za RollingDice program:
RollingDice
Die
faceValue : int
main (args : String[]) : void
© 2004 Pearson Addison-Wesley. All rights reserved
roll() : int
setFaceValue (int value) : void
getFaceValue() : int
toString() : String
4-16
Pregled
Anatomija klase
Inkapsulacija
Anatomija metode
Graficki objekti
Graficki interfejs korisnika (GUI)
Dugmad i tekstualna polja
© 2004 Pearson Addison-Wesley. All rights reserved
4-17
Inkapsulacija
• Objekat mozemo posmatrati iz dva aspekta:
 unutrasnji - detalji varijabli i metoda klase koja ga
definise
 spoljasnji - servisi koje objekat obezbjedjuje i nacin na
koji objekat reaguje sa okolinom
• Sa spoljasnjeg aspekta, objekat je inkapsuliran
(ucauren) entitet, koji obezbjedjuje jedan skup
specificnih servisa
• Ovi servisi definisu interface objekta
© 2004 Pearson Addison-Wesley. All rights reserved
4-18
Inkapsulacija
• Jedan objekat (zvani klijent) moze koristiti drugi
objekat zbog servisa koje ovaj obezbjedjuje
• Klijent nekog objekta moze traziti njegove servise
(zvati njegove metode), ali on ne mora znati kako
su ovi servisi napravljeni
• Svaka promjena stanja objekta (njegovih varijabli)
mora biti obavljena preko metoda objekta
• Mozemo napraviti da klijentu bude tezak ili cak
nemoguc direktan pristup varijablama objekta
• To jest, objekat bi trebao uravljati samim sobom
© 2004 Pearson Addison-Wesley. All rights reserved
4-19
Inkapsulacija
• Ucaureni objekat moze biti shvacen kao crna kutija
– njegov unutrasnji rad je skriven od klijenta
• Klijent poziva metode interfejsa objekta, koje
upravljaju podacima instanci
klijent
Metode
Podaci
© 2004 Pearson Addison-Wesley. All rights reserved
4-20
Modifikatori vidljivosti
• U Javi je vidljivost ostvarena preko osdgovarajuce
upotrebe modifikatora vidljivosti
• Rijec modifier je rezervisana rijec u Javi koja
specificira partikularne karakteristike metoda ili
podataka
• Modifikator final koristi se za definiciju konstanti
• Java ima tri modifikatora vidljivosti: public,
protected i private
• Modifikator protected je povezan sa
nasljedjivanjem, sto ce biti diskutovano kasnije
© 2004 Pearson Addison-Wesley. All rights reserved
4-21
Modifikatori vidljivosti
• Clanovi klase koji su deklarisani sa public visibility
mogu se svuda koristiti
• Clanovi klase koji su deklarisani sa private
visibility mogu biti koristeni samo u toj klasi
• Clanovi deklarisani bez modifikatora vidljivosti
imaju default visibility i mogu biti referencirani u
svakoj klasi iz istog paketa
• Kasnije cemo dati jedan pregled Java modifikatora
© 2004 Pearson Addison-Wesley. All rights reserved
4-22
Modifikatori vidljivosti
• Javne varijable narusavaju ucaurenje jer
dozvoljavaju klijentu da direktno “dosegne” i
modifikuje vrijednosti
• Dakle, varijable instanci ne bi trebale biti
deklarisane sa javnom vidljivoscu
• Prihvatljivo je da konstanta ima javnu vidljivost,
sto joj daje mogucnost da bude vidjena izvan klase
• Javne konstante ne narusavaju inkapsulaciju, jer
iako klijent moze pristupiti takvoj konstanti, njena
vrijednost ne moze biti promijenjena
© 2004 Pearson Addison-Wesley. All rights reserved
4-23
Modifikatori vidljivosti
• Metode koje daju servise objekata su deklarisane
sa javnom vidljivoscu tako da mogu biti pozvane
od strane klijenata
• Javne metode nazivaju se takodje servisi (service
methods)
• Metod kreiran jednostavno da pomogne neki
servis naziva se metod podrske (support method)
• Posto metod podrske nije namijenjen za zvanje od
strane klijenta, on ne treba biti deklarisan sa
javnom vidljivoscu
© 2004 Pearson Addison-Wesley. All rights reserved
4-24
Modifikatori vidljivosti
Varijable
Metode
public
private
Narusava
inkapsulaciju
Namece
inkapsulaciju
Daje servise
klijentu
© 2004 Pearson Addison-Wesley. All rights reserved
Podrzava druge
metode u klasi
4-25
Selektori i modifikatori
• Posto su podaci instanci privatni, klasa obicno
daje servise za pristup i modifikovanje vrijednosti
varijabli
• Selektor metoda vraca aktuelnu vrijednost
varijable
• Modifikator metoda mijenja vrijednost varijable
• Imena selektorskih (accessor) i modifikatorskih
(mutator) metoda imaju formu getX i setX,
respektivno, gdje je X ime vrjednosti
• Ponekad ih na engleskom nazivaju “getters” i
“setters”
© 2004 Pearson Addison-Wesley. All rights reserved
4-26
Restrikcije mutatora
• Koristenje mutatora daje dizajneru klase
mogucnost da uskrati klijentu opcije
modifikovanja stanja objekta
• Mutator se cesto dizajnira tako da vrijednosti
varijabli mogu biti uzete samo uz odredjena
ogranicenja, iz odredjenog intervala
• Na primjer, mutator setFaceValue klase Kocka
treba suziti vrijednosti na vrijednosti iz zadatog
ranga (1 to MAX)
• U glavi 5 vidjecemo kako takve restrikcije mogu
biti impelmentirane
© 2004 Pearson Addison-Wesley. All rights reserved
4-27
Pregled
Anatomija klase
Enkapsulacija
Anatomija metode
Graficki objekti
Graficki interfejs korisnika (GUI)
© 2004 Pearson Addison-Wesley. All rights reserved
4-28
Deklaracija metode
• Ispitujemo detaljnije deklaraciju metode
• Deklaracija metode specificira kod koji ce biti
izveden kada je metod pozvan
• Kada je metoda pozvana, tok kontrole ide na
metodu i izvodi njegov kod
• Kada metoda zavrsi rad, tok se vraca na mjesto
gdje je metoda bila pozvana i nastavlja
• Poziv moze i ne mora vratiti neku vrijednost,
zavisno od definicije metoda
© 2004 Pearson Addison-Wesley. All rights reserved
4-29
Kontrola izvodjenja metode
• Ako je pozvana metoda u samoj klasi, potrebno je
navesti samo ime metode
compute
myMethod
myMethod();
© 2004 Pearson Addison-Wesley. All rights reserved
4-30
Kontrola izvodjenja metode
• Pozvana metoda je cesto dio druge klase ili
objekta
main
obj.doIt();
© 2004 Pearson Addison-Wesley. All rights reserved
doIt
helpMe
helpMe();
4-31
Naslov metode
• Deklaracija metode pocinje sa naslovom metode
char calc (int num1, int num2, String message)
Ime
metode
Tip
koji
vraca
Lista parametara
Lista parametara specificira tip
i ime svakog parametra
Ime parametra u deklaraciji metode
naziva se formalni parametar
© 2004 Pearson Addison-Wesley. All rights reserved
4-32
Tijelo metode
• Iza naslova metode dolazi tijelo metode
char calc (int num1, int num2, String message)
{
int sum = num1 + num2;
char result = message.charAt (sum);
return result;
sum i result
Su lokalni
podaci
Izraz u return
mora biti konzistentan sa
tipom koji metoda vraca
Oni se kreiraju svaki
put kada pozovemo
metodu, a unistavaju
se kada metoda
zavrsi rad
}
© 2004 Pearson Addison-Wesley. All rights reserved
4-33
Komanda return
• Tip return metode indicira tip vrijednosti koju
metoda salje nazad na lokaciju poziva
• Metoda koja ne vraca vrijednost ima void kao tip
koji vraca
• Komanda return specificira vrijednost koja ce biti
vracena
 return expression;
• Izraz mora zadovoljiti tip komande return
© 2004 Pearson Addison-Wesley. All rights reserved
4-34
Parametri
• Kada je pozvana metoda, aktuelni parametri u
pozivu se kopiraju u formalne parametre u naslovu
metode
ch = obj.calc (25, count, "Hello");
char calc (int num1, int num2, String message)
{
int sum = num1 + num2;
char result = message.charAt (sum);
return result;
}
© 2004 Pearson Addison-Wesley. All rights reserved
4-35
Lokalni podaci
• Kao sto smo vidjeli, lokalne varijable mogu biti
deklarisane unutar metode
• Formalni parametri metode kreiraju automatske
lokalne varijable kada je metod pozvan
• Kada metoda zavrsi rad, sve lokalne varijable
bivaju unistene (ukljucujuci i formalne parametre)
• Zapamtimo da instancione varijable, deklarisane
na nivou klase, postoje sve dok postoji objekat
© 2004 Pearson Addison-Wesley. All rights reserved
4-36
Primjer bankovni racun
• Primjer demonstrira detalje implementacije klasa i
metoda
• Predstavljamo bankovni racun klasom sa imenom
Account
• Atributi ukljucuju broj racuna, trenutno stanje i ime
vlasnika racuna
• Ponasanje (ili servisi) su odredjeni metodama
depozit, podizanje i dodavanje interesa
© 2004 Pearson Addison-Wesley. All rights reserved
4-37
Drajver programi
• Drajver program vodi koristenjne drugih,
interesantnijih dijelova programa
• Drajver programi se cesto koriste za testiranje
drugih dijelova softvera
• Klasa Transactions sadrzi main metod koji vodi
koristenje klase Account, ispitujuci njene servise
• Vidi Transactions.java (str 172)
• Vidi Account.java (str 173)
© 2004 Pearson Addison-Wesley. All rights reserved
4-38
Primjer bankovni racun
acct1
acctNumber
72354
balance 102.56
“Ted Murphy”
name
acct2
acctNumber
69713
balance
40.00
name
© 2004 Pearson Addison-Wesley. All rights reserved
“Jane Smith”
4-39
Primjer bankovni racun
• Postoje neka poboljsanja koja mozemo uvesti na
klasi Account
• Formalne selektorske (getters) metode i
modifikatorske (setters) metode mogu biti
definisane za sve podatke
• Dizajn nekih metoda moze biti cvrsci, na primjer
verifikacija da je amount parametar metode
withdraw pozitivan
© 2004 Pearson Addison-Wesley. All rights reserved
4-40
Ponovo o konstruktorima
• Zapamtimo da konstruktor u hederu nema
specifikovan tip koji vraca, cak ni void
• Cesta je greska da se stavllja return tip za
konstruktor, sto ga cini “regularnom” metodom
koja ima isto ime kao klasa
• Programer ne mora definisati konstruktor za neku
klasu
• Svaka klasa ima default konstruktor koji nema
nikakve parametre
© 2004 Pearson Addison-Wesley. All rights reserved
4-41
Pregled
Anatomija klase
Enkapsulacija
Anatomija metode
Graficki objekti
Graficki interfejs korisnika (GUI)
Dugmad I tekstualna polja
© 2004 Pearson Addison-Wesley. All rights reserved
4-42
Graficki objekti
• Neki objekti sadrze informaciju koja odredjuje
kako se ti objekti predstavljaju vizualno
• Vecina GUI komponenti su vizualne
• Mozemo imati i neke efekte prilikom crtanja
komponenti
• Imali smo ovo u Glavi 2 kada smo definisali paint
metodu apleta
• Pogledajmo neke druge primjere
© 2004 Pearson Addison-Wesley. All rights reserved
4-43
Primjer “Nasmijesena lica”
• Program SmilingFace crta lice prema definiciji iz
metode paintComponent odgovarajuceg panel
• Vidi SmilingFace.java (strana 177)
• Vidi SmilingFacePanel.java (strana 178)
• Metoda main klase SmilingFace instancira
SmilingFacePanel i prikazuje ga
• Klasa SmilingFacePanel je izvedena iz klase
JPanel pomocu nasljedjivanja (inheritance)
© 2004 Pearson Addison-Wesley. All rights reserved
4-44
Primjer “Nasmijesena lica”
• Klasa Swing ima metodu paintComponent
• Metoda paintComponent prihvata objekt klase
Graphics koji predstavlja graficki sadrzaj panela
• Definisemo metodu paintComponent za crtanje
lica, sa odgovarajucim pozivima metoda iz klase
Graphics
• Obratite paznju na razliku izmedju crtanja na
panelu i dodavanja panelu drugih GUI komponenti
© 2004 Pearson Addison-Wesley. All rights reserved
4-45
Primjer Splat
• Primjer Splat struktuiran je nesto drugacije
• On crta skup obojenih krugova na panelu, ali svaki
krug predstavlja poseban objekat koji upravlja
svojom grafickom informacijom
• Metod panela paintComponent “trazi” od svakog
kruga da crta samog sebe
• Vidi Splat.java (strana 180)
• Vidi SplatPanel.java (strana 181)
• Vidi Circle.java (strana 182)
© 2004 Pearson Addison-Wesley. All rights reserved
4-46
Pregled
Anatomija klase
Encapsulacija
Anatomija metode
Graficki objekti
Graficki interfejs korisnika (GUI)
Dugmad i tekstualna polja
© 2004 Pearson Addison-Wesley. All rights reserved
4-47
Graficki interfejs korisnika (GUI)
• Graficki interfejs korisnika (GUI) u Javi je kreiran
sa najmanje tri vrste objekata:
 komponente
 dogadjaji
 slusaoci (listeners)
• Vec smo diskutovali komponente (components),
kao objekte koji predstavljaju elemente ekrana
 labele, dugmad (buttons), tekstualna polja, menije, itd.
• Neke komponente su kontajneri (containers) koji
sadrze i organizuju druge komponente
 Okviri (frames), paneli, apleti, okviri za dijalog
© 2004 Pearson Addison-Wesley. All rights reserved
4-48
Dogadjaji
• Dogadjaj (event) je objekat koji predstavlja neke
aktivnosti na koje mozemo imati zelju odgovoriti
• Na primjer, mozemo htjeti da nas program izvrsi
neke akcije kada se desi da je:






mis pomaknut
mis je vucen (dragged)
kliknuto je dugme misa
kliknuto je graficko dugme
pritisnut je taster na tastaturi
vrijeme na tajmeru je isteklo
• Dogadjaji cesto odgovaraju korisnikovim akcijama,
ali ne uvijek
© 2004 Pearson Addison-Wesley. All rights reserved
4-49
Dogadjaji i slusaoci
• Standardne biblioteke klasa u Javi sadrze vise
klasa koje predstavljaju tipicne dogadjaje
• Komponente, kao sto su graficka dugmad,
generisu (ili ispale) neki dogadjaj kada se on desi
• Objekt slusalac (listener) “ceka" da se neki
dogadjaj desi i odgovara na potreban nacin
• Mozemo dizajnirati objekte slusaoce tako da
preduzimaju bilo koju od odgovarajucih akcija
kada se desi neki dogadjaj
© 2004 Pearson Addison-Wesley. All rights reserved
4-50
Dogadjaji i slusaoci
Dogadjaj
(Event)
Komponenta
(Component)
Slusalac
(Listener)
Komponentni objekat
moze generisati neki dogadjaj
Odgovarajuci objekat slusalac
je dizajniran
da odgovori na dogadjaj
Kada se dogadjaj desi, komponenta zove
odgovarajuci metod slusaoca,
saljuci objekat koji opisuje dogadjaj
© 2004 Pearson Addison-Wesley. All rights reserved
4-51
Razvoj GUI
• Uglavnom koristimo komponente i dogadjaje koji
su predefinisani preko klasa u bibliotekama klasa
Jave
• Dakle, za kreiranje Java programa koji koristi GUI
moramo:
 instancirati i postaviti potrebne komponente
 implementirati klase slusalaca za svaki dogadjaj koji nam
je bitan
 Postaviti odnose izmedju slusalaca i komponenti koji
generisu odgovarajuce dogadjaje
 Sada cemo objasniti neke nove komponente i vidjeti kako
se ove komponente slazu u jednu cjelinu
© 2004 Pearson Addison-Wesley. All rights reserved
4-52
Pregled
Anatomija klase
Encapsulacija
Anatomija metode
Graficki objekti
Graficki interfejs korisnika
Dugmad i tekstualna polja
© 2004 Pearson Addison-Wesley. All rights reserved
4-53
Dugmad
• Prekidac (push button) je komponenta koja
dozvoljava korisniku da startuje akciju pritiskom
na graficko dugme, koristeci misa
• Prekidac je definisan u klasi JButton
• On generise aktivan dogadjaj (action event)
• Primjer PushCounter prikazuje prekidac koji
inkrementira brojac svaki put kada je pritisnut
• Vidi PushCounter.java (strana 186)
• Vidi PushCounterPanel.java (strana 187)
© 2004 Pearson Addison-Wesley. All rights reserved
4-54
Primjer Push Counter
• Komponente GUI su dugmad, labela za
prikazivanje brojaca, panel za organizaciju
komponenti, i glavni okvir
• Klasa PushCounterPanel predstavlja panel
koristen da prikaze dugmad i labele
• Klasa PushCounterPanel je izvedena iz JPanel
koristenjem nasljedjivanja
• Konstruktor PushCounterPanel postavlja
elemente GUI i inicijalizira brojac na nulu
© 2004 Pearson Addison-Wesley. All rights reserved
4-55
Primjer Push Counter
• Klasa ButtonListener je slusalac za akcione
dogadjaje generisane dugmetom
• Implementiran je kao unutrasnja (inner) klasa, sto
znaci da je definisan u tijelu druge klase
• To ubrzava komunikaciju izmedju slusaoca i
komponenti GUI
• Unutrasnje klase treba koristiti samo u situacijama
u kojim postoji blizak odnos izmedju dvije klase i
unutrasnja klasa nije potrebna u drugom
kontekstu
© 2004 Pearson Addison-Wesley. All rights reserved
4-56
Primjer Push Counter
• Klase slusaoci su implementirane preko
napisanog interfejsa slusaoca (listener interface)
• Klasa ButtonListener implementira interfejs
ActionListener
• Interfejs je lista metoda koje implementirajuca
klasa mora definisati
• Jedini metod u interfejsu ActionListener je
metoda actionPerformed
• Biblioteka klasa Jave sadrzi veliki broj tipova
interfejsa za razne dogadjaje
• Interfejsi ce biti diskutovani vise u Glavi 6
© 2004 Pearson Addison-Wesley. All rights reserved
4-57
Primjer Push Counter
• Konstruktor PushCounterPanel:
 instancira objekat ButtonListener
 Uspostavlja odnos izmedju dugmeta i slusaoca preko
poziva addActionListener
• Kada korisnik pritisne dugme, komponenta dugme
kreira objekat ActionEvent i zove metod
actionPerformed slusaoca
• Metod actionPerformed inkrementira brojac i
resetuje tekst na labeli
© 2004 Pearson Addison-Wesley. All rights reserved
4-58
Tekstualna polja
• Posmatrajmo drugi primjer GUI koji koristi drugi
tip komponenti
• Tekstualno polje (text field) omogucuje korisniku
unos jedne linije ulaza
• Ako je kursor u tekstualnom polju, komponenta
tekstualnog polja generise aktivni dogadjaj kada
se pritisne taster enter
• Vidi Fahrenheit.java (strana 190)
• Vidi FahrenheitPanel.java (strana 191)
© 2004 Pearson Addison-Wesley. All rights reserved
4-59
Primjer Fahrenheit
• Slicno kao i u primjeru PushCounter, GUI je postavljen u
odvojenoj klasi panel
• Unutrasnja klasa TempListener definise slusaoca za aktivni
dogadjaj generisan od strane tekstualnog polja
• Konstruktor FahrenheitPanel instancira slusaoca i dodaje
ga tekstualnom polju
• Kada korisnik ukuca temperaturu i pritisne enter, tekstualno
polje generise aktivni dogadjaj i zove metod
actionPerformed slusaoca
• Metod actionPerformed racuna konverziju i abdejtuje
labelu sa rezultatima
© 2004 Pearson Addison-Wesley. All rights reserved
4-60
Sazetak
• U Glavi 4 razmotrili smo:








definicije klase
instanciranje podataka
inkapsulaciju i Java modifikatore
metode deklaracija i prenosenje parametara
konstruktore
graficke objekte
dogadjaji i slusaoci
dugmad i tekstualna polja
© 2004 Pearson Addison-Wesley. All rights reserved
4-61