Programování v jazyce Java

BorderLayout Dalším z nejběžnějších správců je BorderLayout umožňuje nám určit, na kterém místě se přidávan...


BorderLayout
Dalším z nejběžnějších správců je BorderLayout umožňuje nám určit, na kterém
místě se přidávaná komponenta objeví. Používá k tomu variantu příkazu add,která
má navíc ještě jeden argument, předávaný Layout Manageru. Při použití tohoto
objektu již nezáleží na pořadí vkládání komponent jako v předchozích případech.
Použití si opět budeme ilustrovat na příkladu appletu:
import java.awt.*;
import java.applet.*;
public class Test3 extends Applet{ public void init() { setLayout(new
BorderLayout()); add("North", new Button("Prvni")); add("South", new
Button("Druhy")); add("East", new Button("Treti")); add("West", new
Button("Ctvrty")); add("Center", new Button("Ctvrty")); }
}
Ostatní
V knihovně AWT máme kromě již uvedených Layout Managerů ještě možnost použít
následující objekty:
lCardLayout slouží k vytvoření několika karet, které můžeme na obrazovce
střídat. Je to užitečné v případech, kdy chceme měnit vzhled rozhraní za běhu.
lGridBagLayout tento správce je nejsložitější ze standardních správců. Pomocí
objektů třídy GridBagConstraints umožňuje u každé komponenty stanovit
vlastnosti při změně velikosti kontejneru.
Pokud nechceme použít žádný Layout Manager, můžeme pomocí příkazu:
setLayout(null);
vypnout jejich používání. Potom se však musíme starat o souřadnice, na které
dané komponenty umisťujeme, a proto to není doporučovaný způsob psaní aplikací
v Javě.
Vytváření GUI
Při vytváření uživatelského rozhraní nemusíme používat jeden Layout Manager pro
celé okno, do kterého umisťujeme komponenty. Můžeme si plochu okna rozdělit a v
každé části použít jiný druh správce rozmístění. Rozdělení plochy okna nám
umožní nejjednodušší potomek třídy Container Panel.
Panel je komponenta, která slouží k umisťování dalších komponent. Můžeme jej
umístit do libovolného kontejneru, tj. můžeme vytvořit hierarchickou strukturu
panelů, které realizují rozmisťování komponent. U každého panelu nastavíme
Layout Manager tak, aby celkový vzhled GUI odpovídal naší představě.
V následujícím příkladu si ukážeme použití několika panelů pro lepší rozvržení
komponent v appletu:
import java.awt.*;
import java.applet.*;
public class Test4 extends Applet{ public void init() { Panel p1, p2, p3;
setLayout(new BorderLayout()); add("East", p1 = new Panel()); add("South", p2 =
new Panel()); add("West", p3 = new Panel()); p1.setLayout(new GridLayout(3,1));
p1.add(new Checkbox("Jedna")); p1.add(new Checkbox("Dve")); p1.add(new
Checkbox("Tri")); p3.setLayout(new GridLayout(3,1)); p3.add(new
Checkbox("Maslo")); p3.add(new Checkbox("Pivo")); p3.add(new
Checkbox("Rohlik")); p2.add(new Button("Ok")); }
}
Tato ukázka po spuštění zobrazí applet, ve kterém budou jednotlivé komponenty
umístěny ve skupinách určených jednotlivými panely.
Pomocí panelů a několika málo Layout Managerů se dá dosáhnout slušné úrovně
zobrazení bez toho, aniž bychom nastavili jedinou souřadnici, kam se mají
jednotlivé komponenty zobrazovat.
Java applety
Applety jsou speciální formou Java aplikací, které 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áš applet potomkem 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 appletu. Typický applet
přepisuje několik z následujících metod:
linit() tato metoda je zavolána při inicializaci appletu (ihned po jeho
natažení do paměti). Je vhodné do ní umístit vytváření dalších objektů a
provést všechny nutné inicializace.
ldestroy() je doplňkem metody init a je volána, když prohlížeč odstraňuje
applet z paměti.
lstart() tuto metodu volá prohlížeč, když má applet začít provádět svoji
činnost, tj. po provedení metody init, když se má applet objevit na obrazovce.
lstop() doplněk metody start. Tato metoda je zavolána ve chvíli, kdy prohlížeč
odstraňuje z obrazovky daný applet není-li např. viditelný. V této metodě je
vhodné zastavit věci, které byly spuštěny v metodě start.
lpaint(g) je volána, když prohlížeč vyžaduje vykreslení appletu 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 appletu k dispozici, protože je potomkem
třídy Panel, můžeme použít několik metod, které jsou specifické pouze pro
applety (jsou naprogramovány ve třídě Applet).
Předávání parametrů z HTML
Applet 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.
Applet, který si chce takovýto parametr přečíst, použije volání metody
getParameter:
import java.awt.*;
import java.applet.*;
public class Zhtml extends Applet{ String hlaska; public void init() { hlaska =
getParameter("vypis"); } public void paint(Graphics g) {
g.drawString(hlaska,20,20); }
}
Uvedený applet 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 obdelník bude vyplněný,
drawOval(int x1, int y1, int width, int height), nakreslí ovál. Pokud uvedeme
stejnou výšku jako šířku, pak nakreslí kruh.
Všechny uvedené metody kreslí právě aktuální barvou. Chceme-li změnit tuto
barvu, zavoláme metodu setColor
s argumentem určujícím požadovanou barvu:
import java.awt.*;
import java.applet.*;
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áš applet 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 appletu barvou pozadí a pak
zavolá metodu paint. Pokud nechceme mít applet 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í
appletu, můžeme zavolat metodu repaint(). Tuto metodu není vhodné měnit její
chování je již definitivní.
Applet a jeho interakce s okolím
Applet má několik metod, které mu umožňují nahrání vnějších zdrojů např.
obrázků nebo zvuků. Podívejme se na applet, který zobrazí obrázek a začne
přehrávat zvukový soubor:
import java.awt.*;
import java.applet.*;
public class Cerveny extends Applet{ Image obraz; public void init() { 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 applet 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 dokument i applet. 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ě applet 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:
import java.applet.*;
public class Zvukovy extends Applet{ AudioClip zvuk; public void init() { 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 applet. 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.
8 0098 / pah









Komentáře
K tomuto článku není připojena žádná diskuze, nebo byla zakázána.