You are on page 1of 28

IDZ DO

PRZYKADOWY ROZDZIA
SPIS TRECI

KATALOG KSIEK
KATALOG ONLINE

JBuilder X. Efektywne
programowanie w Javie
Autor: Jacek Matulewski
ISBN: 83-7361-293-9
Format: B5, stron: 384

ZAMW DRUKOWANY KATALOG

TWJ KOSZYK
DODAJ DO KOSZYKA

CENNIK I INFORMACJE
ZAMW INFORMACJE
O NOWOCIACH
ZAMW CENNIK

CZYTELNIA
FRAGMENTY KSIEK ONLINE

Jeli wierzy prognozom firmy Borland producenta JBuildera pod koniec obecnego
dziesiciolecia prawie 80% aplikacji bdzie tworzonych w Javie i bazujcych na niej
rodowiskach. Rozmaite dziedziny ludzkiej dziaalnoci stawiaj przed informatyk
coraz to wiksze wymagania. Coraz cenniejszym zasobem staje si inwencja
i produktywno projektantw-programistw, ktrym trzeba w jak najwikszym stopniu
umoliwi twrcze dziaanie. Warto ich odciy od drugorzdnych zada, ktre
z powodzeniem mona powierzy coraz lepszym i coraz taszym maszynom.
Obecnie, w dobie upowszechnienia si komputerw osobistych, trudno wyobrazi
sobie profesjonalne tworzenie aplikacji bez usprawniajcych to przedsiwzicie
nowoczesnych narzdzi (RAD), z JBuilderem na czele. Warto pamita, e firma
Borland jest producentem dwch innych narzdzi RAD, ktre zrewolucjonizoway
proces tworzenia aplikacji: Delphi i C++Buildera - kolejne wersje tych produktw
obecne s na rynku od niemal dziesiciu lat.
Niniejsza ksika stanowi praktyczny podrcznik zarwno dla pocztkujcych,
ktrzy na gruncie JBuildera zamierzaj zdobywa swe pierwsze dowiadczenia
programistyczne, jak i tych, ktrzy w swojej pracy uywaj Delphi i C++Buildera,
a w JBuilderze szukaj interesujcej alternatywy.
W ksice omwiono midzy innymi:

Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl

Podstawy jzyka Java i bogate mechanizmy rodowiska zintegrowanego


JBuildera X
Korzystanie z nowoczesnych technik programistycznych oraz narzdzi
i mechanizmw wspomagajcych tworzenie aplikacji i apletw
Stosowanie bibliotek i szablonw oraz JavaBeans
Bazodanowe zastosowania JBuildera X, mechanizmy JDataStore, JDBC i ODBC
Tworzenie i uywanie archiww JAR
Modelowanie i projektowanie komponentw
Dokumentowanie procesu projektowego za pomoc JavaDoc
Nie tra czasu na co, w czym moe Ci wyrczy komputer; zajmij si projektowaniem
apletw i aplikacji.

Spis treci
Wstp ............................................................................................... 9
Rozdzia 1. Pierwsze spotkanie z JBuilderem ...................................................... 11
Trivia .................................................................................................................................11
Co to jest JBuilder?.....................................................................................................11
Nie tylko JBuilder .......................................................................................................12
Co nowego w darmowej edycji JBuilder X Foundation? ...........................................13
Zintegrowane rodowisko programistyczne......................................................................14
Przewodnik po oknach i zakadkach IDE ...................................................................14
Jak bezbolenie przesi si z Delphi lub C++ Buildera do JBuildera? ...................17
Pomoc .........................................................................................................................18
Konfigurowanie edytora i innych elementw rodowiska programisty .....................19
Tworzenie i zarzdzanie projektem...................................................................................25
Ustawienia formatowania kodu rdowego ..............................................................29
JBuilder w subie programisty, czyli przez Jav na skrty .............................................30
Kreator apletu. Pierwszy aplet Hello World! ..........................................................30
Aby obejrze aplet w zewntrznej przegldarce.....................................................37
Analiza kodu pierwszego apletu .................................................................................40
Osadzanie apletu w dokumencie HTML ....................................................................43
Kontrola dziaania apletu przez przegldark.............................................................44
CodeInsight budka suflera .....................................................................................47
Parametry odbierane z dokumentu HTML .................................................................48
Kontrola dziaania apletu poprzez komponenty sterujce i ich metody zdarzeniowe....52
Jak skasowa niepotrzebn metod zdarzeniow? .....................................................59
Modyfikacja konfiguracji uruchamiania ...........................................................................59
Kilka sw o debugowaniu................................................................................................63

Rozdzia 2. Java ................................................................................................ 71


Kilka sw wstpu .............................................................................................................71
Nowe i stare cechy Javy ..........................................................................................71
Wirtualna maszyna Javy. Przenono .......................................................................72
Czy mona za pomoc JBuildera? ..........................................................................73
Jzyk..................................................................................................................................73
Komentarze .................................................................................................................74
Konwencja wielkoci liter...........................................................................................74
Proste typy danych......................................................................................................75
acuchy.....................................................................................................................77
Tablice.........................................................................................................................79
Instrukcje sterujce .....................................................................................................81

JBuilder X. Efektywne programowanie w Javie


Klasy i obiekty ..................................................................................................................96
Nie warto unika klas i obiektw! ..............................................................................96
Projektowanie klasy ....................................................................................................97
Kilka dodatkowych wiadomoci o klasach w skrcie ..............................................130

Rozdzia 3. Przykadowe aplety i aplikacje........................................................ 135


Kolejne przykady wykorzystania biblioteki AWT do projektowania RAD
w JBuilderze .................................................................................................................136
Aplet Scrollbars ........................................................................................................136
Tworzenie apletu bdcego rwnoczenie aplikacj. Pobieranie informacji
o wirtualnej maszynie Javy ....................................................................................144
Biblioteka Swing (Java 2) ...............................................................................................155
Swing kontra AWT ...................................................................................................155
Pierwsza aplikacja Swing Notatnik .....................................................................156
Aplikacja JPictureView obrazy, ikony i pasek narzdzi......................................186

Rozdzia 4. Praca z kodem. Szablony................................................................ 199


Korzystanie z szablonw podczas rcznego projektowania interfejsu. Aplet Puzzle.....199
Projektowanie RAD interfejsu vs. wykorzystanie tablic komponentw ..................199
Meneder pooenia komponentw ..........................................................................200
Rczne przygotowanie interfejsu apletu. Tablice obiektw .....................................205
Prawie rczne tworzenie metod zdarzeniowych i nasuchiwaczy.........................208
Metoda zdarzeniowa .................................................................................................211
Odmierzanie czasu w osobnym wtku. Tworzenie szablonw. Ukadanie puzzli na czas. ...219

Rozdzia 5. Aplikacje konsolowe w JBuilderze .................................................. 227


Rozdzia 6. Komponenty JavaBean od rodka ................................................... 231
Tworzenie komponentw JavaBean................................................................................231
Klasa MigajacyPrzycisk i rodowisko do jej testowania..........................................232
Wykorzystanie interfejsu Runnable..........................................................................237
Waciwoci komponentw ......................................................................................243
Definiowanie dodatkowych zdarze.........................................................................247
Instalowanie komponentu na palecie komponentw JBuildera ......................................254
Klasa typu BeanInfo towarzyszca komponentowi ........................................................258
BeansExpress ..................................................................................................................261
Waciwoci ..............................................................................................................263
Zdarzenia...................................................................................................................266
Edytor waciwoci i BeanInfo .................................................................................267
Diagram UML komponentu......................................................................................270
Silnik komponentu (metoda run) ..............................................................................271
Inicjacja komponentu................................................................................................273
Testowanie komponentu ...........................................................................................274

Rozdzia 7. Dystrybucja apletw, aplikacji i ziarenek JavaBean ......................... 277


Ktre pliki przenie na serwer WWW, aby aplet dziaa? Jakie pliki
naley doczy do aplikacji, aby j uruchomi na innym komputerze?......................278
Rozpoznawanie plikw skompilowanych klas .........................................................278
Tworzenie skryptw, plikw wsadowych i skrtw.................................................279
Izolowanie klas aplikacji .......................................................................................282
Pliki JAR. Archive Builder .............................................................................................282
Umieszczanie aplikacji w archiwach JAR................................................................283
Umieszczanie apletw w archiwach JAR .................................................................289
Komponenty JavaBean w archiwach JAR................................................................290

Spis treci

7
Tworzenie pliku uruchamialnego....................................................................................294
Tworzenie dokumentacji .................................................................................................296
Tworzenie dokumentacji za pomoc javadoc z JDK................................................297
Kreator Javadoc ........................................................................................................300

Rozdzia 8. Bazy danych w JBuilderze............................................................... 305


Kilka sw wprowadzenia ...............................................................................................305
Podstawowe pojcia zwizane z bazami danych ......................................................306
Czy znajomo SQL jest niezbdna?........................................................................306
Lokalne bazy danych. JDBC i ODBC.............................................................................307
Konfigurowanie DSN dla bazy danych ODBC (Windows) .....................................308
Tworzenie moduu danych za pomoc Data Modeler. Skadnia polecenia
SELECT jzyka SQL. ............................................................................................309
Tworzenie aplikacji bazodanowych..........................................................................315
Komponenty dbSwing ..............................................................................................318
Samodzielne konfigurowanie poczenia .................................................................323
Master/Detail.............................................................................................................325
Database Pilot ...........................................................................................................329
JDataStore. W kierunku baz danych typu klient-serwer .................................................330
JDataStore Explorer ..................................................................................................330
Tworzenie moduu danych........................................................................................335
Aplikacje korzystajce z bazy danych JDataStore....................................................337
Zdalne bazy danych i JDataStore Server ..................................................................346

Dodatek A Kompilacja i archiwizowanie narzdziami JDK bez JBuildera............. 351


Kompilacja ......................................................................................................................351
Tworzenie archiww JAR...............................................................................................353

Dodatek B Co zabawnego mona zrobi z obrazem? ......................................... 355


Konwersja na tablic pikseli i jej modyfikowanie na przykadzie negatywu .................355
Konwersja obrazu na tablic pikseli opisywanych typem int...................................356
Skadowe A, R, G i B kadego piksela. Operacje na bitach. Negatyw ....................357
Konwersja tablicy pikseli do obiektu typu Image.....................................................360
Implementacja w JPictureView.......................................................................................360
Troch zabawy: konwersja obrazu do ASCII Art. ..........................................................362

Skorowidz ..................................................................................... 365

Rozdzia 6.

Komponenty JavaBean
od rodka
Wykorzystamy teraz wiedz i praktyczne umiejtnoci na temat Javy i JBuildera zdobyte w poprzednich rozdziaach do stworzenia komponentu JavaBean1. Ziarenko, ktre
przygotujemy, bdzie cyklicznie zmieniao kolory, czyli mwic prociej bdzie
migajcym przyciskiem. Tak zreszt nazwiemy nasz komponent 
 .
Niestety, bdziemy musieli w duym stopniu przygotowa ten komponent rcznie.
O ile w wersji komercyjnej JBuilder zawiera narzdzia    i  ,
ktre wydatnie wspomagaj tworzenie ziarenek JavaBean, to w wersji darmowej
JBuildera dziaaj one tylko przez 30 dni od instalacji. Mimo to, take w JBuilder
Foundation, istnieje moliwo wzgldnie szybkiego przygotowania komponentu
JavaBean, o czym postaram si Czytelnika przekona w wiczeniach z tego rozdziau.
W pierwszej czci rozdziau przedstawi podstawowe informacje o projektowaniu
komponentw w JBuilder Foundation, w tym o definiowaniu ich nowych waciwoci
i zdarze. Nastpnie omwi procedur instalacji komponentw w JBuilderze, a na
kocu sposb przygotowania klasy typu .
Najwaciwsz form dystrybucji komponentu jest archiwum JAR. Jak je tworzy,
dowiemy si w rozdziale 7.

Tworzenie komponentw JavaBean


Zaprojektujemy klas 
 , ktra bdzie prostym przykadem komponentu JavaBean. 
 zbudujemy na bazie komponentu  
z biblioteki AWT. Jego dziaanie nie bdzie skomplikowane bdzie to po prostu
1

Bean w jzyku angielskim oznacza ziarno, ziarenko. W kofeinowej poetyce Javy chodzi najpewniej
o ziarenko kawy.

232

JBuilder X. Efektywne programowanie w Javie

przycisk, w ktrym cyklicznie zamieniane s kolory ta i napisu. Klas  rozszerzymy o nowe waciwoci   , 
 oraz 
 umoliwiajce
kontrol migania przycisku.

Klasa MigajacyPrzycisk
i rodowisko do jej testowania
Podczas projektowania komponentu wygodnie jest mie aplet, w ktrym moemy go
od razu testowa. Dlatego zaczniemy od zdefiniowania dwch klas, klasy komponentu

 oraz klasy apletu 
 .

wiczenie 6.1.
Aby stworzy klas o nazwie 
 rozszerzajc klas  :
1. Z menu File wybieramy pozycj New Class.
2. W kreatorze klasy (rysunek 6.1) podajemy:
a) nazw pakietu (pole Package)  !
b) 
"#  #$#Class name%#
 oraz
c) klas bazow (Base class)  .
Rysunek 6.1.
Rozszerzanie klasy
java.awt.Button

3. W kreatorze klasy zaznaczamy:


a) opcj Override superclass constructor, oznaczajc, e w wygenerowanym przez

JBuildera kodzie nadpisane zostan wszystkie konstruktory klasy bazowej,


oraz
b) opcj Public, poniewa klasa komponentu JavaBean musi by oczywicie

publiczna.
4. Naciskamy OK.

Rozdzia 6. Komponenty JavaBean od rodka

233

Po zamkniciu kreatora uzyskujemy nastpujcy kod zaprezentowany na listingu 6.1.


Ze wzgldu na opcj zaznaczon w punkcie 3a wiczenia w klasie zadeklarowane
zostay dwa konstruktory obecne rwnie w klasie bazowej: konstruktor domylny
oraz konstruktor przyjmujcy jako argument tre etykiety na przycisku.
Listing 6.1. Stworzona przez kreator klasa MigajacyPrzycisk (pomijam komentarz nagwkowy)



    

    




 
 !
 
"


 !
#$  

"
%


 !
#&
  $  

"
#  $
%
%

wiczenie 6.2.
Aby stworzy aplet 
 , ktry bdzie suy do testowania klasy

 :
1. Uruchamiamy kreator apletu, a wic z menu File wybieramy pozycj New,

w otwartym oknie Object Gallery przechodzimy na zakadk Web i klikamy


ikon Applet. Naciskamy OK.
2. W kreatorze apletu (rysunek 6.2) wpisujemy:
a) w polu Class name nazw klasy apletu 
 ,
b) w polu Package nazw pakietu  ,
c) w polu Base class klas bazow &.
3. Zaznaczamy opcj Generate standard methods, aby JBuilder w kodzie apletu
umieci metody standardowe  ,  i '  .
4. W ostatnim kroku kreatora zaznaczamy opcj tworzenia konfiguracji

uruchamiania.
5. W komercyjnych wersjach JBuildera zmieniamy domyln konfiguracj

uruchamiania na MigajacyPrzyciskDemo (zobacz wiczenie 1.18).


Efektem wykonania tego wiczenia jest dodanie do pakietu  klasy apletu

 , ktra posuy nam jako rodowisko testowania komponentu.
Poniewa klasa 
 naley do tego samego pakietu, bdzie widoczna
z apletu bez potrzeby importowania.

234

JBuilder X. Efektywne programowanie w Javie

Rysunek 6.2.
Kreator apletu

wiczenie 6.3
Aby w aplecie 
  zdefiniowa dwa obiekty typu 
 :
1. Dodajemy w obrbie klasy apletu dwie linie wyrnione na poniszym listingu.
Listing 6.2. W klasie apletu deklarujemy dwa obiekty typu MigajacyPrzycisk

 
 !
'  ( 
"

  
&  )* 

 
 

 
 
++' !!,-.  

Do stworzenia pierwszego obiektu wykorzystalimy domylny konstruktor, a drugiego


konstruktor pozwalajcy ustali etykiet przycisku.

wiczenie 6.4.
Aby zdefiniowane w poprzednim wiczeniu przyciski umieci na powierzchni apletu:
1. Umieszczamy w metodzie ( apletu wywoanie metody  '' dla

kadego z przyciskw:


/
#$ 

"
  
  
%

2. Naciskamy klawisz Ctrl+F9, aby skompilowa klas 



i aplet 
 .

Rozdzia 6. Komponenty JavaBean od rodka

235

3. Naciskamy klawisz F12, aby przenie si na zakadk Design i obejrze

podgld apletu z przyciskami.


Z punktu widzenia Javy nie ma znaczenia, czy polecenia z punktu pierwszego umiecimy w metodzie , czy w wywoywanej z niej ( po uruchomieniu apletu
wynik bdzie identyczny. Naley jednak pamita, e do przygotowania podgldu na
zakadce Desing JBuilder analizuje tylko t drug metod.
Warunkiem uzyskania prawidowego podgldu apletu z umieszczonymi na nim przyciskami jest kompilacja komponentu do postaci pliku MigajacyPrzycisk.class (drugi
punkt). Jeeli JBuilder nie znajdzie takiego pliku, zamiast przyciskw zobaczymy par
tzw. czerwonych komponentw (ang. red components). Czerwone komponenty pojawiaj si w widoku projektowania wwczas, gdy JBuilder ma problemy z utworzeniem obiektw waciwych komponentw. Najczciej powodem jest po prostu braku
plikw skompilowanych klas.

wiczenie 6.5.
Aby korzystajc z moliwoci projektowania RAD zmieni rozmiar i pooenie
przyciskw na powierzchni apletu:
1. Pozostajemy w widoku projektowania (zakadka Design).
2. W oknie struktury zaznaczamy obiekt apletu ( ).
3. Za pomoc inspektora zmieniamy waciwo  apletu na .

W ten sposb wyczamy menedera pooenia komponentw, co umoliwia


ustalenie dowolnego rozmiaru i pooenia komponentw.
4. Korzystajc z metod projektowania RAD, powikszamy przyciski na tyle,

eby widoczny by napis na jednym z nich.


5. Zaznaczamy przycisk ) na podgldzie apletu (nazw zaznaczonego

przycisku mona sprawdzi w oknie struktury jest tam rwnie


zaznaczony).
6. Nastpnie za pomoc inspektora edytujemy jego waciwo (

odpowiadajc za tre etykiety. Niech napis na przycisku brzmi JBuilder.


Obiekty przyciskw ) i * zachowuj si identycznie jak komponenty . Tak
jak w przypadku innych komponentw wizualnych moemy za pomoc myszy dowolnie
zmieni ich pooenie i rozmiar, a take modyfikowa inne ich waciwoci korzystajc
z inspektora.

wiczenie 6.6.
Aby upewni si, czy komponenty umieszczone na aplecie nie s zwykymi przyciskami
typu , dodajmy na chwil do konstruktorw klasy 
 polecenia
zmiany koloru ta:

236

JBuilder X. Efektywne programowanie w Javie


1. W edytorze przeczamy zakadk plikw na 
 .
2. Importujemy klas + dodajc polecenie na pocztku pliku apletu przed
klas  #+ ,
3. Uzupeniamy klas o umieszczone w konstruktorach polecenia zmiany ta

przyciskw (wyrnione fragmenty):




 !
#$  

"
 ! 
" #


%


 !
#&
  $  

"
#  $
 ! 
" #

%

No i prosz. Ta przyciskw na podgldzie apletu 


  lub po uruchomieniu go w AppletTestbed (F9) zmieniy si. Moemy by wic pewni, e na powierzchni apletu rzeczywicie znajduj si dwa komponenty klasy 

(rysunek 6.3).
Rysunek 6.3.
Aplet z dwoma
komponentami
MigajacyPrzycisk,
na razie jeszcze
niemigajcymi,
uruchomiony
w przegldarce
apletw JBuildera
AppletTestbed

wiczenie 6.7.
Aby sprawdzi, czy aplet dziaa w przegldarce z wyczonym pluginem Java 2:
1. Uruchamiamy zewntrzn przegldark. Jeeli to moliwe wyczamy

plugin Java 2.
2. Wczytujemy stworzony przez JBuildera plik MigajacyPrzycisk.html,

ktry znajduje si w podkatalogu classes projektu.


3. Po upewnieniu si, e aplet dziaa, wracamy do JBuildera i usuwamy

polecenia zmiany koloru ta z konstruktorw.

Rozdzia 6. Komponenty JavaBean od rodka

237

Jak ju wiemy, aby aplet uruchomi si w przegldarce korzystajcej z wirtualnej


maszyny zgodnej z pierwsz specyfikacj Javy, konieczne jest, eby podczas jego
dziaania nie bya wywoywana adna metoda, ktra obecna jest dopiero w Java 2.
W szczeglnoci dotyczy to caego pakietu Swing2.
Aplet, ktry stworzylimy, jest w peni zgodny z wirtualn maszyn w wersji 1.1 bez
wzgldu na to, czy jest to VJM z JDK 1.1, czy wirtualna maszyna Javy doczana do
Internet Explorera przez Microsoft. Inaczej wyglda sprawa klasy komponentu 

 . Prosz zwrci uwag, e zdefiniowane przez kreator konstruktory
zawieraj deklaracje moliwoci zgoszenia wyjtku -'  (zobacz listing 6.1), ktry, moemy si o tym przekona w dokumentacji JDK, jest dostpny
dopiero od wersji 1.4. Naley si zatem spodziewa, e ewentualne wystpienie tego
wyjtku spowoduje cakowite zatrzymanie dziaania apletu w przegldarce niekorzystajcej z wirtualnej maszyny Java 2. O to moemy si jednak nie obawia, poniewa
zgoszenie tego wyjtku wymaga sytuacji do egzotycznej. Wyjtek ten jest zgaszany,
gdy kod konstruktora odwouje si do klawiatury, monitora lub myszy w rodowisku,
w ktrym takie urzdzenia nie istniej.
Podczas instalacji JDK doczonego do JBuildera nie jest instalowany plugin Java
2 do przegldarek. Jeeli zainstalowalimy niezalenie JDK, moliwe jest, e przegldarki maj taki plugin jednak zainstalowany. Do celw testowania apletw
i komponentw niekorzystajcych z Java 2, jak 
 , dobrze jest go
dezaktywowa. W Windows mona to zrobi w Panelu sterowania, ikona Java Plugin. Aby upewni si, ktra wersja wirtualnej maszyny Javy jest uruchamiana przez
przegldark, mona wykorzysta stworzony specjalne do takich celw aplet 
(zobacz rozdzia 3.).

Wykorzystanie interfejsu Runnable


Do pilnowania, aby przycisk cyklicznie w rwnych odstpach czasu zmienia kolory,
najlepiej wykorzysta osobny wtek. Wtek bdzie odpowiedzialny nie tylko za odmierzanie czasu, ale rwnie za sam zamian kolorw. W tym celu moemy ponownie
zastosowa rozwizanie uyte w aplecie 

.+
 lub dla odmiany wykorzysta
interfejs /(, nadajcy korzystajcej z niego klasie niektre waciwoci klasy
wtku 0 '.
Szczerze mwic niezbyt lubi interfejs /(. Wol sam tworzy klas wtku
i definiowa w niej metod  tak, jak robilimy to w przypadku 

. Jednak poniewa wszystkiego warto si nauczy, wbrew moim upodobaniom tym razem skorzystajmy
z pomocy tego interfejsu.

wiczenie 6.8.
Aby doda do klasy 
 interfejs /(:

Zobacz uwagi na ten temat w rozdziale 3.

238

JBuilder X. Efektywne programowanie w Javie


1. W edytorze przeczamy zakadk plikw (nad kodem) na 
 .
2. Z menu Wizards wybieramy Implement Interface. Zobaczymy kreator

o nazwie Implement Interface Wizard (rysunek 6.4).


Rysunek 6.4.
Kreator dodawania
interfejsu do klasy

3. W rozwijanej licie Class znajduje si lista klas z biecego pliku, z ktrej

naley wybra t klas, do ktrej chcemy doda interfejs. W naszym pliku


zdefiniowana jest wycznie klasa 
 .
4. Kolejna rozwijana lista o nazwie Interface pozwala na wybranie interfejsu,

ktry chcemy zaimplementowa w klasie.


5. Jeeli nie znajdziemy go pord elementw listy, moemy go odszuka

naciskajc przycisk z trzema kropkami. Pojawi si okno Search for Interface


Class z drzewem interfejsu. Wybieramy ga , a na niej zaznaczamy
interfejs /(. Zamykamy okno dialogowe naciskajc OK.
6. Dodajemy interfejs do klasy naciskajc OK w oknie kreatora.

Kreator wprowadzi do definicji klasy dwie modyfikacje (listing 6.3). W sygnaturze


klasy dodane zostao sowo kluczowe  z nazw interfejsu, a do definicji
klasy dodana zostaa metoda  (na razie jedynie zgaszajca wyjtek domagajcy
si jej implementacji). Metoda  zadeklarowana jest w interfejsie /( i musi
by wobec tego zdefiniowana w korzystajcej z tego interfejsu klasie. Wykorzystanie
interfejsu /( w klasie 
 oznacza, e jej metoda  moe by
wykonywana w osobnym wtku. Ale nie stanie si to samo naley ten wtek wasnorcznie uruchomi3. I to uruchomi w taki sposb, eby wiedzia, e jego zadaniem
jest uruchomienie metody  z klasy migajcego przycisku.
3

Czst pomyk jest przekonanie, e zdefiniowanie metody  w klasie korzystajcej z interfejsu


0   oznacza, e zostanie ona automatycznie uruchomiona w osobnym wtku. Niestety nie.
Drug rwnie czst pomyk jest pomys, e jawne wywoanie metody  spowoduje jej
wykonywanie w osobnym wtku. Tak rwnie nie jest.

Rozdzia 6. Komponenty JavaBean od rodka

239

Listing 6.3. Klasa MigajacyPrzycisk po dodaniu przez kreator interfejsu Runnable



 
 !
   $"%
"


 !
#$  

"
%


 !
#&
  $  

"
#  $
%
"%& 
"
'
())* + &$"% )(

&, "
 -
./ 
"
 
0
%

wiczenie 6.9.
Aby zdefiniowa metod   , ktrej zadaniem bdzie uruchamianie wtku
zwizanego z klas 
 :
1. Definiujemy jako pole klasy prywatn referencj do klasy 0 ' o nazwie
 (listing 6.4).
2. Definiujemy prywatn metod   bez argumentw i bez zwracanej
wartoci. Wewntrz tej metody tworzymy obiekt klasy 0 ' korzystajc
z konstruktora, ktry jako argument pobiera klas z interfejsem /(.

W naszym przypadku tym argumentem powinna by bieca klasa komponentu


uywamy zatem referencji  . Zwracany przez operator  adres
zapisujemy do zmiennej  .
3. Dodajemy wywoanie metody   do obu konstruktorw komponentu.
4. Usuwamy tymczasow zawarto metody  (dwie linie midzy nawiasami

klamrowymi) i umieszczamy tam polecenie zmiany koloru ta przycisku


np. na niebieski. Pozwoli nam to upewni si, czy wtek rozpocz niezalen
prac wykonujc metod  naszego przycisku.
5. Po kompilacji i uruchomieniu apletu (klawisz F9) powinnimy zobaczy
na powierzchni apletu 
  dwa niebieskie przyciski.
Listing 6.4. Do automatycznego uruchomienia wtku po stworzeniu obiektu klasy MigajacyPrzycisk
korzystamy z pomocniczej prywatnej metody uruchomWatek

 
 !
  
  0  
"

&1
  "


 !
#$  

"

240

JBuilder X. Efektywne programowanie w Javie


"
"2 
%


 !
#&
  $  

"
#  $
"
"2 
%

&& "
"2 
'
 1
  
  

0


 #$
"
  ! 
" #
%"
%
%

Przypomnijmy podstawowe informacje na temat klasy 0 '. Obiekt tej klasy reprezentuje osobny niezaleny wtek apletu lub aplikacji. Czynnoci wykonywane przez
ten wtek okrelamy definiujc metod  klasy wtku. W typowym przypadku, ktry
poznalimy w aplecie 

.+
 , metod  zdefiniowalimy rozszerzajc klas
0 ' nadpisujc nic nierobic metod zdefiniowan w klasie bazowej. Teraz metod
 mamy zdefiniowan w klasie 
 . Prosimy zatem obiekt  o wykonanie wanie tej metody wywoujc konstruktor, w ktrym jako argument podajemy
referencj do obiektu przycisku. Warunkiem jest, e obiekt ten musi korzysta z interfejsu /(.
Zdefiniowana przez nas metoda  na razie zmienia tylko kolor przycisku na niebieski.
Zatem jeeli po uruchomieniu apletu zobaczymy dwa niebieskie przyciski, moemy
by pewni, e oba te obiekty uruchomiy osobne wtki i wykonana zostaa metoda 
na rzecz kadego z nich. Po zakoczeniu wykonywania metody  praca wtku automatycznie koczy si4.

wiczenie 6.10.
Aby zdefiniowa metod  w taki sposb, eby implementowaa miganie przycisku
z ustalonym okresem:
1. Deklarujemy w klasie 
 prywatne pole klasy o nazwie  

(przypominam, e naley j umieci wewntrz klasy, ale poza jej metodami).


Inicjujemy j wartoci 1000. Za jednostk wybieramy milisekund, czyli
tysiczn cz sekundy.

  )1222
4

Wyjtkiem jest sytuacja, w ktrej wtek jest tzw. demonem (zob. informacj na ten temat
w dokumentacji metody 3 ' ).

Rozdzia 6. Komponenty JavaBean od rodka

241

2. Definiujemy metod  w nastpujcy sposb:




 #$
"

#4)  $
"
5  6
)
 7   #$
5  3 )
   #$

 7   # 3 $

   # 6
$
"  # $%
#/ 
$"&  
 # #$$%
%
%

Dziaanie metody  opiera si na ptli , ktra wykonywana jest dopki, dopty
referencja  ma warto rn od . Z tego wynika, e aby zakoczy dziaanie metody  i w ten sposb zakoczy dziaanie wtku, wystarczy zmieni warto
pola  na .
Wewntrz ptli tworzymy dwie zmienne pomocnicze przechowujce obecne kolory
ta i etykiety przycisku. Nastpnie zamieniamy kolory przycisku miejscami i usypiamy
wtek na czas okrelony przez   . Suca do tego metoda 0 ' , ktr
poznalimy ju wczeniej, wymaga obsugi wyjtku  ' std
odpowiednia konstrukcja  .
Po uruchomieniu apletu lub w podgldzie na zakadce Design powinnimy zobaczy
migajce przyciski, ktre teraz rzeczywicie migaj.

wiczenie 6.11.
Aby po naciniciu przyciskw umieszczonych na aplecie 
 
zmieniy si kolory, w jakich one migaj:
1. Przechodzimy do apletu 
 . Zapewne jest dostpny

na grnej zakadce w oknie edytora. Jeeli nie trzeba w oknie projektu


dwa razy klikn plik MigajacyPrzyciskDemo.java znajdujcy si w pakiecie
 .
2. Przeczamy okno edytora na widok projektowania (zakadka Design).
3. Dwukrotnie klikamy migajcy przycisk ). Powstanie metoda zdarzeniowa
zwizana z domylnym zdarzeniem   ' tego obiektu.
4. Wewntrz tej metody umieszczamy polecenia zmieniajce kolor ta na zielony,

a etykiety na ty:

18
* #(
 $
"
 3

" #

 ! 
" #


%

242

JBuilder X. Efektywne programowanie w Javie


5. Z drugim przyciskiem (*) postpujemy podobnie. W jego przypadku

zmieniamy kolory na pomaraczowy i rowy:



98
* #(
 $
"
 3

" #


 ! 
" #
 
%

6. Kompilujemy i uruchamiamy aplet (klawisz F9).


7. Aby zmieni kolory migajcych przyciskw, naley tylko klikn kady z nich.

W tym wiczeniu nie zmienilimy waciwoci samych komponentw 


 .
Zwizalimy jedynie ze zdarzeniami dwch konkretnych obiektw tego typu metody
zmieniajce kolory tych dwch obiektw.
To wiczenie pokazuje rwnie, e dobrze nam znane metody ustalania koloru ta
i etykiety przycisku nadal dziaaj pozwalajc teraz na wybr kolorw, w jakich miga
przycisk. Ponadto przekonalimy si, e nie zmieni si take sposb obsugi zdarze
w nowym komponencie 
 .

wiczenie 6.12.
Aby do migajcego przycisku doda moliwo opnienia rozpoczcia migania po
utworzeniu obiektu:
1. Wracamy do klasy 
 (zakadka na grze edytora).
2. Deklarujemy kolejne globalne pole o nazwie 
 zainicjowane

wartoci 3000:

   !

):222

3. Uzupeniamy metod  w nastpujcy sposb (naley dopisa tylko

wyrnione dwie linie kodu):




 #$
"

'   0
+

" .//'4 


/ 0

#4)  $
"
5  6
)
 7   #$
5  3 )
   #$

 7   # 3 $

   # 6
$
"  # $%
#/ 
$"&  
 # #$$%
%
%

1. Kompilujemy kod klasy naciskajc Ctrl+F9.

Rozdzia 6. Komponenty JavaBean od rodka

243

Idea jest prosta. Naley upi wtek na czas okrelony przez 
, zanim rozpocznie si ptla zmieniajca kolory. Aby zobaczy efekt tej modyfikacji, mona przeczy edytor w widok projektowania lub uruchomi aplet naciskajc F9.

Waciwoci komponentw
W rozdziale 2. kontrastowalimy zmienne i funkcje z polami i metodami klas. Tylko
te drugie s dostpne w Javie. W jzykach zwizanych z programowaniem RAD istnieje
zazwyczaj jeszcze jeden element klas waciwo. Konstrukcja ta tworzy pewnego
rodzaju pomost midzy metodami a polami klasy. Jej gwnym zadaniem jest przygotowanie klasy komponentu do wsppracy z narzdziami typu inspektor.
Jak przekonalimy si w rozdziale 2. na przykadzie klasy 1 , korzystanie z metod
dostpu typu  jest waciwsze od bezporedniego modyfikowania pl obiektu.
Moliwa jest w ten sposb kontrola ustalanej wartoci pola, a ponadto korzystanie
z metody pozwala na synchronizacj pozostaych waciwoci obiektu, jeeli te s
w jaki sposb zalene od modyfikowanego pola. Konstrukcja waciwoci klasy
wykorzystuje te korzyci wynikajce z korzystania z metod dostpu podczas projektowania RAD.
Jak wspomniaem przed chwil, do jzykw zwizanych z narzdziami typu RAD
(np. Delphi i C++ Builder) dodawana jest konstrukcja, ktra udostpnia tzw. waciwo
obiektu wic par metod  i  zwizanych z dan waciwoci. W Object
Pascalu naley waciwoci zadeklarowa osobno za pomoc sowa    (do C++
w C++ Builderze Borland doda w tym celu niestandardowe sowo kluczowe 22  ).
Dla programisty uywajcego klasy korzystanie z waciwoci5 niczym nie rni si
od modyfikowania pola. Jednak rnica istnieje i to powana; zmiana wartoci waciwoci powoduje wywoanie metody , a jej odczytanie metody . W Delphi
i C++ Builderze waciwoci obiektw mog by dostpne w Object Inspector, jeeli
zadeklarowane s jako ( ' czyli opublikowane (nowy zakres dostpu).
W Javie sytuacja jest nieco prostsza. Po pierwsze, nie istnieje specjalne sowo kluczowe
pozwalajce na konstruowanie waciwoci. Przez to tworzc rcznie kod rdowy
nadal mamy dostp tylko do metod  i . Po drugie, wszystkie rodowiska
programistyczne RAD Javy, w tym JBuilder, rozpoznaj waciwoci tylko po odpowiednio zdefiniowanej parze metod dostpu  i  i dodaj tak okrelon waciwo do odpowiednikw inspektora. W tej sytuacji z waciwoci moemy korzysta
jedynie podczas projektowania RAD.
W kolejnych wiczeniach zajmiemy si tworzeniem metod dostpu do pl  
i 
, ktre bd rozpoznawane jako okrelajce waciwoci komponentu
i zostan dodane do waciwoci widocznych w inspektorze.

Naley zwrci uwag, e w czystym C++ waciwoci nazywa si zazwyczaj to, co w Javie i Object
Pascalu jest polem. Standard C++ nie zna konstrukcji waciwoci. Jest on dodany np. w C++ Builderze
jako element niestandardowy (dlatego sowo kluczowe   ma tu dwa znaki podkrelenia).

244

JBuilder X. Efektywne programowanie w Javie

Mona stworzy te metody rcznie, ale o wiele szybciej mona je zdefiniowa korzystajc z minimalnego wsparcia, jakie w wersji JBuilder Foundation jest dostpne przy
budowaniu komponentw JavaBean (szcztkowe fragmenty BeansExpress).

wiczenie 6.13.
Aby przygotowa metody pozwalajce na czytanie i modyfikacj waciwoci  
i 
:
1. Zmieniamy zakadk na grze okna edytora na MigajacyPrzycisk.

Jeeli nie jest dostpna, to korzystajc z okna projektu, otwieramy plik


MigajacyPrzycisk.java z pakietu  .
2. Doln zakadk edytora zmieniamy na Bean6, a w niej wybieramy

podzakadk Properties.
3. Zobaczymy tabel z zadeklarowanymi polami klasy:  ,  
i 
 (rysunek 6.5) Kolumny tej tabeli to: nazwa waciwoci (Name),
zadeklarowany typ (Type), moliwo pobrania wartoci przez metod 

(Getter), moliwo zmodyfikowania wartoci przechowywanej przez


waciwo metod  (Setter) oraz sposb zwizania (Binding).
Rysunek 6.5.
Jedyny element
narzdzia
BeansExpress
dostpny w wersji
Foundation

4. Przy waciwociach   i 


 zaznaczamy pozycje w kolumnach
Getter i Setter. W kodzie klasy powstan odpowiednie metody 3  ,
3  , 3
 i 3
. W ten sposb zwyke pole zmieni

si we waciwo.

Zakadka Bean ukrywa wspomniane wczeniej narzdzie BeansExpress. Niestety, w wersji Foundation
jest ono nieaktywne. Jedyny element, ktry jest dostpny, wykorzystujemy w tym wiczeniu.

Rozdzia 6. Komponenty JavaBean od rodka

245

Jeeli zajrzymy do kodu komponentu na zakadce Source, zauwaymy nowe metody


3  , 3  , 3
 i 3
. Ich budowa jest typowa dla metod
dostpu do waciwoci. Definiowalimy bardzo podobne w klasie 1 w rozdziale 2.
Moliwo automatycznego tworzenia metod  i  jest jedynie drobnym fragmentem moliwoci narzdzia o nazwie BeanExpress w peni dostpnego na zakadce
Bean tylko w wersjach komercyjnych JBuildera oraz przez miesic po zainstalowaniu
jego darmowej wersji. Zakadka Properties, ktr teraz wykorzystalimy, jest w wersji
Foundation jedyn, jaka dziaa. Pozostae zakadki po upywie miesica przeczane
s w tryb tylko do odczytu.

wiczenie 6.14.
Aby zobaczy nowe waciwoci:
1. Z menu Project wybieramy polecenie Rebuild Project "helion.jpx".

Nacinicie kombinacji klawiszy Ctrl+F9 odpowiadajcej poleceniu Make Project


"helion.jpx" z tego samego menu nie wystarczy, aby inspektor zobaczy nowe zdarzenia.
Obecno metod Nazwa i Nazwa o odpowiednich sygnaturach jest wystarczajcym sygnaem dla inspektora, eby doda do listy waciwo nazwa. W naszym
przypadku bd to waciwoci   i 
.

wiczenie 6.15.
Aby w aplecie 
  za pomoc inspektora zmieni okres migania
przycisku ) na 500 milisekund:
1. W edytorze przechodzimy do klasy apletu 
 .
2. Zmieniamy zakadk na Design.
3. Zaznaczamy komponent ).
4. W oknie inspektora zobaczymy wszystkie waciwoci komponentu, a midzy
nimi trzy nowe waciwoci   i 
. Zmiemy waciwo  

zaznaczonego komponentu na 500.


Po wykonaniu wiczenia przycisk zacznie miga znacznie szybciej (dwa razy na sekund).

wiczenie 6.16.
Aby do komponentu doda metody kontrolujce uruchamianie i zatrzymywanie wtku,
a w konsekwencji wcza i wycza miganie przycisku:
1. W edytorze przechodzimy do klasy 
 , zakadka Source.
2. Do klasy komponentu dodajemy metod 
:

246

JBuilder X. Efektywne programowanie w Javie






; ! #  

; ! $
"

*#

; ! $
"

*#))  $ ;#$
%
 )  
%

3. Dodajemy rwnie metod 


:

  

; ! #$
"
 #4)  $
%

4. Nie zmieniajc zakadki klasy ani zakadki Source, kompilujemy projekt

(Ctrl+F9).
Po kompilacji w inspektorze pojawi si nowa waciwo o nazwie 
,
a przy niej rozwijana lista zawierajca dwie moliwe wartoci True i False7. Warto
wiedzie, e w przypadku waciwoci logicznych nazwa metody pobierajcej warto
waciwoci moe rozpoczyna si od   zamiast .

wiczenie 6.17.
Aby zatrzyma miganie przycisku w przypadku uruchomienia metody standardowej
 apletu 
  oraz ponowi po wywoaniu metody  :
1. Przechodzimy do edycji klasy 
 , zakadka Source.
2. Podczas tworzenia apletu 
  zaznaczylimy opcj

Generate standard methods, dziki czemu kreator doda do klasy apletu


metody standardowe  ,  i '  8.
3. Do metody  naley doda wywoanie metod 
 kadego
z przyciskw z argumentem  :


 #$
"
1 

; ! #* $
9 

; ! #* $
%

4. Analogicznie w metodzie   wywoujemy te same metody z argumentem


 :
7

Prosz zauway, e w klasie 


 !
 nie mamy zadeklarowanego pola typu logicznego
o nazwie 

; ! . Nie jest ono konieczne. Dla Inspektora licz si tylko metody


; !  i 

; ! , na ich podstawie tworzy waciwo o nazwie


; ! .
Mona je stworzy rwnie samodzielnie definiujc samodzielnie bezargumentowe i niezwracajce
wartoci metody publiczne, np. 

 #$"%. Wicej informacji na ten temat znajduje si
w rozdziaach 1. oraz 3.

Rozdzia 6. Komponenty JavaBean od rodka

247



#$
"
1 

; ! #$
9 

; ! #$
%

Definiowanie dodatkowych zdarze


Czym s zdarzenia?
Najatwiej odpowiedzie na to pytanie podajc przykady zdarze. Zdarzeniem moe
by kliknicie przycisku przez uytkownika, moe by nim rwnie upynicie okrelonego czasu, rozpoczcie lub zakoczenie migania w naszym komponencie. Zdarzeniem
moe by kada sytuacja, ktrej wystpienie mona sprawdzi za pomoc parametrw
dostpnych w programie.
W przypadku naszego komponentu 
 moemy zdefiniowa na przykad
zdarzenie zwizane z rzeczywistym rozpoczciem migania po odczekaniu okresu okrelonego przez 
. Moemy rwnie wywoa zdarzenie, gdy przycisk koczy
miganie oraz przy kadym migniciu. Zdefiniujemy wobec tego trzy typy zdarze.

Jak dziaa mechanizm zdarze w Javie?


Jest to do skomplikowane do wytumaczenia, wic najpierw opisz podobny przykad z ycia. Zamy, e w pewnej uczelni przeprowadzany jest nabr na studia.
Pisemne egzaminy ju si odbyy i kandydaci na studentw czekaj w domach na
informacj o tym, czy dostali si na studia i czy przyznane zostao im miejsce w akademiku. Pierwsza informacja zostanie wysana w chwili ogoszenia wynikw, a druga
po zakoczeniu prac komisji rozdzielajcej miejsca w akademikach. Zatem naszymi
zdarzeniami s moment ogoszenia wynikw i moment zakoczenia prac komisji ds. akademikw. Zdarzenia te zostan opisane w wysanych do studenta oddzielnych listach,
w ktrych przekazana zostanie informacja o jego wynikach i o przyznaniu lub nie
miejsca w akademiku. Sekretariat uczelni musi oczywicie posiada list kandydatw
i tylko do nich wysyana jest taka informacja. eby obraz jeszcze nieco skomplikowa,
przypomn, e student nie dostaje listu do rki. List jest wkadany do jego skrzynki
pocztowej. Gdy student odbierze zawiadomienie z uczelni, w zalenoci od wyniku
uruchamiana jest jedna z jego metod: radoci lub smutku.
Podobnie realizowane s zdarzenia w Javie. Posumy si przykadem naszego komponentu 
 . Zamy, e 
 ma mie moliwo informowania innych obiektw o rozpoczciu i zakoczeniu migania. W odpowiednich momentach
migajcy przycisk powinien rozesa do wszystkich zainteresowanych tym faktem
obiektw informacj o wystpieniu zdarzenia. Informacja ta bdzie oczywicie rwnie
obiektem jak wszystko w Javie musi wic by opisana przez klas (powiedzmy,
e bdzie to zdefiniowana przez nas klasa ; ta sama klasa bdzie wykorzystywana w obu zdarzeniach). cilej rzecz biorc, obiekt zostanie przekazany nie
bezporednio do komponentu, ale do jego skrzynki na listy obiektu towarzyszcego

248

JBuilder X. Efektywne programowanie w Javie

nazywanego nasuchiwaczem i tylko pod warunkiem, e nasuchiwacz wczeniej


zgosi migajcemu przyciskowi, e chce by o zdarzeniu informowany (nasuchiwacz
musi znajdowa si na odpowiedniej licie w migajcym przycisku). Dopiero z nasuchiwacza jest wywoywana metoda obiektu informowanego, ktra jest nazywana
metod zdarzeniow9.
Jeeli w migajcym przycisku zdefiniowane s dwa zdarzenia (rozpoczcie i zakoczenie migania), to nasuchiwacz powinien posiada dwie metody odpowiadajce obu
zdarzeniom. Student posiada tylko jedn skrzynk na listy, ale wie, jaki typ listu otrzyma
na tej samej zasadzie w naszym przykadzie obiekt informowany o zdarzeniu ma
tylko jeden nasuchiwacz, a migajcy przycisk wywouje odpowiedni metod nasuchiwacza w zalenoci od tego, ktre zdarzenie wystpio.
Musimy wobec tego posiada dwie klasy towarzyszce komponentowi 
 .
Pierwsza to interfejs 4  obiekty tego typu to nasuchiwacze, ktre
zdefiniowane w otoczeniu migajcego przycisku odbieraj od migajcego przycisku
informacje o wystpienia zdarzenia. Drug jest klasa-nonik informacji o zdarzeniu
 obiekty tego typu s przekazywane z migajcego przycisku do kadego
zarejestrowanego w migajcym przycisku nasuchiwacza.
Podsumujmy. Aby np. aplet 
  by informowany o zakoczeniu
migania przez 
 , musi mie towarzyszcy mu obiekt-nasuchiwacz
implementujcy interfejs 4  . Nasuchiwacz musi zgosi migajcemu
przyciskowi, e chce by dopisany do listy obiektw informowanych o zakoczeniu
migania (metoda ''&4  migajcego przycisku). Te czynnoci na szczcie
wykonuje ju za nas JBuilder. Wystarczy w inspektorze w zakadce Event dwa razy
klikn odpowiednie zdarzenie. To jest dobrze nam znany element programowania
RAD, ktry zwalnia nas z mylenia o caym mechanizmie zdarze tworzc poczenie
midzy okrelonym zdarzeniem komponentu a metod zdarzeniow apletu. Musimy
tylko postara si o to, eby odpowiednie zdarzenia pojawiy si w inspektorze. I do
tego wanie doprowadz kolejne wiczenia.

Interfejs nasuchiwacza i klasa opisujca zdarzenie


A wic do dziea! Dodajmy do ziarenka zdarzenie wywoywane, gdy przycisk zacznie
migota z uwzgldnieniem opnienia, zdarzenie wywoywane, gdy miganie zostanie
przerwane, oraz zdarzenie wywoane przy kadym migniciu. Zdefiniujemy wasn
klas zdarzenia  przenoszc informacje o zdarzeniu oraz wasny interfejs
nasuchiwacza 4  , ktrego zadaniem jest czekanie na wystpienie zdarzenia. Tak naprawd wasn klas zdarzenia zdefiniujemy bardziej dla pokazania, jak
to si robi, ni z rzeczywistej potrzeby. W poniszych przykadach bez problemu mona
by posuy si te standardow klas zdarze 3(.

Proponuj zajrze do rozdziau 4., gdzie samodzielnie definiowalimy nasuchiwacze w aplecie !! .
To powinno nieco pomc w zrozumieniu mechanizmu zdarze.

Rozdzia 6. Komponenty JavaBean od rodka

249

wiczenie 6.18.
Aby zdefiniowa klas , czyli nonik informacji o zdarzeniu:
1. W menu File JBuildera wybieramy pozycj New Class
2. W kreatorze klasy ustalamy:
a) nazw pakietu:  ,
b) nazw klasy: ,
c) klas bazow: 3(.
3. Zaznaczamy tylko dwie opcje: Public oraz Override superclass constructor.
4. Klikamy OK.

Powstanie skromna klasa, ktr w przyszoci bdzie mona rozbudowa tak, aby
przenosia np. szczegowe informacje o zdarzeniu i stanie komponentu w trakcie jego
wystpienia. Na razie jedyn wan przekazywan przez t klas informacj jest waciwo   zdefiniowana w 3(, ktra identyfikuje obiekt, w ktrym wystpio
zdarzenie. Waciwo ta jest ustalana w momencie tworzenia obiektu zdarzenia; podajemy j w argumencie jedynego konstruktora.

wiczenie 6.19.
Aby zdefiniowa interfejs nasuchiwacza 4  :
1. Wybieramy pozycj New z menu File.
2. W galerii obiektw na stronie General zaznaczamy ikon Interface i

naciskamy OK.
3. W kreatorze interfejsu wpisujemy:
a) nazw pakietu:  ,
b) nazw interfejsu: 4  ,
c) nazw interfejsu bazowego: 4  .
4. Naciskamy OK.
5. Za pomoc edytora dodajemy do interfejsu nasuchiwacza deklaracje

publicznych metod, ktre bd wywoywane przez migajcy przycisk


w momencie wystpienia zdarzenia10. Metody nie zwracaj adnej wartoci,
a ich argumentem jest obiekt opisujcy zdarzenie . Deklarujemy
trzy metody: /

, 5 
, 
(listing 6.5).

10

Wicej informacji o deklaracji metod w interfejsach znajduje si w rozdziale 2.

250

JBuilder X. Efektywne programowanie w Javie

Listing 6.5. Interfejs MiganieListener




*

<
   <
 
"
"%& $  .&
"%& 5  .&
"%& .&
%

Realizacja wywoywania zdarze w komponencie


Komponent JavaBean musi przechowywa list obiektw bdcych nasuchiwaczami,
ktre maj by powiadamiane o wystpieniu poszczeglnych zdarze. Najprociej zrealizowa tak list za pomoc klasy 6 . Poza tym konieczne s metody dopisujce
nasuchiwacze do listy i usuwajce z niej.

wiczenie 6.20.
Aby do komponentu 
 doda list zarejestrowanych nasuchiwaczy:
1. Przechodzimy w edytorze do klasy komponentu (zakadka MigajacyPrzycisk).

Jeeli jest to konieczne, otwieramy plik MigajacyPrzycisk.java w oknie projektu.


2. Importujemy klas 6 poleceniem umieszczonym na pocztku pliku

MigajacyPrzycisk.java za deklaracj nazwy pakietu, ale przed deklaracj


klasy 
 :

  
= 

3. Nastpnie wewntrz klasy 


 deklarujemy list nasuchiwaczy

dodajc do niej pole:



= 


<
 

Prawd mwic, to dodalimy do klasy komponentu jedynie referencj, a nie obiekt listy.
Rzeczywisty obiekt zostanie stworzony w metodzie, ktr zdefiniujemy w nastpnym
wiczeniu.

wiczenie 6.21.
Aby do klasy komponentu doda metody pozwalajce na zarejestrowanie i wyrejestrowanie nasuchiwacza:
1. Pozostajemy w kodzie klasy 
 .
2. Dodajemy do klasy definicj metody ''4  dodajcej nasuchiwacz

podany w argumencie do listy zdefiniowanej w poprzednim wiczeniu:



 
!


<
 #

<
 
 $
"

*#


<
 ))  $


<
 ) = #9$

Rozdzia 6. Komponenty JavaBean od rodka

251


*#4


<
   
#
 $$



<
    #
 $
%

3. Dodajemy take definicj metody 4  , ktra usuwa

podany w argumencie nasuchiwacz z listy:



 
!
 

<
 #

<
 
 $
"

*#


<
 4)  >>


<
   
#
 $$



<
     #
 $
%

4. Z menu Project wybierz Rebuild Project "helion.jpx". Nacinicie kombinacji

klawiszy Ctrl+F9 nie wystarczy, aby inspektor zobaczy nowe zdarzenia.


Definiujc metody, posuylimy si metodami klasy 6 : '' i 
sucymi odpowiednio do dodania do listy i usunicia z niej elementu podanego jako
argument. Wykorzystalimy take metod 6  sprawdzajc, czy obiekt
podany w argumencie znajduje si na licie.
Metoda ''4  sprawdza najpierw, czy za referencj  4 
kryje si obiekt, czy jest on moe jeszcze niezdefiniowany. Jeeli obiektu nie ma, tzn.
referencja  4  ma warto , tworzymy go nadajc licie wstpny
rozmiar rwny 2. W nastpnej linii sprawdzamy metod 6  , czy na licie
jest ju nasuchiwacz, ktry chcemy doda. Jeeli nie, dodajemy go. Metoda pozwalajca usuwa elementy z listy nasuchiwaczy 4  sprawdza, czy
lista istnieje oraz czy element usuwany znajduje si rzeczywicie na licie. Jeeli oba
warunki s spenione, element jest usuwany metod 6  .
Modyfikator  
' zosta uyty, eby zapobiec sytuacji, w ktrej dwa wtki
rwnoczenie prbuj modyfikowa list nasuchiwaczy. Uycie tego modyfikatora
informuje wirtualn maszyn Javy, e metoda ma by wykonywana tylko przez jeden
wtek w danym czasie. Drugi musi poczeka w kolejce.
Dodanie tych metod do klasy ziarenka jest sygnaem dla inspektora, e powinien pokaza
nowe zdarzenie na zakadce Events. Konieczne jest, co podkreliem w punkcie 4. wiczenia, wywoanie polecenia Rebuild Project "helion.jpx" z menu Project, a nie tylko
polecenia Make Project "helion.jpx" (lub prowadzcego do tego samego nacinicia
kombinacji klawiszy Ctrl+F9). Nazwy zdarze odpowiadaj nazwom metod zdefiniowanych w interfejsie nasuchiwacza. W inspektorze pojawi si wic zdarzenia:
/

, 5 
 i .

wiczenie 6.22.
Aby w aplecie testowym stworzy metod zdarzeniow odpowiadajc zdarzeniu
:
1. Przejdmy w edytorze do apletu 
 .
2. W widoku projektowania (zakadka Design edytora) zaznaczmy migajcy
przycisk ).

252

JBuilder X. Efektywne programowanie w Javie


3. Stwrzmy metod zdarzeniow zwizan ze zdarzeniem 

tak, jak robilimy to wiele razy:


a) zmieniamy w inspektorze zakadk na Events,
b) odnajdujemy zdarzenie ,
c) klikamy dwukrotnie w jego polu edycyjnym.

Do metody ( zostao dodane wywoanie zdefiniowanej przez nas przed chwil
metody rejestrujcej nasuchiwacz w komponencie ):
1 

<
 # 
 !
' 818

(#
$$

Pliku apletu zosta rwnie wzbogacony o deklaracj klasy zewntrznej okrelajcej


nasuchiwacz 
 2)2&' wykorzystujcej zdefiniowany przez nas interfejs 4  . W tej klasie zostay zdefiniowane trzy
metody, ktre zadeklarowalimy jako abstrakcyjne w interfejsie. W tej chwili nietrywialn warto ma tylko metoda , ktra wywouje metod zdarzeniow )2 apletu.

wiczenie 6.23.
Aby doda do metody zdarzeniowej z poprzedniego wiczenia polecenia zmieniajce
kolor ta apletu:
1. Do stworzonej w poprzednim wiczeniu przez JBuildera metody zdarzeniowej

dopisujemy polecenia zaznaczone na listingu 6.6.


Listing 6.6. Metoda zdarzeniowa zmieniajca kolory ta apletu

18




#

 $
"

 
 4"

  ! 
" 3

" 
  3

" ! 
" 
%

W metodzie wykorzystaem informacje o kolorach obiektu ) wykorzystujc referencj


do tego obiektu, ktra zostaa przekazana we waciwoci   w obiekcie zdarzenia .
Obiekt ten przekazany zosta do nasuchiwacza, a z niego do metody zdarzeniowej.
Metoda 7  (z ang. pobierz rdo) tego obiektu zwraca referencj do obiektu
wywoujcego zdarzenie ). My wiemy, e rdo jest klasy 
 , wic
wykonujemy odpowiednie rzutowanie. Dziki znajomoci referencji do ), a przez
to informacji o jej kolorach, moglimy metod zaprogramowa w taki sposb, eby
kolory apletu byy zamienione wzgldem kolorw przycisku.
Do dziaania caego mechanizmu brakuje ju tylko jednego elementu. Musimy w odpowiednich miejscach metody  komponentu wywoa zdarzenia, co znaczy, e musimy
wywoa odpowiednie metody wszystkich nasuchiwaczy (/

, 
5 
 i ) znajdujcych si na licie  4  .

Rozdzia 6. Komponenty JavaBean od rodka

253

wiczenie 6.24.
Aby zdefiniowa metody informujce nasuchiwacze typu 4  o wystpieniu zdarze w migajcym przycisku:
1. Wracamy do klasy komponentu (zakadka MigajacyPrzycisk edytora).
2. Dodajemy do klasy metody z listingu 6.7.
Listing 6.7. Metody informujce nasuchiwacze o wystpieniu zdarzenia
 
 

0 ! !#

 $
"

*#


<
 ))  $ 
* #

)2
?


<
  
!#$
@@$
##

<
 $


<
    (#
$$ 

0 ! !#$
%
 
 

A ! #

 $
"

*#


<
 ))  $ 
* #

)2
?


<
  
!#$
@@$
##

<
 $


<
    (#
$$ 

A ! #$
%
 
 




#

 $
"

*#


<
 ))  $ 
* #

)2
?


<
  
!#$
@@$
##

<
 $


<
    (#
$$ 




#$
%

Pierwsza metoda bdzie wykorzystana do powiadomienia nasuchiwaczy o rozpoczciu


migania, druga o zakoczeniu, a trzecia o kadym migniciu.
W kadej metodzie sprawdzamy najpierw, czy lista  4  jest w ogle
zdefiniowana, czyli czy jest kogo powiadamia. Jeeli lista istnieje, to na rzecz kadego
jej elementu wywoujemy odpowiednio metody /

, 5 

lub  podajc jako argument obiekt typu .
Aby uruchomi cay zdefiniowany w tym paragrafie mechanizm zdarze, naley teraz
umieci wywoanie metod /

, 5 

i  w odpowiednich miejscach komponentu 
 .
Jakie s to miejsca? Wszystkie metody wywoamy z metody  migajcego przycisku.
Metod /

 wywoamy po odczekaniu okresu okrelonego przez
waciwo 
. Metod  wywoamy przy kadej
zmianie koloru ta i napisu w ptli . Natomiast ostatni metod wywoujemy,
jeeli ptla  zostanie przerwana.

wiczenie 6.25.
Aby umieci w klasie komponentu metody :
1. Do metody  dodajemy polecenia zaznaczone na listingu 6.8.

254

JBuilder X. Efektywne programowanie w Javie

Listing 6.8. Dodawanie do metody run wywoywania zdarze




 #$
"
"  #  !

$%
#/ 
$"&  
 # #$$%
$  .& 

#4)  $
"
5  6
)
 7   #$
5  3 )
   #$

 7   # 3 $

   # 6
$
.& 
"  # $%
#/ 
$"&  
 # #$$%
%
5  .& 
%

Teraz moemy skompilowa 


  i zobaczy, e aplet miga razem
z przyciskiem, a wic mechanizm nowych zdarze komponentu dziaa prawidowo.
***
Na tym zakoczymy budowanie komponentu 
 . Uzyskalimy prosty,
ale bardzo elegancki komponent z trzema nowymi waciwociami:   , 

i 
 oraz zdarzeniami pozwalajcymi ledzi jego dziaanie. W dalszej
czci tego rozdziau wiedz na temat ziarenek uzupenimy jeszcze informacjami na
temat ich instalowania w JBuilderze oraz przygotowania do dystrybucji.

You might also like