Aplety

Transkrypt

Aplety
Aplety
Tomasz Borzyszkowski
Podstawy
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
2
</APPLET>
Aplet architektura
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.
3
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.
4
Aplet




szkielet cd
Zobacz: Szkielet.java
Szkielet.html
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().
5
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:
Zobacz: Simple.java
Color getBackground()
Simple.html
Color getForeground()
6
Zobacz: SimpleBanner.java
SimpleBanner.html
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()
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ę.
7
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;
nazwa jest relatywna względem CODEBASE
8
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
9
SimpleBanner2.html
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
10