Aplety
Podstawy
2
Wszystkie aplety są podklasami klasy Applet, dlatego muszą importować java.applet. Muszą także importować java.awt
(AWT = Abstract Window Toolkit), ponieważ aplety działają w oknie i potrzebują wsparcia dla okna.
Aplety kompiluje się podobnie jak programy rozpatrywane dotychczas. Natomiast uruchania się je w inny sposób. Aplet nie tylko wykonuje
tradycyjny kod ale także wyświetla informacje w postaci graficznej. Realizować takie zachowania potrafią przeglądarki internetowe oraz specjalne programy przeznaczone do przeglądania apletów, np.
appletwiever.
Wykonanie apletu nie rozpoczyna się od funkcji main(). Mechanizm uruchamiania apletu jest bardziej skomplikowany i opowiemy o nim
wkrótce. Po kompilacji apleta umieszczamy go na stronie HTMLowej w specjalnym znaczniku <APPLET>, np. tak:
<APPLET code=”MyApplet” width=200 height=60 </APPLET>
3
Aplet
Aplety są programami bazującymi na oknach i jako takie różnią się od programów bazujących na konsoli tekstowej. Podstawowe różnice to:
Aplety obsługują zdarzenia. Aplet potrafi rozpoznać i obsłużyć pewną liczbę sytuacji zachodzących w oknach, np. kliknięcie. Aplet czeka, aż zajdzie rozpoznawalna sytuacja (zdarzenie). AWT, kontrolujące zachowanie okien, informuje aplet o zajściu zdarzenia przez wywołanie tzw. uchwytu zdarzenia, będącego
częścią apleta. Po obsłużeniu zdarzenia aplet oddaje sterowanie do AWT. W sytuacji, gdy aplet musi wykonywać dodatkową, ciągłą
akcję, trzeba utworzyć dodatkowy wątek.
Użytkownik inicjalizuje interakcję z apletem. Odwrotnie niż w
dotychczasowych programach, które pytały o dane, gdy tylko ich potrzebowały. Interakcje użytkownika z apletem są wysyłane do apleta przez AWT jako zdarzenia.
4
Aplet
szkielet
Zwykle programy okienkowe korzystają ze skomplikowanego środowiska. AWT Javy stara się je uprościć jak tylko to możliwe. Większość prostych apletów nadpisuje tylko pewne standardowe metody decydujące o zachowaniu apleta. Część z nich jest
zdefiniowana w klasie Applet (init(), start(), stop() i
destroy()) inne np. paint() są zdefiniowane w klasach AWT (tu Component).
Gdy aplet rozpoczyna swoje działanie, AWT wywołuje metody w następującej kolejności: init(), start() i paint().
Natomiast, gdy aplet kończy działanie AWT wywołuje metody następującej kolejności: stop() i destroy().
Opis metod:
init() jest metodą wywoływaną jako pierwsza podczas
uruchamiania apletu. Jest to miejsce, gdzie należy inicjalizować zmienne. Metoda wywoływana tylko raz.
5
Aplet
szkielet cd
start() jest metodą wywoływaną po init() oraz podczas restartu
apleta. Pierwsze pojawienie się apleta na stronie www wiąże się z wywołaniem init() i start(), powroty do apleta tylko ze
start().
paint() jest metodą wywoływaną zawsze, gdy trzeba odświeżyć
okna apleta. Parametr metody zawiera opis środowiska graficznego, w którym uruchamiamy aplet
stop() jest metodą wywoływaną zawsze, gdy przeglądarka
opuszcza dokument zawierający aplet. Powinna wstrzymywać
wykonanie wszystkich wątków, które nie muszą działać, gdy aplet nie jest widoczny.
destroy() jest metodą wywoływaną, gdy z parametrów środowiska
wynika, że aplet powiniem zostać usunięty z pamięci. Należy
wówczas zwolnić wszystkie zarezerwowane zasoby. Metoda stop() jest zawsze wywoływana przed destroy().
Zobacz: Szkielet.java Szkielet.html
6
Prosty przykład
Aplet do wydrukowania napisu w oknie używa metody:
void drawString(String msg, int x, int y)
gdzie msg jest drukowanym napisem, x i y początkowymi
współrzędnymi tekstu w oknie (lewy górny róg okna, to (0, 0)). Metoda ta nie rozumie znaków nowej linii. Aby uzyskać taki efekt trzeba użyć odpowiednich współrzędnych x i y.
Aplet może ustawiać kolor tła i kolor pierwszego planu używając metod:
void setBackground(Color c) void setForeground(Color c)
Parametr c specyfikuje kolor. Klasa Color definiuje stałe
specyfikujące dostępne kolory. Aplet może także pobierać ustawione kolory tła i pierwszego planu:
Color getBackground() Color getForeground()
Zobacz: Simple.java Simple.html
Metoda repaint()
7
Aplet zapisuje coś do okna tylko wtedy, gdy AWT wywołuje metody
update() lub paint() apleta. Jak natomiast aplet może sam
spowodować uaktualnienie zawartości okna, gdy trzeba ją zmienić? Sytuacja taka ma miejsce, gdy w oknie jakiś napis ma się stale
poruszać (banner). Nie możemy stworzyć pętli wewnątrz metody
paint(), ponieważ sterowanie nie powróciło by wówczas do AWT.
Zachowanie, o którym mowa powyżej, można osiągnąć przez
wywołanie metody repaint() zdefiniowanej w AWT. Jej wywołanie powoduje wywołanie przez zarządcę AWT metody update() apleta, której domyślnym zachowaniem jest wywołanie metody paint().
Metoda repaint() posiada klika wersji polimorficznych, wśród nich:
void repaint()
void repaint(int left, int top, int w, int h)
Pierwsza powoduje odświeżenie całego okna, druga tylko podanego fragmentu. Jeżeli to tylko możliwe, należy stosować drugą wersję.
Zobacz: SimpleBanner.java SimpleBanner.html
8
Znacznik <APPLET>
Składnia:<APPLET [CODEBASE=url] CODE=applet
ALT=alternateText NAME=appletInstName WIDTH=pixels HEIGHT=pixels
ALIGN=alignment
VSPACE=pixels HSPACE=pixels
> [<PARAM NAME=parName_1 VALUE=parValue_1>] ...
[<PARAM NAME=parName_n VALUE=parValue_n>]
[html code displayed in the absence of Java] </APPLET>
Wyjaśnienia:
CODEBASE adres URL katalogu, w którym będziemy szukać
skompilowanego pliku apletu1
CODE nazwa pliku bez rozszerzenia .class zawierająca kod apleta;
9
Znacznik <APPLET>
wyjaśnienia
ALT krótki tekst, który pojawi się jeżeli przegladarka rozumie
znacznik <APPLET> ale nie może uruchomić Javy
NAME nazwa instancji apletu służąca innym apletom do nawiązania z
nim komunikacji; aby otrzymać aplet po nazwie można użyć metody
getApplet() zdefiniowanej przez interfejs AppletContext
ALIGN położenie apleta na stronie (jak <IMG> w HTML)
VSPACE i HSPACE puste miejsce nad i pod apletem oraz z lewej i
prawej strony apleta
PARAM NAME i VALUE parametry przekazywane do apleta przez
nazwę; aplet pobiera je metodą getParameter()
Kod występujący po parametrach jest kodem HTMLowym wyświetlanym przez przeglądarki nie obsługujące znacznika
<APPLET>
Zobacz: ParamDemo.java ParamDemo.html
SimpleBanner2.java
10
Położenie dokumentów
Często zachodzi potrzeba załadowania przez aplet plików z lokacji, z której pobraliśmy dokument HTML startujący aplet. Istnieją dwie
metody pobierania lokacji:
getDocumentBase() pobiera URL dokumentu HTML stratującego
aplet
getCodeBase() pobiera URL katalogu, z którego załadowano kod
apleta Zobacz: Bases.java
Bases.html
Aplet może być wykorzystany do otworzenia w przeglądarce innego dokumentu HTML. Służy do tego metoda showDocument(URL) interfejsu AppletContext. Interfejs ten jest zaprojektowany do przechowywania informacji o kontekście wykonania apletu.
Kontekst bieżącego apletu możemy uzyskać wywołując jego metodę
getAppletContext(). Zobacz: ACDemo.java ACDemo.html