Java aplety Aplety jsou speciální formou Java aplikací - mohou být spouštěny z prostředí WWW prohlížeče. Aby je prohlížeč spustil, musíme vložit do HTML stránky potřebné příkazy: <applet code=mujapplet.class width=300 height=200> </applet> Z hlediska programu v Javě je náš aplet potomek třídy java.applet.applet. Třída Applet je potomkem třídy Panel, tj. má všechny vlastnosti třídy Container (jehož je Panel potomkem). Může obsahovat další komponenty a chová jako ostatní elementy GUI obsažené v balíku java.awt. Naše třída - potomek třídy Applet - neobsahuje metodu main, protože je spouštěna v prohlížeči. Místo toho obsahuje třída Applet několik metod, které můžeme přepsat, abychom dostali požadovanou funkčnost apletu. Typický aplet přepisuje několik z následujících metod: init() - tato metoda je zavolána při inicializaci apletu - ihned po natažení apletu do paměti. Je vhodné do ní umístit vytváření dalších objektů a provést všechny nutné inicializace, destroy() - je doplňkem metody init - je volána, když prohlížeč odstraňuje aplet z paměti start() - tuto metodu volá prohlížeč, když má aplet začít provádět svoji činnost. Tj. po provedení metody init, když se má aplet objevit na obrazovce stop() - doplněk metody start. Tato metoda je zavolána když prohlížeč odstraňuje z obrazovky daný aplet - není-li např. viditelný. V této metodě je vhodné zastavit věci, které byly spuštěny v metodě start. paint(g) - je volána, když prohlížeč vyžaduje vykreslení apletu na obrazovku. Parametr g je grafický kontext zařízení na který je prováděno vykreslování. Kromě standardních metod, které máme v apletu k dispozici, protože je potomkem třídy Panel, můžeme použít několik metod, které jsou specifické pouze pro aplety (jsou naprogramovány ve třídě Applet). Předávání parametrů z HTML Aplet si může přečíst parametry zadané jako součást příkazu <applet> v HTML stránce. Nejprve si ukážeme, jak zadáme v HTML stránce parametr se jménem vypis: <applet code=mujapplet.class width=300 height=200> <param name=vypis value= Ahoj > </applet> Příkazů param může být uveden libovolný počet. Rozlišujeme je pomocí jména. Aplet, který si chce takovýto parametr přečíst, použije volání metody getparameter: public class Zhtml extends Applet{ String hlaska; hlaska = getparameter( vypis );
public void paint(graphics g) { g.drawstring(hlaska,20,20); Uvedený aplet si tedy přečte hodnotu zadanou v HTML a potom ji vypíše v metodě paint. Kreslení V metodě paint můžeme ke kreslení použít libovolnou z metod definovaných ve třídě java.awt.graphics. Kromě již zmíněné metody drawstring budou užitečné zejména metody: drawline(int x1, int y1, int x2, int y2) - nakreslí úsečku zadanou počátečním a koncovým bodem drawrect(int x1, int y1, int width, int height) - nakreslí obdélník zadaný levým horním rohem a šířkou a výškou fillrect - podobné jako drawrect, ale obdélník bude vyplněný drawoval(int x1, int y1, int width, int height) - nakreslí ovál. Pokud uvedeme stejnou výšku jako šířku, tak nakreslí kruh. Všechny uvedené metody kreslí aktuální barvou. Chceme-li změnit barvu, zavoláme metodu setcolor s argumentem určujícím požadovanou barvu: public class Cerveny extends Applet{ public void paint(graphics g) { g.setcolor(color.red); g.fillrect(10,10,50,20); Všechny metody vyvolávané na grafický kontext g provádějí vykreslování přímo na obrazovku. Pokud chceme, aby náš aplet vykresloval něco rychleji, bývá lepší vytvořit nový grafický kontext v paměti. Provádění vykreslování probíhá do paměti a až v závěru je přeneseno na obrazovku - tomuto přístupu se někdy říká Double Buffering. Pro lepší zobrazování bývá rovněž dobré kromě metody paint přepsat i metodu update(g). Tato metoda je volána při žádosti o překreslení. Její standardní chování je následující: nejprve vybarví plochu apletu barvou pozadí a pak zavolá metodu paint. Pokud nechceme mít aplet vybarvován barvou pozadí před metodou paint, je dobré přepsat metodu update následujícím způsobem: public void update(graphics g) { paint(g); Pokud chceme v programu zajistit, aby v nějakém okamžiku došlo k překreslení apletu, můžeme zavolat metodu repaint(). Tuto metodu není vhodné měnit - její chování je již definitivní.
Aplet a jeho interakce s okolím Aplet má několik metod, které mu umožňují nahrání vnějších zdrojů - např. obrázku nebo zvuků. Podívejme se na aplet, který zobrazí obrázek a začne přehrávat zvukový soubor: public class Cerveny extends Applet{ Image obraz; obraz = getimage(getdocumentbase(), muj.gif ); public void paint(graphics g) { g.drawimage(obraz, 25, 25, this); public void start() { play(getdocumentbase(), mujzvuk.au ); Metoda getdocumentbase vrátí adresu, odkud byl aplet natažen - toho se dá využít, pokud chceme nahrávat soubory se zvukem nebo obrazem ze stejného místa, na kterém máme uloženu HTML stránku i aplet. V metodě init pomocí zavolání getimage získáme reprezentaci obrázku uloženého v souboru muj.gif. Obrázek si uložíme do proměnné obraz, která je typu java.awt.image. Tento obrázek můžeme v metodě paint vykreslit pomocí volání metody drawimage. V metodě start jsme použili druhou užitečnou metodu definovanou ve třídě aplet - play. Metoda play zahraje zvukový soubor, který je opět zadaný pomocí adresy - první část je opět získána z adresy HTML dokument a druhá část adresy jméno zvukového souboru. Pokud chceme zvuk obsažený v souboru zahrát víckrát, případně jeho přehrávání zastavit, použijeme proměnnou typu rozhraní AudioClip: public class Zvukovy extends Applet{ AudioClip zvuk; zvuk = getaudioclip(getdocumentbase(), zvuk.wav ); public void start() { zvuk.loop(); public void stop() { zvuk.stop(); Toto použití metody stop zastaví opakované přehrávání zvuku v okamžiku, kdy prohlížeč přestane zobrazovat aplet. Na proměnnou typu AudioClip můžeme použít metodu play, která zahraje daný zvuk pouze jednou, nebo, jako v uvedeném příkladě, můžeme nechat zvuk cyklit pomocí metody loop.
Některé funkce, které můžeme v apletu využít, jsou implementovány v prohlížeči. K vyvolání funkcí prohlížeče slouží rozhraní java.applet.appletcontext. Toto rozhraní definuje několik užitečných funkcí, které můžeme vyvolat pokud nejprve získáme odkaz na prohlížeč pomocí volání metody getappletcontext. Ukážeme si použití AppletContextu na příkladu volání metody showdocument, která říká prohlížeči, že má zobrazit novou HTML stránku: import java.net.*; public class Zobraz extends Applet{ Button jdibutton = new Button("Jdi"); add(jdibutton); public boolean action(event e, Object what){ if (e.target == jdibutton) { AppletContext ac = getappletcontext(); try { ac.showdocument(new URL("http://java.sun.com")); catch (MalformedURLException x) {; return true; Při volání prohlížeče z apletu záleží také na prohlížeči, zda nám požadovanou funkci umožní provést. Tento příklad byl otestován na prohlížeči Netscape, kde fungoval, jak má. Pokud jej spustíme pomocí programu appletviewer, nestane se po stištění tlačítka nic. Omezení apletů z důvodů bezpečnosti Protože jsou aplety nahrávány jakou součást HTML stránek, je nutné, aby jim nebylo umožněno vše, co může obyčejný program napsaný v Javě. Následuje popis toho, co mají aplety obvykle zakázáno. Slovo obvykle je na místě, protože to, co má aplet zakázáno a co povoleno, určuje objekt třídy Security Manager, který je součástí JVM - pro aplety je součástí prohlížeče. Tj. omezení apletů jsou z velké části dány politikou prohlížeče. Je na výrobci prohlížeče, aby se postaral o zajištění uživatelů před případnými nepřátelskými aplety. Pokud se aplet pokusí provést akci, kterou nemá povolenu, je vyvolána Security Exception. Nyní tedy slibovaný seznam: aplety nesmí pracovat se soubory na klientském počítači. Toto omezení bývá nutné, aby aplet nemohl uživateli smazat nebo jiným způsobem modifikovat soubory. Některé prohlížeče (HotJava) umožňují práci se soubory pouze v uživatelem stanoveném adresáři, jiné (Netscape) práci se soubory zakazují úplně. aplety nemohou volat systémové nebo jiné dynamicky linkované knihovny. Samostatná aplikace napsaná v Javě může používat native kód nahraný z dynamicky linkovaných knihoven - apletu se tato činnost zakazuje.
aplety nemohou u uživatele spouštět jiné programy aplety mohou navazovat síťová spojení pouze se serverem, ze kterého byly nahrány okna, která aplet vytváří, bývají označena varováním Všechna tato omezení jsou nutná, protože při prohlížení WWW stránek se můžeme dostat na stránku v jejímž rámci se nám do počítače nahraje aplet - v tomto případě musíme mít jistotu, že se nemůže stát nic špatného.