4. Pakiet
java.applet
W. Kasprzak: Programowanie zdarzeniowe
4 - 1
4. Pakiet
java.applet
4.1 Pakiet
java.applet
4.2 Apletowe API
4.1 Pakiet
java.applet
Aplet jest
niesamodzielnym programem
, doł
ą
czanym do innej (ale
specjalizowanej) aplikacji, w rodzaju przegl
ą
darka internetowa (stanowi
ona kontekst dla apletu).
Ka
ż
dy aplet tworzony jest jako
klasa pochodna
od klasy
Applet
.
4. Pakiet
java.applet
W. Kasprzak: Programowanie zdarzeniowe
4 - 2
1) Klasa
java.applet.Applet
Deklaracja
public class Applet extends java.awt.Panel
Implementowane interfejsy:
javax.accessibility.Accessible
(przez
Panel
),
java.awt.image.ImageObserver,
java.awt.MenuContainer i
java.io.Serializable
(przez
Component
).
public interface Accessible
– interfejs wyznacza jedn
ą
metod
ę
:
AccessibleContext
getAccessibleContext()
–
zwraca
obiekt
typu
AccessibleContext
, zwi
ą
zany z zadanym obiektem i zawieraj
ą
cy
informacje o obiekcie i jego mo
ż
liwo
ś
ciach – np. o wykonywanych
akcjach, jego graficznej reprezentacji, selekcji komponentów potomnych,
prezentacji edytowalnego tekstu.
4. Pakiet
java.applet
W. Kasprzak: Programowanie zdarzeniowe
4 - 3
•
Klasa zagnie
ż
d
ż
ona w klasie
Applet
:
protected class Applet.AccessibleApplet extends Panel.AccessibleAWTPanel
Ta klasa implementuje mechanizm informowania o obiekcie apletu (np.
jego stanie i roli) oraz jego mo
ż
liwo
ś
ciach.
•
public interface ImageObserver
– interfejs wyznacza jedn
ą
metod
ę
:
boolean
imageUpdate(Image img, int infoflags, int x, int y, int width, int he);
Ta
metoda
wywoływana
jest
w
celu
obserwacji
post
ę
pu
asynchronicznego ładowania obrazu.
•
public interface MenuContainer
–
bazowy interfejs dla wszystkich
kontenerów zawieraj
ą
cych menu.
•
public interface Serializable
– pusty interfejs, który wskazuje na
mo
ż
liwo
ść
serializacji obiektu. Klasa mo
ż
e (ale nie musi)
implementowa
ć
metody:
4. Pakiet
java.applet
W. Kasprzak: Programowanie zdarzeniowe
4 - 4
private void writeObject(java.io.ObjectOutputStream out) throws IOException
private void readObject(java.io.ObjectInputStream in) throws IOException,
ClassNotFoundException;
Konstruktor klasy
Applet
:
public Applet() throws HeadlessException ;
Wyj
ą
tek zgłaszany jest w sytuacji, gdy aplet wołany jest w
ś
rodowisku
nie
dysponuj
ą
cym
urz
ą
dzeniami
wprowadzania
danych
przez
u
ż
ytkownika.
Obok klasy
Applet
pakiet
java.applet
zawiera te
ż
3 interfejsy
:
public interface AppletContext
– wyznacza metody dla pobrania
informacji o
ś
rodowisku wykonania apletu, czyli o dokumencie HTML,
zawieraj
ą
cym dany aplet, i informacje o innych apletach tego
dokumentu. Wyznacza nast
ę
puj
ą
ce metody:
4. Pakiet
java.applet
W. Kasprzak: Programowanie zdarzeniowe
4 - 5
Applet getApplet(String name)
– pobiera aplet o podanej nazwie znajdujący
się w kontekście danego apletu;
Enumeration getApplets()
– znajduje wszystkie aplety znajdujące się w
kontekście danego apletu;
AudioClip
getAudioClip(URL url)
– tworzy klip dźwiękowy;
Image getImage(URL url)
– tworzy obiekt dla pliku graficznego;
InputStream getStream(String key)
– pobiera strumień wejściowy związany z
zadanym kluczem i występujący w kontekście apletu;
Iterator getStreamKeys()
– pobera klucze dla wszystkich strumieni w
kontekście apletu;
void
setStream(String key, InputStream stream)
– związuje zadany strumień
z zadanym kluczem;
void
showDocument(URL url)
– powoduje zmianę wyświetlanej strony na
stronę o zadanym URL;
void
showDocument(URL url, String target)
– żądanie wyświetlenia zadanej
strony;
void
showStatus(String status)
– wyświetla zadany napis w oknie stanu.
4. Pakiet
java.applet
W. Kasprzak: Programowanie zdarzeniowe
4 - 6
public interface AppletStub
- podczas pierwszego utworzenia apletu
doł
ą
czana jest namiastka ("stub") apletu metod
ą
setStub
– namiastka
po
ś
redniczy pomi
ę
dzy apletem a procesem przegl
ą
darki. Wyznacza
takie metody, jak:
void
appletResize(int width, int height)
– do zmiany rozmiaru okna apletu;
AppletContext
getAppletContext()
– do uzyskania obiektu kontekstu apletu.
URL
getCodeBase()
– do pobrania bazowego adresu URL apletu;
URL
getDocumentBase()
– do pobrania globalnej kartoteki dokumentu;
String getParameter(String name)
– do pobrania wartości nazwanego
parametru.
boolean isActive()
– podaje to, czy aplet jest w stanie aktywnym.
public interface AudioClip
– wyznacza metody dla odtwarzania klipów
d
ź
wi
ę
kowych.
void
loop()
- uruchamia odtwarzanie klipu dźwiękowego w pętli;
void
play()
– uruchamia odtwarzanie klipu dźwiękowego;
void
stop()
– zatrzymuje odtwarzanie klipu dźwiękowego.
4. Pakiet
java.applet
W. Kasprzak: Programowanie zdarzeniowe
4 - 7
2) Charakterystyka
Klasa
Applet
posiada metody wywoływane przez przegl
ą
dark
ę
wtedy,
gdy zachodz
ą
zmiany w stanie apletu
– inicjalizuje si
ę
, rozpoczyna
wykonanie, zatrzymuje, jest usuwany.
Nadpisanie
tych metod pozwala
na odpowiedni
ą
reakcj
ę
apletu na zmian
ę
jego stanu.
Applet
dziedziczy metody do
malowania grafiki i obrazów
oraz
obsługi
zdarze
ń
po klasie
Container
w pakiecie
AWT
(„Abstract Windowing
Toolkit”) – przeznaczonym do tworzenia graficznego interfejsu
u
ż
ytkownika (GUI).
Apletów dotycz
ą
ograniczenia zabezpieczaj
ą
ce
: zwykle nie mog
ą
odczytywa
ć
i zapisywa
ć
plików na komputerze na którym si
ę
wykonuj
ą
, nie mog
ą
ł
ą
czy
ć
si
ę
z innym komputerem za wyj
ą
tkiem
swojego „domowego”.
Znacznik
<APPLET>
j
ę
zyka HTML umo
ż
liwia doł
ą
czenie apletu do
strony html.
4. Pakiet
java.applet
W. Kasprzak: Programowanie zdarzeniowe
4 - 8
3) Bezpo
ś
rednia klasa pochodna
Klasa
JApplet
(w pakiecie
javax.swing
)
public class JApplet extends Applet implements Accessible,
RootPaneContainer
JApplet
umo
ż
liwia u
ż
ycie klas
JFC/Swing
dla apletu.
Obiekt klasy
JApplet
zawiera jeden jedyny komponent klasy
JRootPane
(który posiada
contentPane, glassPane, layeredPane
) a dalsze komponenty
nale
ż
y doł
ą
cza
ć
nie bezpo
ś
rednio do apletu a do jego
contentPane
.
Np. dla obiektu klasy
Applet
piszemy:
applet.add( komponent );
ale dla klasy
JApplet
nale
ż
y doda
ć
komponent w nast
ę
puj
ą
cy sposób:
applet.getContentPane().add( komponent );
Podobne ró
ż
nice wyst
ą
pi
ą
dla innych operacji, jak np. ustawianie
menad
ż
era
układu
("
LayoutManager
")
,
usuwanie
komponentów,
porz
ą
dkowanie - wszystkie te operacje wykonuje si
ę
na obiekcie
składowym
contentPane
a nie na samym obiekcie klasy
JApplet
.
4. Pakiet
java.applet
W. Kasprzak: Programowanie zdarzeniowe
4 - 9
4) Metody klasy
Applet
informuj
ą
ce o stanie apletu
public boolean isActive()
Informuje o tym, czy aplet jest aktywny. Aplet staje si
ę
aktywny tu
ż
przed
wywołaniem jego metody
start
, a przestaje by
ć
aktywny tu
ż
przed
wywołaniem jego metody
stop
.
public String getAppletInfo()
Podaje informacj
ę
o danym aplecie - autora, wersj
ę
, prawa autorskie, itp.
public Locale getLocale()
Podaje obiekt klasy
Locale
dla apletu - reprezentuje on region kulturowy.
Je
ś
li nie ustawiono obiektu
Locale
to zwracany jest domy
ś
lny obiekt.
public final class Locale extends Object implements Cloneable, Serializable
(w pakiecie
java.util
)
Konstruktory klasy:
Locale(String language)
Locale(String language, String country)
Locale(String language, String country, String variant)
4. Pakiet
java.applet
W. Kasprzak: Programowanie zdarzeniowe
4 - 10
Argumenty konstruktorów
Locale
:
language
- to kod j
ę
zyka (kod dwu-literowy według normy ISO-639 -
"małe litery");
country
- to kod kraju (kod 2-literwoy kraju według normy ISO-3166 -
"du
ż
e litery");
variant
- to kod charakteryzuj
ą
cy producenta lub przegl
ą
dark
ę
- np.
"es", "ES", "Traditional_WIN".
public AccessibleContext getAccessibleContext() ;
Metoda
zwraca
obiekt
typu
AccessibleApplet
pełni
ą
cy
rol
ę
AccessibleContext
dla danego apletu.
Szereg metod
Applet
jest dziedziczonych z klas:
java.awt.Panel,
java.awt.Container,
java.awt.Component,
java.lang.Object.
4. Pakiet
java.applet
W. Kasprzak: Programowanie zdarzeniowe
4 - 11
5) Czas
ż
ycia apletu - główne metody
Ładowanie apletu
tworzony jest obiekt klasy apletu (klasa pochodna od
Applet);
aplet sam si
ę
inicjalizuje -
init
;
aplet jest uruchamiany
- start .
Opuszczenie i powrót do strony z apletem
Podczas opuszczania strony przez u
ż
ytkownika jej aplet mo
ż
e si
ę
zatrzyma
ć
–
stop
. Podczas powrotu do strony jej aplet mo
ż
e si
ę
wznowi
ć
–
start
. Podobna sytuacja zachodzi gdy okno strony jest
miniaturyzowane i ponownie przywracane.
Od
ś
wie
ż
anie apletu
Niekiedy przegl
ą
darka umo
ż
liwia od
ś
wie
ż
anie apletu, tzn. jego
zwolnienie (
stop
,
destroy
) i ponowne załadowanie.
Usuwanie apletu
Aplet ma szans
ę
wykonania ko
ń
cowych operacji czyszcz
ą
cych
(
destroy
).
4. Pakiet
java.applet
W. Kasprzak: Programowanie zdarzeniowe
4 - 12
public void init()
Metoda wywoływana przez przegl
ą
dark
ę
w celu poinformowania apletu
o tym,
ż
e został załadowany do pami
ę
ci. Nast
ę
puje to zawsze przed
pierwszym wywołaniem metody
start
. Umo
ż
liwia to własn
ą
inicjalizacj
ę
apletu, np. uruchomienie w
ą
tków.
public void start()
Metoda wywoływana przez przegl
ą
dark
ę
w celu poinformowania apletu
o tym,
ż
e powinien rozpocz
ąć
lub wznowi
ć
swoje wykonywanie, np.
wykonywa
ć
animacj
ę
.
public void stop()
Metoda wywoływana przez przegl
ą
dark
ę
w celu poinformowania apletu
o tym,
ż
e powinien zawiesi
ć
swoje wykonywanie, np. zatrzyma
ć
animacj
ę
.
public void destroy()
Metoda wywoływana przez przegl
ą
dark
ę
w celu poinformowania apletu
o tym,
ż
e b
ę
dzie usuni
ę
ty z pami
ę
ci i powinien usun
ąć
wszelkie zasoby,
z których korzysta, np. usun
ąć
w
ą
tki. Przed t
ą
metod
ą
zawsze b
ę
dzie
wołana metoda
stop
.
4. Pakiet
java.applet
W. Kasprzak: Programowanie zdarzeniowe
4 - 13
Przykład.
Aplet
Simple
wy
ś
wietla napis odpowiedni do swojego stanu.
import java.applet.Applet;
import java.awt.Graphics;
public class Simple extends Applet {
StringBuffer buffer;
// Przechowuje prezentowany tekst
public void init() {
buffer = new StringBuffer();
addItem("initializing... ");
}
public void start() {
addItem("starting... ");
}
public void stop() {
addItem("stopping... ");
}
public void destroy() {
addItem("preparing for unloading...");
}
4. Pakiet
java.applet
W. Kasprzak: Programowanie zdarzeniowe
4 - 14
void addItem(String newWord) {
System.out.println(newWord);
buffer.append(newWord);
repaint();
}
public void paint(Graphics g) {
// Wykreśla prostokąt wokół obszaru ekranu apletu
g.drawRect(0, 0, size().width - 1, size().height - 1);
// Wypisz aktualny napis w obszarze ekranu apletu.
g.drawString(buffer.toString(), 5, 15);
}
}
Aplet wywoływany jest ze strony html, np.:
<applet code="Simple.class" codebase=example-1dot1/ width=500 height=20>
</applet>
Ten aplet pojawia si
ę
z tekstem oddaj
ą
cym stan obiektu klasy
Simple
.
4. Pakiet
java.applet
W. Kasprzak: Programowanie zdarzeniowe
4 - 15
Główne metody apletu
-
init(), start(), stop(), destroy()
Np. Nasza klasa
Simple
:
public class Simple extends Applet {
. . .
public void init() { . . . }
// Inicjalizacja podczas ładowania apletu
public void start() { . . . }
// Uruchamianie wykonania apletu
public void stop() { . . . }
// Zatrzymanie wykonywania apletu
public void destroy() { . . . }
// Czyszczenie podczas usuwanie apletu
. . .
}
Metoda
init
zawiera zwykle to co powinien zawiera
ć
konstruktor.
W aplecie, który wykonuje co
ś
wi
ę
cej ni
ż
tylko reakcje na akcje
u
ż
ytkownika, powinno si
ę
nadpisa
ć
metod
ę
start.
Ta metoda
wykonuje zadanie apletu lub uruchamia jego w
ą
tki. Wtedy tak
ż
e
nale
ż
y nadpisa
ć
metod
ę
stop.
Metoda
destroy
umo
ż
liwia zwolnienie zasobów, których nie
decydujemy si
ę
zwalnia
ć
w metodzie
stop
.
4. Pakiet
java.applet
W. Kasprzak: Programowanie zdarzeniowe
4 - 16
6) Metody dla wykre
ś
lania grafiki i dla obsługi zdarze
ń
Dost
ę
pne s
ą
dwie metody (dziedziczone z klasy
Container
) dla
realizacji wy
ś
wietlania apletu:
public void paint(Graphics g)
public void update(Graphics g)
paint()
– metoda przeznaczona dla definicji sposobu wy
ś
wietlenia
apletu;
update()
– ta metoda wywoływana jest przez
repaint()
(dla cało
ś
ci
lub cz
ęś
ci komponentu) i powoduje wy
ś
wietlenie apletu metod
ą
paint()
; umo
ż
liwia zdefiniowanie w klasie apletu dodatkowych
czynno
ś
ci, które nale
ż
y wykona
ć
podczas od
ś
wie
ż
ania wygl
ą
du
apletu.
Graphics
reprezentuje obszar graficzny danego komponentu.
Np. w klasie
Simple
nadpisano metod
ę
paint
:
class Simple extends Applet {
. . .
4. Pakiet
java.applet
W. Kasprzak: Programowanie zdarzeniowe
4 - 17
public void paint(Graphics g) { . . . }
. . .
}
Klasa
Component
posiada szereg metod obsługi zdarze
ń
, np.
action
,
mouseDown
; a tak
ż
e jedn
ą
metod
ę
dla wszystkich zdarze
ń
handleEvent
.
Np. Uzupełnimy klas
ę
Simple
o obsług
ę
zdarzenia klikni
ę
cia mysz
ą
.
import java.awt.Event;
. . .
public boolean mouseDown(Event event, int x, int y) {
addItem("click!... ");
return true;
}
Teraz gdy klikniemy w polu apletu wy
ś
wietli si
ę
napis "click!...".
4. Pakiet
java.applet
W. Kasprzak: Programowanie zdarzeniowe
4 - 18
Inne metody obsługi zdarze
ń
dziedziczone przez
Applet
po
Component
:
keyDown, keyUp,
mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp,
processComponentEvent, processFocusEvent, processHierarchyBoundsEvent,
processHierarchyEvent,
processInputMethodEvent,
processKeyEvent,
processMouseEvent, processMouseMotionEvent, processMouseWheelEvent.
4. Pakiet
java.applet
W. Kasprzak: Programowanie zdarzeniowe
4 - 19
7) Metody słu
żą
ce doł
ą
czaniu komponentów GUI (w AWT)
Prosty kod metody
paint
w klasie
Simple
nie obsługuje przepełnienia
ekranu, tzn. nie zapewnia przesuwu wy
ś
wietlania ("scrolling").
Np. po przepełnieniu dalszy tekst nie jest widoczny:
Mo
ż
na zastosowa
ć
klasy komponentów interfejsu u
ż
ytkownika -
przeznaczone dla projektowania interfejsu u
ż
ytkownika programu (UI),
np. z pakietów
AWT
lub
Swing
.
Klasa
Applet
dziedziczy z klasy
Container
, czyli mo
ż
na dodawa
ć
komponenty i korzysta
ć
z menad
ż
era układu dla operowania
pozycjami komponentów na ekranie.
4. Pakiet
java.applet
W. Kasprzak: Programowanie zdarzeniowe
4 - 20
Pakiet AWT
zawiera nast
ę
puj
ą
ce komponenty dla GUI:
•
kontenery (klasy
java.awt.
Panel
, java.awt.
Window
i ich pochodne).
•
przycisk (klasa
java.awt.Button
)
•
okienko wyboru (klasa
java.awt.Checkbox
) i grupa wykluczaj
ą
cych si
ę
okien wyboru (
java.awt.CheckboxGroup
)
•
pole tekstowe 1-wierszowe (klasa
java.awt.TextField
)
•
obszar edycyjny (klasa
java.awt.TextArea
)
•
etykieta (klasa
java.awt.Label
)
•
lista wyborów (klasa
java.awt.List
)
•
rozwijana lista wyborów (klasa
java.awt.Choice
)
•
pasek przewijania (klasa
java.awt.Scrollbar)
•
obszar wykre
ś
lania (klasa
java.awt.Canvas)
•
menu (klasy
java.awt.Menu, java.awt.MenuBar, java.awt.MenuItem,
java.awt.CheckboxMenuItem)
4. Pakiet
java.applet
W. Kasprzak: Programowanie zdarzeniowe
4 - 21
Niektóre metody klasy
Container
,
z których mo
ż
e korzysta
ć
aplet:
add
- dodaj podany komponent,
remove
- usu
ń
podany komponent,
setLayout
- ustaw menad
ż
era układu
.
public void resize(int width, int height)
Powoduje zmian
ę
rozmiaru ekranu dla apletu na nowy (szeroko
ść
i
wysoko
ść
podane jako argumenty wywołania).
public void resize(Dimension d)
Powoduje zmian
ę
rozmiaru ekranu dla apletu na nowy (szeroko
ść
i
wysoko
ść
podane s
ą
w obiekcie-argumencie d).
Przykład.
W klasie
Simple
zastosujemy przesuwne, nie edytowalne
pole tekstowe - obiekt klasy
TextField
:
// Importowanie java.awt.Graphics nie jest już potrzebne, gdyż teraz
// aplet nie implementuje metody paint().
import java.awt.TextField;
public class ScrollingSimple extends Applet {
TextField field;
// Zamiast ze StringBuffer korzystamy z TextField
4. Pakiet
java.applet
W. Kasprzak: Programowanie zdarzeniowe
4 - 22
public void init() {
field = new TextField();
// Utwórz obiekt klasy "pole tekstowe"
field.setEditable(false);
// Ustaw pole jako nie-edytowalne
setLayout(new java.awt.GridLayout(1,0));
// Ustaw układ tak, że
// pole jest najszersze z możliwych.
add(field);
// Dodaj pole tekstowe do apletu
validate();
// Opracuje kontener i wyświetli go na ekranie
addItem("initializing... ");
}
// . . .
void addItem(String newWord) {
// Teraz ta metoda dołącza tekst do naszego TextField.
String t = field.getText();
System.out.println(newWord);
field.setText(t + newWord);
repaint();
//Widok pola tekstowego na ekranie zostanie odświeżony.
}
4. Pakiet
java.applet
W. Kasprzak: Programowanie zdarzeniowe
4 - 23
8) Co aplety mog
ą
a czego nie mog
ą
Przegl
ą
darki "z rezerw
ą
" traktuj
ą
aplety ładowane przez sie
ć
.
•
Aplet nie mo
ż
e doł
ą
cza
ć
bibliotek ani definiowa
ć
metod
"rodzimych".
•
Nie mo
ż
e odczytywa
ć
lub zapisywa
ć
plików na maszynie na której
si
ę
wykonuje.
•
Nie mo
ż
e ł
ą
czy
ć
si
ę
z si
ę
z innymi maszynami za wyj
ą
tkiem
własnej, z której pochodzi.
•
Nie mo
ż
e uruchomi
ć
ż
adnego programu na aktualnej maszynie.
•
Nie mo
ż
e odczytywa
ć
pewnych własno
ś
ci systemu.
•
Okna aktywowane przez aplet ró
ż
ni
ą
si
ę
od okien przegl
ą
darki.
Ka
ż
da przegl
ą
darka dysponuje obiektem klasy
SecurityManager
, który
implementuje polityk
ę
zabezpiecze
ń
. Aplet mo
ż
e przechwyci
ć
wyj
ą
tek
SecurityException
zgłaszany przez
SecurityManager
i odpowiednio
zareagowa
ć
.
4. Pakiet
java.applet
W. Kasprzak: Programowanie zdarzeniowe
4 - 24
Jednak aplety posiadaj
ą
te
ż
wbudowane mo
ż
liwo
ś
ci, których nie
maj
ą
aplikacje.
•
Aplet mo
ż
e ł
ą
czy
ć
si
ę
poprzez sie
ć
ze "swoim komputerem".
•
Pracuj
ą
c w ramach przegl
ą
darki aplet mo
ż
e wy
ś
wietla
ć
strony HTML.
•
Aplet mo
ż
e wywoła
ć
publiczne metody innego apletu z tej samej
strony.
•
Aplety ładowane z lokalnego systemu plików (z kartoteki w
CLASSPATH u
ż
ytkownika) nie posiadaj
ą
ogranicze
ń
dotykaj
ą
cych
apletów ładowanych poprzez sie
ć
.
•
Aplet nie musi ko
ń
czy
ć
pracy wraz z opuszczeniem jego strony przez
u
ż
ytkownika.
4. Pakiet
java.applet
W. Kasprzak: Programowanie zdarzeniowe
4 - 25
9) Uruchamianie apletu
Nale
ż
y doł
ą
czy
ć
aplet do dokumentu HTML znacznikiem
<APPLET>
.
Nale
ż
y poda
ć
URL strony HTML przegl
ą
darce Javy lub AppletViewer.
Np.
<APPLET CODE=AppletSubclass.class WIDTH=anInt HEIGHT=anInt>
</APPLET>
Wykonanie instrukcji znacznika przez przegl
ą
dark
ę
:
- rezerwuje dla apletu obszar ekranu o podanym rozmiarze,
- ładuje bajt-kod podanego apletu,
- tworzy obiekt podanej klasy apletu,
- wywołuje metody
init
i
start
dla obiektu apletu.
4. Pakiet
java.applet
W. Kasprzak: Programowanie zdarzeniowe
4 - 26
4.2 Apletowe API
1) Odszukanie i załadowanie plików z danymi
public URL getCodeBase()
Zwraca adres URL apletu - URL kartoteki z której ładuje si
ę
aplet.
public URL getDocumentBase()
Zwraca adres URL z nazw
ą
kartoteki w której znajduje si
ę
dokument
HTML zawieraj
ą
cy dany aplet.Np. je
ś
li aplet zawarty jest w dokumencie:
http://java.sun.com/products/jdk/1.2/index.html
to jego "
document base
" wynosi:
http://java.sun.com/products/jdk/1.2/
Je
ś
li znacznik
<APPLET>
nie zawiera "
code base
" to zarówno
code
base
jak i
document base
odnosz
ą
si
ę
do tej samej kartoteki.
Dane apletu s
ą
zwykle adresowane wzgl
ę
dem jego
code base
.
Dane specyfikowane przez u
ż
ytkownika apletu s
ą
adresowane
relatywnie do
document base
.
4. Pakiet
java.applet
W. Kasprzak: Programowanie zdarzeniowe
4 - 27
Przykład
. Obrazy i d
ź
wi
ę
ki b
ę
d
ą
adresowane relatywnie do bazowego
URL. Nast
ę
puj
ą
ca instrukcja utworzy obiekt klasy
Image
zwi
ą
zany z
plikiem
a.gif
w kartotece
imgDir
:
Image image = getImage(
getCodeBase(), "imgDir/a.gif"
);
public Image getImage(URL url)
Zwraca obiekt klasy
Image
, który mo
ż
e by
ć
wizualizowany na ekranie.
Argument typu URL podaje absolutny adres obrazu. Obraz ładowany
jest dopiero w momencie, gdy ma on by
ć
umieszczony na ekranie.
public Image getImage(URL url, String name)
Zwraca obiekt klasy
Image
, który mo
ż
e by
ć
wizualizowany na ekranie.
Argument typu URL podaje absolutny adres, a drugi argument podaje
dokładne poło
ż
enie obrazu wzgl
ę
dem pierwszego adresu. Obraz
ładowany jest dopiero wtedy, gdy ma on by
ć
umieszczony na ekranie.
4. Pakiet
java.applet
W. Kasprzak: Programowanie zdarzeniowe
4 - 28
2) Wy
ś
wietlanie krótkich napisów o statusie
W przegl
ą
darce istnieje
wiersz statusu
, do którego dost
ę
p ma
przegl
ą
darka i jej aplety. Aplet mo
ż
e wysyła
ć
tam krótkie napisy
informuj
ą
ce o aktualnym stanie przetwarzania.
public void showStatus(String msg)
- wy
ś
wietlenie napisu - argumentu w "oknie statusu" przegl
ą
darki.
Np.
showStatus("MyApplet: Loading image file " + file);
3) Wy
ś
wietlanie dokumentów
Aplet mo
ż
e przekaza
ć
do przegl
ą
darki wezwanie, aby ta wy
ś
wietliła
sformatowany tekst w HTML. Słu
ż
y do tego metoda
showDocument
w
klasie
AppletContext
, wyst
ę
puj
ą
ca w 2 postaciach:
public void showDocument(java.net.URL url)
public void showDocument(java.net.URL url, String targetWindow)
Pierwsza wersja podaje jedynie adres dokumentu przewidzianego do
wy
ś
wietlenia.
4. Pakiet
java.applet
W. Kasprzak: Programowanie zdarzeniowe
4 - 29
Druga wersja podaje tak
ż
e w którym oknie nale
ż
y wy
ś
wietli
ć
dokument.
Drugim argumentem mo
ż
e by
ć
:
"_blank
"
- w nowym, nienazwanym oknie;
"
windowName
"
- w oknie o podanej nazwie, w razie potrzeby utworzy
to okno;
"_self
"
- w oknie i ramce tej samej co aplet;
"_parent
"
- w oknie apletu ale w ramce przodka dla ramki apletu; je
ś
li
ramka apletu nie posiada przodka to efekt jest ten sam co dla
"_self"
.
"_top
"
- w oknie apletu ale w ramce najwy
ż
szego poziomu; je
ś
li jest
nim ramka apletu to efekt jest ten samo co dla
"_self"
.
Przykład.
Pewien aplet
ShowDocument
ilustruje u
ż
ycie metody
showDocument
- w obu wersjach i dla wszystkich opcji. Aplet wy
ś
wietla
okno, w którym podajemy 1 lub 2 argumenty wywołania metody
showDocument
. Aplet wywołuje t
ę
metod
ę
po klikni
ę
ciu przycisku "
Show
document"
lub przyci
ś
ni
ę
ciu "
return
".
4. Pakiet
java.applet
W. Kasprzak: Programowanie zdarzeniowe
4 - 30
...// W naszej klasie pochodnej od Applet utworzymy główne okno
// związane z kontekstem apletu:
urlWindow = new URLWindow(getAppletContext());
. . .
class URLWindow extends Frame {
// Nasza klasa głównego okna
. . .
public URLWindow(AppletContext appletContext) {
// Okno uzyska
// kontekst naszego apletu.
. . .
this.appletContext = appletContext;
. . .
}
4. Pakiet
java.applet
W. Kasprzak: Programowanie zdarzeniowe
4 - 31
. . .
public boolean action(Event event, Object o) {
// Obsługa zdarzenia
. . .
String urlString =
/*napis wprowadzany przez użytkownika */;
URL url = null;
try { url = new URL(urlString);
} catch (MalformedURLException e) {
...// Poinformuj użytkownika i powróć ...
}
if (url != null) {
if (
/* użytkownik nie określa okna */
) {
appletContext.showDocument( url );
} else {
appletContext.showDocument( url,
/* podane okno */
);
}
}
. . .
4. Pakiet
java.applet
W. Kasprzak: Programowanie zdarzeniowe
4 - 32
4) Przesyłanie komunikatów do innych apletów
Aplet mo
ż
e odnale
źć
inne aplety i przesła
ć
do nich komunikat.
Przegl
ą
darki nakładaj
ą
zwykle ograniczenia:
aplety powinny pochodzi
ć
z tego samego serwera,
czasami powinny by
ć
w tej samej kartotece (ten sam "
code base
"),
Java API wymaga, aby aplety wykonywały si
ę
na tej samej stronie -
w tym samym oknie.
Pobranie kontekstu dla apletu
public AppletContext getAppletContext()
Okre
ś
la kontekst dla apletu (m.in. dokument w którym jest zawarty), co
pozwoli apletowi na zapytania do
ś
rodowiska i jego modyfikacj
ę
.
Znalezienie apletu poprzez jego nazw
ę
– metoda
getApplet()
w klasie
AppletContext
. Metoda
getApplet()
przeszukuje wszystkie aplety
znajduj
ą
ce si
ę
na bie
żą
cej stronie i zwraca obiekt klasy
Applet
, je
ś
li
znajdzie aplet o podanej nazwie.
4. Pakiet
java.applet
W. Kasprzak: Programowanie zdarzeniowe
4 - 33
Domy
ś
lnie
aplety
nie posiadaj
ą
nazw. Nazw
ę
nadaje si
ę
apletowi na 2
sposoby:
(1) podajemy atrybut
NAME
na stronie ze znacznikiem apletu
<APPLET>
; np.:
<APPLET CODEBASE=example/ CODE=Sender.class
WIDTH=450
HEIGHT=200
NAME="Nadawca">
. . .
</applet>
(2) Podaj
ą
c parametr
NAME
w znaczniku
<PARAM>
; np.:
<APPLET CODEBASE=example/ CODE=Receiver.class
WIDTH=450
HEIGHT=35>
<PARAM NAME="name" value="Odbiorca">
. . .
</applet>
Uwaga: du
ż
e i małe litery w nazwie apletu zwykle nie s
ą
rozró
ż
niane.
4. Pakiet
java.applet
W. Kasprzak: Programowanie zdarzeniowe
4 - 34
Przykład.
Aplet
Sender
poszukuje apletu
Receiver
. Je
ś
li go znajdzie
przesyła do niego komunikat.
Receiver
reaguje zmieniaj
ą
c swój napis po
prawej stronie na: "
Otrzymano wiadomo
ść
od
sender-name
!".
Poniewa
ż
"
Nadawca
" jest nazw
ą
samego
S
ender
-a
, aplet o tej nazwie
zostanie znaleziony, ale nie otrzyma on komunikatu, gdy
ż
nie jest
obiektem klasy
Receiver
.
Oto fragment apletu
Sender
słu
żą
cy do komunikacji z
Receiver
:
Applet receiver = null;
String receiverName = nameField.getText();
// Podaj nazwę apletu
.
receiver = getAppletContext().getApplet(receiverName);
...
if (receiver != null) {
// Operatorem instanceof sprawdzimy, czy znaleziony obiekt jest
// klasy Receiver.
if (!(receiver instanceof Receiver)) {
status.appendText("Znaleziono aplet o nazwie "
+ receiverName + ", "
+ "ale nie jest on typu Receiver.\n");
4. Pakiet
java.applet
W. Kasprzak: Programowanie zdarzeniowe
4 - 35
} else {
status.appendText("Znaleziono aplet o nazwie "
+ receiverName + ".\n"
+ " Przesyłam mu komunikat. \n");
// Konwersja do obiektu klasy Receiver aby móc wywołać metodę
// tej klasy a nie klasy Applet
((Receiver)receiver).processRequestFrom(myName);
}
} . . .
Uwagi
Aplet mo
ż
e pobra
ć
swoj
ą
własn
ą
nazw
ę
wołaj
ą
c metod
ę
klasy
Aplet
-
getParameter
:
myName = getParameter("NAME");
Je
ś
li obiekt
Receiver
miałby równie
ż
przesyła
ć
zwrotnie komunikaty do
obiektu
Sender
, to
Sender
powinien mu przekaza
ć
referencj
ę
na siebie.
Np.:
((Receiver)receiver).startCommunicating(this);
4. Pakiet
java.applet
W. Kasprzak: Programowanie zdarzeniowe
4 - 36
Znalezienie wszystkich apletów na danej stronie
- metoda
getApplets()
.
Metoda
getApplets
zwraca obiekt klasy
Enumeration
b
ę
d
ą
cy list
ą
wszystkich apletów danej strony.
Przykład.
Aplet
getApplets
listuje wszystkie aplety danej strony. Oto
fragmenty metody wywołuj
ą
cej
getApplets
.
public void printApplets() {
Enumeration e = getAppletContext().getApplets();
. . .
// Obiekt typu Enumeration zawiera wszystkie aplety danej strony
while (e.hasMoreElements()) {
Applet applet = (Applet)e.nextElement();
String info = ((Applet)applet).getAppletInfo();
if (info != null) {
textArea.appendText("- " + info + "\n");
} else {
textArea.appendText("- " + applet.getClass().getName() + "\n");
}
} . . .
}
4. Pakiet
java.applet
W. Kasprzak: Programowanie zdarzeniowe
4 - 37
5) Odtwarzanie d
ź
wi
ę
ków
Klasa
Applet
i interfejs
AudioClip
realizuj
ą
mechanizm pobierania i
odtwarzania plików d
ź
wi
ę
kowych.
Metody klasy
Applet
przeznaczone do pobierania plików d
ź
wi
ę
kowych:
public static final AudioClip newAudioClip(URL url)
Pobiera plik d
ź
wi
ę
kowy o podanym adresie URL.
public AudioClip getAudioClip(URL url)
Zwraca obiekt klasy
AudioClip
dla podanego adresu URL. Argument
typu
URL
podaje absolutny adres pliku. Jest on ładowany ale nie jest
jeszcze odtwarzany.
public AudioClip getAudioClip(URL url, String name)
Zwraca obiekt klasy
AudioClip
. Argument typu URL podaje absolutny
adres, a drugi argument podaje dokładne poło
ż
enie pliku d
ź
wi
ę
kowego
wzgl
ę
dem pierwszego adresu. Plik jest ładowany ale nie jest jeszcze
odtwarzany.
4. Pakiet
java.applet
W. Kasprzak: Programowanie zdarzeniowe
4 - 38
public void play(URL url)
Odtwarza plik d
ź
wi
ę
kowy znajduj
ą
cy si
ę
pod podanym adresem
URL
.
Nie ma
ż
adnego efektu, gdy plik nie istnieje.
public void play(URL url, String name)
Odtwarza plik d
ź
wi
ę
kowy znajduj
ą
cy si
ę
pod adresem zło
ż
onym z
adresu
URL
i wzgl
ę
dnego adresu
name.
Nie ma
ż
adnego efektu, gdy plik
nie istnieje.
Interfejs
AudioClip
wyznacza metody dla odtwarzania d
ź
wi
ę
ku:
loop –
odtwarza obiekt klipu w p
ę
tli,
play -
odtwarza obiekt klipu raz,
stop -
zatrzymuje odtwarzanie klipu
.
Przykład.
Aplet
SoundExample
ilustruje ładowanie i odtwarzanie wielu
plików d
ź
wi
ę
kowych jednocze
ś
nie.
AudioClip onceClip, loopClip;
onceClip = applet.getAudioClip(getCodeBase(), "bark.au");
// Utwórz klip
loopClip = applet.getAudioClip(getCodeBase(), "train.au");
// Utwórz klip
onceClip.play();
// Odtwórz raz
4. Pakiet
java.applet
W. Kasprzak: Programowanie zdarzeniowe
4 - 39
loopClip.loop();
// Wykonuj odtwarzanie w pętli.
loopClip.stop();
// Zatrzymaj odtwarzanie pojedyncze lub w pętli.
P
ę
tla jest zatrzymywana, gdy u
ż
ytkownik opuszcza stron
ę
apletu i
wznawiana, gdy u
ż
ytkownik powraca do strony apletu. Dzieje si
ę
tak
dzi
ę
ki wła
ś
ciwemu zdefiniowaniu metod
stop
i
start
w aplecie:
public void stop() {
// looping jest polem typu boolean - początkowo ustawionym na "false";
// jest ustawiane na "true" gdy użytkownik wybiera przycisk w rodzaju
// "Odtwarzaj w petli" i na "false" gdy przycisk w rodzaju "Zatrzymaj".
if (looping) {
loopClip.stop();
// Zatrzymaj pętlę odtwarzania dźwięków
}
}
public void start() {
if (looping) {
loopClip.loop();
// Restartuj pętlę odtwarzania dźwięków
}
}
4. Pakiet
java.applet
W. Kasprzak: Programowanie zdarzeniowe
4 - 40
6) Parametry apletu
Parametry s
ą
dla apletu tym czym opcje linii komend dla programu.
Decyzje projektowe:
(1) Jakie parametry i z jakimi domy
ś
lnymi warto
ś
ciami powinien
przyjmowa
ć
aplet?
(2) Metoda
getParameter
- aplet pobiera poprzez ni
ą
warto
ś
ci
parametrów zadane przez u
ż
ytkownika.
(3) Metoda
getParameterInfo
- aplet udost
ę
pnia u
ż
ytkownikowi
informacj
ę
o swoich parametrach.
public String getParameter(String name)
Zwraca warto
ść
(lub
null
) podanego parametru w znaczniku HTML. Np.
dla znacznika:
<applet code="Clock" width=50 height=50>
<param name="Color" value="blue">
</applet>
wywołanie
getParameter("Color")
zwróci wynik
"blue"
.
4. Pakiet
java.applet
W. Kasprzak: Programowanie zdarzeniowe
4 - 41
public String[][] getParameterInfo()
Zwraca informacj
ę
o parametrach istotnych dla danego apletu w postaci
tablicy napisów. Ka
ż
dy napis powinien mie
ć
3 cz
ęś
ci: nazw
ę
, typ, opis.
Np.:
String pinfo[][] = {
{"fps", "1-10", "frames per second"},
{"repeat", "boolean", "repeat image loop"},
{"imgs", "url", "images directory"}
};
Jakie parametry ?
Zale
ż
y to od funkcji apletu. Np. parametry charakterystyczne dla
obrazów lub d
ź
wi
ę
ków, poło
ż
enia plików, wygl
ą
du ramki apletu.
Jakie nazwy parametrów?
XXXSOURCE lub XXXSRC - dla plików danych. Np. IMAGESOURCE.
NAME - tylko dla nazwy apletu.
4. Pakiet
java.applet
W. Kasprzak: Programowanie zdarzeniowe
4 - 42
Jakie warto
ś
ci przyjmuj
ą
parametry ?
Wszystkie warto
ś
ci s
ą
napisami (String). Napis jest interpretowany
przez aplet na ró
ż
ne sposoby. Typowe interpretacje napisu to:
URL ,
liczba całkowita ,
liczba zmienno-przecinkowa ,
warto
ść
logiczna - "true"/"false" lub "yes"/"no" ,
napis,
lista powy
ż
szych danych.
Jaka b
ę
dzie warto
ść
domy
ś
lna parametru?
Nawet gdy u
ż
ytkownik nie przeka
ż
e warto
ś
ci parametru aplet powinien
pracowa
ć
poprawnie dzi
ę
ki istnieniu warto
ś
ci domy
ś
lnych.
4. Pakiet
java.applet
W. Kasprzak: Programowanie zdarzeniowe
4 - 43
Przykład.
Nasza klasa nazywa si
ę
AppletButton
. Jej GUI składa si
ę
z przycisku i
etykiety oddaj
ą
cej jej status. W wyniku klikni
ę
cia przycisku aplet
wy
ś
wietla okno na ekranie. Klasa ta mo
ż
e by
ć
wykorzystywana w wielu
dalszych przykładach, gdy
ż
jest bardzo elastyczna. T
ę
elastyczno
ść
zapewniaj
ą
jej parametry. U
ż
ytkownik mo
ż
e okre
ś
li
ć
: typ wy
ś
wietlanego
okna, tytuł okna, wysoko
ść
i szeroko
ść
okna, etykiet
ę
samego przycisku,
Np.
znacznik
<
APPLET
>
dla
AppletButton
mo
ż
e wygl
ą
da
ć
nast
ę
puj
ą
co:
<APPLET CODE=AppletButton.class CODEBASE=example
WIDTH=350 HEIGHT=60>
<PARAM NAME=windowClass VALUE=BorderWindow>
<PARAM NAME=windowTitle VALUE="BorderLayout">
<PARAM NAME=buttonText
VALUE="Click here to see a BorderLayout in action">
</APPLET>
4. Pakiet
java.applet
W. Kasprzak: Programowanie zdarzeniowe
4 - 44
Kod dla interpretacji wyniku metody
getParameter
Nale
ż
y zdefiniowa
ć
kod interpretuj
ą
cy wynik metody zwracaj
ą
cej
warto
ść
parametru podan
ą
przez u
ż
ytkownika.
public String getParameter(String name)
Np.
int requestedWidth = 0;
. . .
String windowWidthString = getParameter("WINDOWWIDTH");
if (windowWidthString != null) {
try {
// Spróbuj dokona
ć
konwersji napisu do liczby całkowitej
.
requestedWidth = Integer.parseInt(windowWidthString);
} catch (NumberFormatException e) {
// Tutaj pobierz domy
ś
ln
ą
warto
ść
parametru.
}
}
4. Pakiet
java.applet
W. Kasprzak: Programowanie zdarzeniowe
4 - 45
Metoda
getParameter
umo
ż
liwia tak
ż
e pobranie warto
ś
ci
atrybutów
dla
znacznika apletu
<APPLET>
.
Przykład
.
W naszej klasie
AppletButton
zdefiniowali
ś
my pobieranie
parametrów apletu.
String windowClass;
String buttonText;
String windowTitle;
int requestedWidth = 0;
int requestedHeight = 0;
. . .
public void init() {
windowClass = getParameter("WINDOWCLASS");
if (windowClass == null) {
windowClass = "TestWindow";
}
buttonText = getParameter("BUTTONTEXT");
if (buttonText == null) {
4. Pakiet
java.applet
W. Kasprzak: Programowanie zdarzeniowe
4 - 46
buttonText = "Click here to bring up a " + windowClass;
}
windowTitle = getParameter("WINDOWTITLE");
if (windowTitle == null) { windowTitle = windowClass; }
String windowWidthString = getParameter("WINDOWWIDTH");
if (windowWidthString != null) {
try { requestedWidth = Integer.parseInt(windowWidthString);
} catch (NumberFormatException e) {
// ... tu ustal domy
ś
ln
ą
warto
ść
dla parametru "szeroko
ść
".
}
}
String windowHeightString = getParameter("WINDOWHEIGHT");
if (windowHeightString != null) {
try { requestedHeight = Integer.parseInt(windowHeightString);
} catch (NumberFormatException e) {
// ... tu ustal domy
ś
ln
ą
warto
ść
dla parametru "wysoko
ść
".
}
}
4. Pakiet
java.applet
W. Kasprzak: Programowanie zdarzeniowe
4 - 47
Przekazywanie informacji o parametrach
Nale
ż
y zdefiniowa
ć
metod
ę
getParameterInfo()
tak, aby przegl
ą
darka
mogła pobra
ć
informacj
ę
o parametrach naszego apletu.
Metoda
getParameterInfo
zwraca tablic
ę
3-elementowych tablic typu
String
.
W ka
ż
dej z tych 3-elementowych tablic 1-szy napis jest nazw
ą
parametru, drugi podaj informacj
ę
o typie warto
ś
ci dla parametru a trzeci
opisuje znaczenie parametru.
Przykład.
Implementacja
getParameterInfo
w klasie
Animator
, w której okre
ś
lono
13 parametrów, umo
ż
liwiaj
ą
cych u
ż
ytkownikowi dostosowanie animacji
do swoich potrzeb.
public String[][] getParameterInfo() {
String[][] info = {
// Nazwa parametru Typ wartości Opis
{"imagesource", "URL", "a directory"},
{"startup", "URL", "displayed at startup"},
4. Pakiet
java.applet
W. Kasprzak: Programowanie zdarzeniowe
4 - 48
{"background", "URL", "displayed as background"},
{"startimage", "int", "start index"},
{"endimage", "int", "end index"},
{"namepattern", "URL", "used to generate indexed names"},
{"pause", "int", "milliseconds"},
{"pauses", "ints", "milliseconds"},
{"repeat", "boolean", "repeat or not"},
{"positions", "coordinates", "path"},
{"soundsource", "URL", "audio directory"},
{"soundtrack", "URL", "background music"},
{"sounds", "URLs", "audio samples"},
};
return info;
}
4. Pakiet
java.applet
W. Kasprzak: Programowanie zdarzeniowe
4 - 49
7) Znacznik
<APPLET>
Znamy ju
ż
najprostsz
ą
posta
ć
znacznika
<APPLET>
:
<APPLET CODE=KlasaPochodnaOdApplet.class WIDTH=liczba1Int
HEIGHT=liczba2Int>
</APPLET>
Parametry - znacznik
<PARAM>
U
ż
ytkownik przekazuje parametry apletu korzystaj
ą
c ze znaczników
<PARAM>
, które nale
ż
y umie
ś
ci
ć
zaraz po znaczniku
<APPLET>
danego apletu.
<APPLET CODE=NazwaApletu.class WIDTH=liczba1Int HEIGHT=liczb2Int>
<PARAM NAME=parametr1Nazwa VALUE=wartość1>
<PARAM NAME=parametr2Nazwa VALUE=wartość2>
</APPLET>
Przykład.
<APPLET CODE="Animator.class" WIDTH=460 HEIGHT=160>
4. Pakiet
java.applet
W. Kasprzak: Programowanie zdarzeniowe
4 - 50
<PARAM NAME="imageSource" VALUE="images/Beans">
<PARAM NAME="backgroundColor" VALUE="0xc0c0c0">
<PARAM NAME="endImage" VALUE=10>
<PARAM NAME="soundSource" VALUE="audio">
<PARAM NAME="soundtrack" VALUE="spacemusic.au">
<PARAM NAME="sounds"
VALUE="1.au|2.au|3.au|4.au|5.au|6.au|7.au|8au|9.au|0.au">
<PARAM NAME="pause" VALUE=200>
</APPLET>
Alternatywny kod HTML i alternatywny tekst
Alternatywnym kodem HTML jest dowolny tekst wyst
ę
puj
ą
cy pomi
ę
dzy
znacznikami
<APPLET>
i
</APPLET>
po znacznikach
<PARAM>
-
przegl
ą
darki Javy, rozpoznaj
ą
ce znacznik
<APPLET>
, ignoruj
ą
alternatywny kod
HTML
– w przeciwnym razie wy
ś
wietl
ą
go.
Mo
ż
na te
ż
przegl
ą
darkom przekaza
ć
alternatywny tekst posługuj
ą
c si
ę
atrybutem
ALT
w znaczniku
<APPLET>
Je
ś
li przegl
ą
darka nie mo
ż
e
wy
ś
wietli
ć
apletu wy
ś
wietli alternatywny tekst apletu.
4. Pakiet
java.applet
W. Kasprzak: Programowanie zdarzeniowe
4 - 51
Przykład
<APPLET CODE="Animator.class" WIDTH=460 HEIGHT=160
ALT=
"Jeśli widać animację to znaczy, że aplet się wykonuje"
>
<PARAM NAME="imageSource" VALUE="images/Beans">
<PARAM NAME="backgroundColor" VALUE="0xc0c0c0">
<PARAM NAME="endImage" VALUE=10>
<PARAM NAME="soundSource" VALUE="audio">
<PARAM NAME="soundtrack" VALUE="spacemusic.au">
<PARAM NAME="sounds"
VALUE="1.au|2.au|3.au|4.au|5.au|6.au|7.au|8au|9.au|0.au">
<PARAM NAME="pause" VALUE=200>
Przeglądarka ignoruje znacznik <APPLET> !
</APPLET>
4. Pakiet
java.applet
W. Kasprzak: Programowanie zdarzeniowe
4 - 52
Specyfikacja katalogu apletu
Domy
ś
lnym poło
ż
eniem apletu jest bie
żą
cy katalog strony HTML z
apletem. Je
ś
li aplet podany jest poprzez pakiet, to poszukuje si
ę
go na
ś
cie
ż
ce pakietu, "wychodz
ą
cej" z bie
żą
cego katalog.
Je
ś
li aplet ma by
ć
w innym miejscu posłu
ż
y
ć
si
ę
nale
ż
y atrybutem
CODEBASE
.
<APPLET CODE=AppletSubclass.class CODEBASE=aURL
WIDTH=anInt HEIGHT=anInt>
</APPLET>
Je
ś
li aURL jest wzgl
ę
dnym URL to "podczepiony" zostanie pod bie
żą
cy
katalog strony HTML. Je
ś
li aURL jest absolutnym URL to mo
ż
e
oznacza
ć
nawet katalog zdalnego komputera w sieci.
4. Pakiet
java.applet
W. Kasprzak: Programowanie zdarzeniowe
4 - 53
Archiwizacja plików apletu
Je
ś
li kod apletu składa si
ę
z wielu plików to opłaca si
ę
je zarchiwizowa
ć
w postaci jednego pliku.
Standardowy format archiwum w Javie to
JAR
(oparty na formacie ZIP).
Pliki typu
JAR
podaje si
ę
w atrybucie
ARCHIVE
znacznika
<APPLET>
.
Mo
ż
na poda
ć
na raz wiele plików archiwizacyjnych po przecinku.
Np.
<APPLET CODE="AppletSubclass.class" ARCHIVE="file1, file2"
WIDTH=anInt HEIGHT=anInt>
</APPLET>
Inne atrybuty znacznika
<APPLET>
ALIGN, VSPACE, HSPACE, NAME