17. Applet
Applet je program v Jav∞, kter² pro sv∙j b∞h vy╛aduje
Java-kompatibilnφ prohlφ╛eΦ. Nespou╣tφ se p°φmo (jako aplikace), n²br╛
otev°enφm HTML dokumentu, kde je na n∞j umφst∞n odkaz pomocφ specißlnφ znaΦky
<APPLET> (viz 17.3.).
Z bezpeΦnostnφch d∙vod∙ platφ pro applet n∞kterß omezenφ a naopak mß applet
n∞kterΘ funkce roz╣φ°eny:
- Applet nem∙╛e nahrßvat knihovny ani definovat nativnφ metody.
- Applet nem∙╛e navazovat sφ╗ovΘ spojenφ na jin² ne╛ domovsk² server.
- Applet nem∙╛e zapisovat do soubor∙ na stran∞ klienta (prohlφ╛eΦe).
- Applet nem∙╛e spou╣t∞t programy na domovskΘm serveru.
- Applet nem∙╛e Φφst n∞kterΘ systΘmovΘ prom∞nnΘ. (1) .
- Applet m∙╛e p°ehrßvat zvuky (viz 17.2.).
- Applet m∙╛e po╛ßdat browser o zobrazenφ libovolnΘ WWW strßnky (viz
17.2.).
- Applet m∙╛e volat ve°ejnΘ metody applet∙ umφst∞n²ch na tΘ╛e WWW
strßnce (viz 17.3.1.).
Uvedenß omezenφ se mohou v budoucnu zmφrnit - po roz╣φ°enφ
autentifikaΦnφch a ╣ifrovacφch mechanism∙, podrobnosti viz [WWW8].
N∞kterΘ prohlφ╛eΦe umo╛≥ujφ uvedenß omezenφ nastavit individußln∞ pro vybranΘ
applety. (2)
17.1. Struktura appletu
Zßkladnφ strukturu appletu tvo°φ t°φda java.applet.Applet, kterß
definuje zßkladnφ metody tvo°φcφ rozhranφ mezi prohlφ╛eΦem a appletem.
Program, kter² mß fungovat jako applet, musφ b²t potomkem tΘto t°φdy.Applet b∞╛φ v grafickΘm kontextu, a jako takov² je ·zce spojen s "okennφ"
knihovnou AWT (viz p°φloha A.). T°φda java.applet.Applet
je potomkem t°φdy java.awt.Panel, kterß umo╛≥uje appletu vlastnit
komponenty u╛ivatelskΘho rozhranφ, provßd∞t grafick² v²stup a zachycovat
udßlosti z klßvesnice a my╣i.
«ivotnφ cyklus appletu zßvisφ na prohlφ╛eΦi, kter² b∞hem svΘ Φinnosti volß
tyto metody appletu:
- public void init() - p°i inicializaci,
- public void start() - p°i spu╣t∞nφ,
- public void paint(java.awt.Graphics g) - p°i p°ekreslovßnφ,
- public void stop() - p°i zastavenφ,
- public void destroy() - p°i ukonΦenφ.
Tyto metody jsou ve t°φd∞ java.applet.Applet
definovßny (3) jako prßzdnΘ a pro smysluplnou Φinnost je
t°eba v potomkovi p°ekr²t alespo≥ jednu z nich. Kostra appletu, kter²
implementuje v╣echny zßkladnφ metody, vypadß takto:
public class NovyApplet extends java.applet.Applet {
public void init() {
// k≤d proveden² p°i inicializaci
}
public void start() {
// k≤d provßd∞n² p°i spu╣tenφ
}
public void stop() {
// k≤d provßd∞n² p°i zastavenφ
}
public void destroy() {
// k≤d provßd∞n² p°i ukonΦenφ
}
public void paint(java.awt.Graphics g) {
// k≤d provßd∞n² p°i p°ekreslovßnφ
}
}
Nßsledujφcφ obrßzek znßzor≥uje volßnφ metod appletu v zßvislosti na stavu
prohlφ╛eΦe: ![cyklus.gif](/file/23392/Chip_2000-10_cd1.bin/chplus/Java/images/cyklus.gif)
Rozdφl mezi zastavenφm a zru╣enφm spoΦφvß v tom, ╛e p°i zru╣enφ
appletu dochßzφ navφc k ukonΦenφ jeho vlßken a odstran∞nφ appletu z pam∞ti.
P°i zastavenφ appletu mohou jeho vlßkna pokraΦovat v Φinnosti.
U n∞kter²ch prohlφ╛eΦ∙ m∙╛e po zastavenφ appletu dochßzet automaticky k jeho
zru╣enφ (po metod∞ stop() se bezprost°edn∞ volß metoda destroy()).
17.2. T°φda java.applet.Applet
Krom∞ ji╛ zmφn∞n²ch t°φda java.applet.Applet obsahuje
metody: (4)
- public boolean isActive() - vracφ true, je-li applet
aktivnφ, tzn. byl-li spu╣t∞n metodou start() a nebyl zastaven metodou
stop().
- public URL getCodeBase() - vracφ URL, na kterΘm se nachßzφ k≤d
appletu.
- public URL getDocumentBase() - vracφ URL dokumentu, kde je odkaz
na applet.
- public String getParameter(String jmΘno) - vracφ hodnotu
parametru zadanΘho jmΘna. Pokud nenφ p°φslu╣n² parametr definovßn, vracφ null.
- public String[][] getParameterInfo() - m∙╛e slou╛it prohlφ╛eΦi
pro poskytnutφ informacφ o parametrech, kterΘ applet pou╛φvß. Metoda by m∞la
vracet pole, jeho╛ prvky jsou trojice °et∞zc∙ ve v²znamu: jmΘno, typ, popis (viz 17.3.). Metoda standardn∞ vracφ
null.
- public String getAppletInfo() - m∙╛e slou╛it k poskytnutφ
informacφ o programu, autorovi apod. Metoda standardn∞ vracφ null.
- public Locale getLocale() - vracφ objekt reprezentujφcφ
geografickß specifika.
- public void resize(int v²╣ka, int ╣φ°ka),
public void resize(Dimension d) - zm∞nφ velikost grafickΘho v²°ezu
appletu na zadanΘ rozm∞ry.
- public void showStatus(String zprßva) - zobrazφ zprßvu ve
stavovΘm poli prohlφ╛eΦe (dolnφ pruh).
- public Image getImage(URL url),
public Image getImage(URL url, String jmΘno) - vracφ referenci obrßzek
ve formßtu GIF nebo JPEG. Parametry: url - absolutnφ adresa obrßzku,
jmΘno - relativnφ Φßst adresy v∙Φi url. Nßvrat z obou metod je
proveden okam╛it∞, i kdy╛ obrßzek je╣t∞ nenφ nata╛en ze sφt∞.
- public void play(URL url), public void play(URL url, String
jmΘno) - p°ehraje zvukov² klip (formßt .au) ze zadanΘ adresy.
Parametry jako getImage().
- public AudioClip getAudioClip(URL url),
public AudioClip getAudioClip(URL url, String jmΘno) - vracφ referenci
na zvukov² klip - instanci implementujφcφ rozhranφ java.applet.AudioClip, kterΘ poskytuje metody:
- public void play() - p°ehraje klip,
- public void loop() - spustφ nekoneΦnou smyΦku p°ehrßvßnφ klipu,
- public void stop() - zastavφ p°ehrßvßnφ klipu.
- public AppletContext getAppletContext() - vracφ referenci na
kontext appletu - reprezentovanou instancφ implementujφcφ rozhranφ java.applet.AppletContext, kterΘ poskytuje metody:
17.3. Applet na WWW strßnce
P°ed spu╣t∞nφm appletu je t°eba na n∞j umφstit odkaz do HTML dokumentu
tvo°φcφho WWW strßnku. To se d∞je pomocφ specißlnφ formßtovacφ znaΦky
<APPLET>, kterß mß obecn∞ nßsledujφcφ strukturu:
<APPLET
CODE = " t°φda.class "
WIDTH = " ╣φ°ka "
HEIGHT = " v²╣ka "
[ NAME = " jmΘnoInstanceAppletu "]
[ CODEBASE = " url "]
[ ARCHIVE = " JARsoubor1, JARsoubor2, ..., JARsouborN "]
[ ALT = " alternativnφText "]
[ ALIGN = " zarovnßvßnφ "]
[ HSPACE = " vodorovnΘOdsazenφ "]
[ VSPACE = " svislΘOdsazenφ "] >
[ <PARAM NAME = " jmΘno1 " VALUE = " hodnota1 "> ]
[ <PARAM NAME = " jmΘno2 " VALUE = " hodnota2 "> ]
...
[ <PARAM NAME = " jmΘnoN " VALUE = " hodnotaN "> ]
[ AlternativnφHTML ]
</APPLET>
ZnaΦka <APPLET> je rozd∞lena na tyto zßkladnφ Φßsti:
- Atributy appletu - jsou uzav°eny v prvnφch ostr²ch zßvorkßch.
- Parametry appletu - ka╛d² parametr PARAM mß jmΘno (NAME)
a hodnotu (VALUE). Ke Φtenφ parametr∙ slou╛φ metody getParameter() a getParameterInfo().
- AlternativnφHTML - je HTML text pro prohlφ╛eΦ, kter² nespou╣tφ
programy v Jav∞.
JednotlivΘ atributy znaΦky <APPLET> majφ tento v²znam:
17.3.1. Komunikace mezi applety
Applety na tΘ╛e WWW strßnce spolu mohou komunikovat pomocφ volßnφ sv²ch
ve°ejn²ch metod. Applet, jeho╛ ve°ejnΘ metody lze volat musφ mφt uvedeno jmΘno
(NAME) ve znaΦce <APPLET> (viz 17.3.).
Priklad 17.1. |
Nßsledujφcφ v²pis obsahuje dva applety (musφ b²t ulo╛eny do soubor∙ Volajici.java a Volany.java), kterΘ demonstrujφ jednoduchΘ p°edßnφ
textovΘ zprßvy.
import java.applet.Applet;
public class Volajici extends Applet { // (1)
public void start() {
Applet app = getAppletContext().getApplet("Volany"); // (2)
((Volany)app).prijmiZpravu("Funguje to!"); // (3)
}
}
public class Volany extends Applet { // (4)
String text = "Zatim nic...";
public void prijmiZpravu(String text) {
if (text != null)
this.text = text; // (5)
repaint(); // (6)
}
public void paint(java.awt.Graphics g) { // ()
g.drawString(text, 5,20); // ()
}
}
Volajφcφ applet (1) nejprve zφskß referenci na applet jmΘnem "Volany" (2)
a za╣le mu textovou zprßvu (3). Volan² applet (4) zprßvu p°ijme (5) a zobrazφ
- p°ekreslenφ zaji╣╗uje metoda paint() (7) volanß prohlφ╛eΦem na ╛ßdost
metody repaint().
HTML dokument bude obsahovat tyto ·daje - d∙le╛it² je zejmΘna atribut NAME u volanΘho appletu:
<APPLET
CODE = Volany.class
WIDTH = 100
HEIGHT = 30
NAME = "Volany"
></APPLET>
<APPLET
CODE = Volajici.class
WIDTH = 0
HEIGHT = 0
></APPLET>
|
|
|