COMPUTERWORLD
 

profil kontakt CD-ROM CW100 p°edplatnΘ

archiv anketa CO VY NA TO? CW kariΘra serißly
 

IDG

IDG CZ homepage
COMPUTERWORLD
PC WORLD
INTERNET4U
MEGABYTE
TESTCENTRUM
ON-LINE






COMPUTERWORLD 04/98

Programovßnφ v jazyce Java 8. dφl

David ètrupl

Udßlosti

UvedenΘ p°φklady ukazovaly, jak vytvo°it u₧ivatelskΘ rozhranφ. To vÜak samo o sob∞ nestaΦφ. JeÜt∞ je t°eba napsat k≤d, kter² bude n∞co provßd∞t, nap°. p°i stisknutφ tlaΦφtka. Musφme naprogramovat reakci na udßlosti, kterΘ mohou v programu nastat.

Chceme-li nap°. zareagovat na stisk tlaΦφtka, m∙₧eme p°epsat metodu action u apletu:

import java.awt.*;
import java.applet.*;
public class Test2 extends Applet{
Button okButton = new Button("OK");
public void init() {
add(okButton);
}
public boolean action(Event e, Object what){
if (e.target == okButton) {
SystΘm.out.println("Stisknut button");
}
return true;
}
}

Podobn²m zp∙sobem je mo₧nΘ reagovat na udßlosti, kterΘ vzniknou kliknutφm myÜi, stisknutφm klßvesy na klßvesnici apod. JmΘna metod, kterΘ zpracovßvajφ udßlosti, se bohu₧el zm∞nila od verze 1.0 k verzi 1.1, tak₧e je v₧dy pot°eba dßvat pozor na to, kterou verzi p°ekladaΦe a prost°edφ mßme k dispozici. Verze 1.1 podporuje i volßnφ metod z verze 1.0, tj. zp∞tnß kompatibilita byla zachovßna, musφme vÜak dßvat pozor, abychom nepou₧ili volßnφ z verze 1.1, mßme-li k dispozici pouze verzi 1.0 (nap°. v prohlφ₧eΦi).

Layout Manager

V p°edchozφch p°φkladech jsme si ukazovali, jak p°idßvat komponenty do kontejner∙ pomocφ metody add. P°i prohlφ₧enφ b∞₧φcφch program∙ vßs jist∞ napadlo, ₧e jsme nikdy nezadßvali ₧ßdnΘ sou°adnice, kam se danΘ komponenty majφ zobrazit. To v∞tÜinou nenφ t°eba, nebo¥ v knihovn∞ AWT mßme k dispozici objekty, kterΘ se o umis¥ovßnφ komponent starajφ za nßs. T∞mto objekt∙m se °φkß Layout Managery, proto₧e implementujφ rozhranφ Layout Manager.

Pou₧itφ Layout Manager∙ by se mohlo zdßt na prvnφ pohled zbyteΦnΘ a t∞₧kopßdnΘ -- proΦ bychom nemohli umis¥ovat komponenty na p°esn∞ urΦenΘ sou°adnice? ProblΘm s umis¥ovßnφm na absolutnφ sou°adnice je v tom, ₧e nikdy nevφme, jak bude vypadat fyzickΘ za°φzenφ, na kterΘm se budou naÜe komponenty zobrazovat -- nem∙₧eme v∞d∞t, jakΘ bude mφt u₧ivatel k dispozici rozliÜenφ obrazovky, jak velkΘ budou fonty atd. Layout Manager by nßs jako programßtory m∞l od t∞chto detail∙ odstφnit.

S ka₧d²m kontejnerem (potomkem t°φdy Container) je svßzßn jeden Layout Manager. Pokud jej nezm∞nφme, je pou₧it defaultnφ -- pro t°φdu Panel (a tedy i pro jejφho potomka Applet) je pou₧it FlowLayout.

FlowLayout

Objekt tΘto t°φdy pracuje tak, ₧e umis¥uje jednotlivΘ komponenty za sebou podle po°adφ vklßdßnφ p°φkazem add. Pokud se dalÜφ komponenta nevejde na °ßdek, pokusφ se ji umφstit na dalÜφ °ßdek. Toto chovßnφ je vhodnΘ, pokud do kontejneru umis¥ujeme malΘ mno₧stvφ objekt∙ (nap°. dva Buttony apod.). Pokud chceme tento LayoutManager pou₧φt i v objektech, pro kterΘ nenφ defaultnφ, m∙₧eme pou₧φt p°φkaz:

setLayout(new FlowLayout());

Tento p°φkaz je t°eba vyvolat na p°φsluÜn² kontejner, nap°. na Frame.

GridLayout

Pokud chceme umis¥ovat objekty do m°φ₧ky, m∙₧eme p°φkazem

setLayout(new GridLayout(x,y));

aktivovat nov² GridLayout. Parametry x a y urΦujφ rozm∞ry m°φ₧ky. Podφvejme se na applet, do kterΘho vlo₧φme Φty°i tlaΦφtka:

import java.awt.*;
import java.applet.*;
public class Test2 extends Applet{
public void init() {
setLayout(new GridLayout(2,2));
add(new Button("Prvni"));
add(new Button("Druhy"));
add(new Button("Treti"));
add(new Button("Ctvrty"));
}
}

Po spuÜt∞nφ si m∙₧eme vyzkouÜet, co se bude dφt, budeme-li m∞nit velikost naÜeho appletu.

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, kter² je p°edßn 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:

- CardLayout -- 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.

- GridBagLayout -- 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 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.

 

 

© IDG Czechoslovakia, a.s., VÜechna prßva vyhrazena
info@idg.cz, webmaster@idg.cz