Java aplety. Předávání parametrů z HTML



Podobné dokumenty
2 Grafický výstup s využitím knihovny

Java - Kresba. 2/28/11 1/8 Java - kresba

8. GRAFICKÉ UŽIVATELSKÉ ROZHRANÍ

Aplikace s grafickým uživatelským rozhraním

Třída DrawingTool. Obrázek 1: Prázdné okno připravené pro kreslení

Vytváření a použití knihoven tříd

8 Třídy, objekty, metody, předávání argumentů metod

Projekt Obrázek strana 135

RMI Remote Method Invocation

Generické programování

Soubor jako posloupnost bytů

Java - výjimky. private void vstup() throws IOException {... }

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

Pokročilé programování v jazyce C pro chemiky (C3220) Třídy v C++

Programátorská příručka

Pokročilé programování v jazyce C pro chemiky (C3220) Operátory new a delete, virtuální metody

Bridge. Známý jako. Účel. Použitelnost. Handle/Body

PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE DATUM VYTVOŘENÍ: KLÍČOVÁ AKTIVITA: 02 PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) HODINOVÁ DOTACE: 1

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

20. Projekt Domácí mediotéka

Jazyk C# (seminář 6)

01. HODINA. 1.1 Spuštění programu VB Prvky integrovaného vývojového prostředí. - pomocí ikony, z menu Start.

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Algoritmizace a programování

Remote Method Invocation RMI

7 Formátovaný výstup, třídy, objekty, pole, chyby v programech

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

7. přednáška - třídy, objekty třídy objekty atributy tříd metody tříd

Teoretické minimum z PJV

02. HODINA. 2.1 Typy souborů a objektů. 2.2 Ovládací prvky Label a TextBox

Class loader. každá třída (java.lang.class) obsahuje referenci na svůj class loader. Implementace class loaderu

Pokročilé programování v jazyce C pro chemiky (C3220) Dědičnost tříd v C++

Programujeme v softwaru Statistica - příklady

Příklad aplikace Klient/Server s Boss/Worker modelem (informativní)

Z. Kotala, P. Toman: Java ( Obsah )

DSL manuál. Ing. Jan Hranáč. 27. října V této kapitole je stručný průvodce k tvorbě v systému DrdSim a (v

Seznámení s AWT: práce s okny, grafikou a textem

Programování v Javě I. Únor 2009

KTE / ZPE Informační technologie

Principy objektově orientovaného programování

Konstruktory a destruktory

Java a XML. 10/26/09 1/7 Java a XML

1 Návod na instalaci prostředí LeJOS-NXJ a přehrání firmwaru NXT kostky

zapište obslužnou metodu události Click tlačítka a vyzkoušejte chování polevýsledek.text = polečíslo1.text + polečíslo2.text;

PŘETĚŽOVÁNÍ OPERÁTORŮ

Výčtový typ strana 67

Pokročilé programování v jazyce C pro chemiky (C3220) Pokročilá témata jazyka C++

Cvičení 7: Delphi objekty CheckedBox, Radio- Button, EditBox

Programování v Javě I. Leden 2008

Paměť počítače. alg2 1

Gymnázium Vysoké Mýto nám. Vaňorného 163, Vysoké Mýto

Obrázek 6.14: Prohlížec nápovedy

Více o konstruktorech a destruktorech

Jazyk C# (seminář 3)

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Java GUI události. Událostmi řízené programování. Zpracování = obsluha událostí

15. Projekt Kalkulačka

Návod k ovládání aplikace

8. přednáška: Soubory a proudy

GUI - úvod. V této kapitole si ukážeme návod, jak vytvořit jednoduchou grafickou aplikaci a umístit do ní některé další grafické prvky.

Příklad : String txt1 = new String( Ahoj vsichni! ); //vytvoří instanci třídy String a přiřadí ji vnitřní hodnotu Ahoj vsichni!

Comenius Logo. Princip programování. Prostředí Comenius Logo

C++ přetěžování funkcí a operátorů. Jan Hnilica Počítačové modelování 19

Programujeme v softwaru Statistica

Jazyk C# (seminář 9)

Soketové připojení Klient InetAddress getbyname() UnknowHostException SecurityException Socket getinputstream() getoutputstream() IOException Server

DUM 06 téma: Tvorba makra pomocí VBA


Při studiu tohoto bloku se předpokládá, že student je zvládá základy programování v jazyce Java s využitím vývojového prostředí NetBeans.

Abstraktní třída a rozhraní

Seminář Java II p.1/43

Možnosti tisku v MarushkaDesignu

JSR tutorial 2 Transformace v JSR-184

11 Diagram tříd, asociace, dědičnost, abstraktní třídy

Dědění, polymorfismus

Připravil: David Procházka. Programovací jazyk C++

Programové konvence, dokumentace a ladění. Programování II 2. přednáška Alena Buchalcevová

1. Téma 12 - Textové soubory a výjimky

setup() { I = 0; } loop() { I = I + 1; }

Grafické uživatelské rozhraní v Javě. A0B36PR2-Programování 2 Fakulta elektrotechnická České vysoké učení technické

JSR tutorial 1 Úvod do JSR-184

Obsah. Životní cyklus activity Context Intent Spouštění aktivit Interakce s uživatelem. Toast. (c) Miroslav Balík, Ondřej Kroupa, Martin Pelant

Windows - základy. Hlavním vypínačem na základní jednotce. K datům uloženým do výchozí složky.

17. Projekt Trojúhelníky

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

Testování. Zadání příkladu. Vytvoření kostry třídy. Obsah:

RMI - Distribuované objekty v Javě

Podpora skriptování v Audacity

Vlákno odlehčený proces kód vlákna, zásobník privátní ostatní sdíleno s dalšími vlákny téhož procesu

Algoritmizace a programování

2.17 Webová grafika. Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Jiří Hort. Vyrobeno pro SOŠ a SOU Kuřim, s.r.o.

PROJEKT MINY - DOKUMENTACE

Internet - internetové prohlížeče

Tvorba informačních systémů

Chování konstruktorů a destruktorů při dědění

Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat.

Výjimky. v C# a Javě

1. Programování proti rozhraní

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

Transkript:

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.