Programiranje

Uvod v AWT

Knjižnica razredov programskega jezika Java ponuja nabor orodij za uporabniški vmesnik, imenovan Abstract Windowing Toolkit ali AWT. AWT je hkrati zmogljiv in prilagodljiv. Novinci pa pogosto ugotovijo, da je njegova moč zastrta. Opisi razredov in metod, ki jih najdemo v razdeljeni dokumentaciji, nudijo malo navodil za novega programerja. Poleg tega razpoložljivi primeri pogosto pustijo številna pomembna vprašanja brez odgovora. Prišleki bi seveda morali pričakovati nekaj težav. Učinkovite grafične uporabniške vmesnike je po svoji naravi izziv za načrtovanje in izvajanje, včasih zapletene interakcije med razredi v AWT pa samo naredijo to nalogo bolj zapleteno. Vendar pa z ustreznimi navodili ustvarjanje grafičnega uporabniškega vmesnika z uporabo AWT ni le mogoče, ampak razmeroma enostavno.

Ta članek zajema nekaj filozofije, ki stoji za AWT, in obravnava praktično skrb, kako ustvariti preprost uporabniški vmesnik za programček ali aplikacijo.

Kaj je uporabniški vmesnik

Uporabniški vmesnik je tisti del programa, ki komunicira z uporabnikom programa. Uporabniški vmesniki imajo različne oblike. Zapletenost teh obrazcev je od preprostih vmesnikov ukazne vrstice do grafičnih uporabniških vmesnikov point-and-click, ki jih ponujajo številne sodobne aplikacije.

Na najnižji ravni operacijski sistem prenaša informacije z miške in tipkovnice v program kot vhod in zagotavlja slikovne pike za izhod programa. AWT je bil zasnovan tako, da se programerji ne skrbijo za podrobnosti sledenja miški ali branja tipkovnice, niti ne skrbijo za podrobnosti pisanja na zaslon. AWT nudi dobro zasnovan objektno usmerjen vmesnik za te storitve in vire na nizki ravni.

Ker je programski jezik Java neodvisen od platforme, mora biti tudi AWT neodvisen od platforme. AWT je bil zasnovan tako, da nudi skupen nabor orodij za oblikovanje grafičnega uporabniškega vmesnika, ki delujejo na različnih platformah. Elementi uporabniškega vmesnika, ki jih ponuja AWT, se izvajajo z uporabo naravnega nabora orodij GUI vsake platforme, s čimer se ohrani videz in občutek vsake platforme. To je ena najmočnejših točk AWT. Pomanjkljivost takšnega pristopa je dejstvo, da lahko grafični uporabniški vmesnik, zasnovan na eni platformi, izgleda drugače, če je prikazan na drugi platformi.

Sestavni deli in posode

Grafični uporabniški vmesnik je zgrajen iz grafičnih elementov, imenovanih komponente. Tipične komponente vključujejo elemente, kot so gumbi, drsni trakovi in ​​besedilna polja. Komponente omogočajo uporabniku interakcijo s programom in mu zagotavljajo vizualne povratne informacije o stanju programa. V AWT so vse komponente uporabniškega vmesnika primerki razreda Component ali ene od njegovih podtipov.

Sestavni deli niso samostojni, temveč jih najdemo v zabojnikih. Posode vsebujejo in nadzorujejo postavitev komponent. Posode so same po sebi sestavni deli in jih je zato mogoče namestiti v druge posode. V AWT so vsi vsebniki primerki razreda Container ali ene od njegovih podtipov.

Prostorsko se morajo sestavni deli popolnoma prilegati vsebniku, ki jih vsebuje. To gnezdenje komponent (vključno s posodami) v posode ustvari drevo elementov, začenši s posodo na korenu drevesa in se razširi do listov, ki so sestavni deli, kot so gumbi.

Na sliki 1 je prikazan preprost grafični uporabniški vmesnik, kot bi bil videti, če bi bil prikazan v sistemu Windows 95. Slika 2 prikazuje komponente vmesnika s slike 1, razporejene v obliki drevesa.

Vrste komponent

Slika 3 prikazuje razmerje dedovanja med razredi komponent uporabniškega vmesnika, ki jih zagotavlja AWT. Class Component določa vmesnik, na katerega se morajo vse komponente držati.

AWT ponuja devet osnovnih razredov komponent, ki niso vsebniki, iz katerih je mogoče zgraditi uporabniški vmesnik. (Seveda lahko nove razrede komponent izpeljemo iz katerega koli od njih ali iz same komponente Component.) Teh devet razredov je razred Button, Canvas, Checkbox, Choice, Label, List, Scrollbar, TextArea in TextField. Slika 4 prikazuje primer vsakega razreda.

Za ogled tega programčka potrebujete brskalnik, ki podpira Java.

Slika 4.

Devet komponent uporabniškega vmesnika

Vir za ta zaslon najdete tukaj.

Vrste posod

AWT ponuja štiri razrede vsebnikov. So razred Window in njegova dva podtipa - razred Frame in class Dialog - pa tudi razred Panel. Poleg vsebnikov, ki jih ponuja AWT, je razred Applet tudi vsebnik - je podtip razreda Panel in zato lahko vsebuje komponente. Spodaj so navedeni kratki opisi vseh razredov vsebnikov, ki jih zagotavlja AWT.

OknoZgornja površina zaslona (okno). Primerek razreda Window ni priključen ali vdelan v drug vsebnik. Primerek razreda Window nima obrobe in naslova.
OkvirZgornja površina zaslona (okno) z obrobo in naslovom. Primerek razreda Frame ima lahko menijsko vrstico. Sicer je zelo podoben primerku razreda Window.
Pogovorno oknoZgornja površina zaslona (okno) z obrobo in naslovom. Primerek razreda Dialog ne more obstajati brez povezanega primerka razreda Frame.
Panel

Splošna posoda za držanje komponent. Primerek razreda Panel ponuja vsebnik, v katerega lahko dodate komponente.

Ustvarjanje vsebnika

Pred dodajanjem komponent, ki tvorijo uporabniški vmesnik, mora programer ustvariti vsebnik. Pri izdelavi aplikacije mora programer najprej ustvariti primerek razreda Window ali razreda Frame. Pri gradnji programčka že obstaja okvir (okno brskalnika). Ker je razred Applet podvrsta razreda Panel, lahko programer doda komponente v primerek razreda Applet.

Koda v seznamu 1 ustvari prazen okvir. Naslov okvira ("Primer 1") je nastavljen v klicu konstruktorja. Okvir je sprva neviden in mora biti viden tako, da ga prikličete pokaži () metoda.

uvoz java.awt. *;

javni razred Primer1 {public static void main (String [] args) {Frame f = new Frame ("Example 1");

f.show (); }}

Seznam 1.

Prazen okvir

Koda v seznamu 2 razširja kodo iz seznama 1, tako da novi razred podeduje iz razreda Panel. V glavni () , se ustvari primerek tega novega razreda in doda k objektu Frame s klicem na dodaj () metoda. Nato se prikaže rezultat. Rezultati obeh primerov bi morali biti enaki (to pomeni, da bi morali izgledati precej nezanimivo).

uvoz java.awt. *;

javni razred Example1a razširja Panel {public static void main (String [] args) {Frame f = new Frame ("Example 1a");

Primer1a ex = nov Primer1a ();

f.add ("Center", nekdanji);

f.pack (); f.show (); }}

Seznam 2.

Okvir s prazno ploščo

Z izpeljavo novega razreda iz razreda Applet namesto razreda Panel se lahko ta primer zdaj izvaja kot samostojna aplikacija ali kot programček, vdelan v spletno stran. Koda za ta primer je navedena v seznamu 3. Nastali programček je prikazan na sliki 5 (in je še vedno precej nezanimiv).

uvoz java.awt. *;

javni razred Example1b razširja java.applet.Applet {public static void main (String [] args) {Frame f = new Frame ("Example 1b");

Primer1b ex = nov Primer1b ();

f.add ("Center", nekdanji);

f.pack (); f.show (); }}

Seznam 3.

Okvir s praznim programčkom

Za ogled tega programčka potrebujete brskalnik, ki podpira Java.

Slika 5.

Prazen okvir

Opomba: objekt Window in v nekaterih primerih celo objekt Dialog lahko nadomesti objekt Frame. Vsi so veljavni vsebniki in sestavni deli se dodajo vsakemu na enak način.

Dodajanje komponent v vsebnik

Da bi bil uporaben, mora biti uporabniški vmesnik sestavljen iz več kot le vsebnika - vsebovati mora komponente. Komponente se dodajo v vsebnike prek vsebnikov dodaj () metoda. Obstajajo tri osnovne oblike dodaj () metoda. Način uporabe je odvisen od upravitelja postavitve vsebnika (glejte poglavje z naslovom Postavitev komponent).

Koda v seznamu 4 dodaja ustvarjanje dveh gumbov kodi, predstavljeni v seznamu 3. Ustvarjanje se izvede v v() , ker se samodejno pokliče med inicializacijo programčka. Ne glede na to, kako se program zažene, so gumbi ustvarjeni, ker v() pokliče brskalnik ali glavni () metoda. Slika 6 vsebuje nastali programček.

uvoz java.awt. *;

javni razred Example3 razširja java.applet.Applet {public void init () {add (new Button ("One")); dodaj (nov gumb ("Dva")); }

public Dimension preferenceSize () {vrni novo dimenzijo (200, 100); }

public static void main (String [] args) {Frame f = nov okvir ("Primer 3");

Primer3 ex = nov Primer3 ();

ex.init ();

f.add ("Center", nekdanji);

f.pack (); f.show (); }}

Seznam 4.

Aplet z dvema gumboma

Za ogled tega programčka potrebujete brskalnik, ki podpira Java.

Slika 6.

Aplet z dvema gumboma

Postavitev komponent

Do tega trenutka še ni bilo nič rečeno o tem, kako so razporejene komponente, ki so bile dodane v posodo. Postavitve ne nadzoruje vsebnik, temveč upravitelj postavitve, povezan s vsebnikom. Upravitelj postavitve sprejema vse odločitve o postavitvi komponent. V AWT vsi razredi upravitelja postavitve izvajajo vmesnik LayoutManager.

AWT ponuja pet upraviteljev postavitve. Segajo od zelo preprostih do zelo zapletenih. Ta članek zajema le dva razreda upravitelja postavitve, ki jih uporabljata tukaj navedena primera: razred FlowLayout in razred BorderLayout.

Razred FlowLayout komponente postavi v vsebnik od leve proti desni. Ko je prostor v eni vrstici izčrpan, se začne druga vrstica. Različica z enim argumentom vsebnika dodaj () metoda se uporablja za dodajanje komponent.

Razred BorderLayout ima pet con, kot je prikazano na sliki 7. Območja so poimenovana "Sever", "Jug", "Vzhod", "Zahod" in "Središče". V vsako od teh petih con lahko namestimo posamezno komponento. Ko je velikost zaprtega vsebnika spremenjena, se velikost vsakega obrobnega območja spremeni toliko, da zadrži komponento, nameščeno znotraj. Morebitni odvečni prostor je dan sredinskemu območju. Dvoargumentirana različica vsebnika dodaj () metoda se uporablja za dodajanje komponent. Prvi argument je objekt String, ki poimenuje območje, v katerem je komponenta postavljena.

Vsak razred vsebnika ima privzeti upravitelj postavitve. Privzeti upravitelj postavitve za razred Frame in Dialog je upravitelj BorderLayout. Privzeti upravitelj postavitve za razred Panel (in razred Applet) je upravitelj FlowLayout.

Koda v seznamu 5 uporablja oba upravitelja postavitev in vključuje še nekaj komponent uporabniškega vmesnika. Rezultat je prikazan na sliki 8.

uvoz java.awt. *;

javni razred Example4 razširja java.applet.Applet {public void init () {Panel p;

setLayout (novo BorderLayout ());

p = nova plošča ();

p.add (novo TextArea ());

dodaj ("Center", str);

p = nova plošča ();

p.add (nov gumb ("Ena")); p.add (nov gumb ("Dva"));

Izbira c = nova izbira ();

c.addItem ("ena"); c.addItem ("dva"); c.addItem ("tri");

p.add (c);

dodaj ("Jug", str); }

public static void main (String [] args) {Frame f = new Frame ("Primer 4");

Primer4 ex = nov Primer4 ();

ex.init ();

f.add ("Center", nekdanji);

f.pack (); f.show (); }}

Seznam 5.

Bolj zapleten primer

Za ogled tega programčka potrebujete brskalnik, ki podpira Java.

Slika 8.

Bolj zapleten primer

Obravnava dogodkov

Zgornji primeri ne prikažejo nič drugega kot prikažejo inerten uporabniški vmesnik. Seveda je zelo pomembno, da uporabniški vmesnik ukrepa kot rezultat uporabnikovega vnosa. Vendar ta članek ne presega področja poglabljanja v skrivnosti ravnanja z dogodki. To mora počakati do prihodnjega članka. Vendar pa zaradi popolnosti primer kode v seznamu 6 prikazuje, kako ravnati z eno vrsto dogodka, ki ga lahko prejme program. Novi razred preglasi dejanje () metoda, ki jo zagotavlja razred Component. The dejanje () metoda se odzove na akcijske dogodke, ki so ustvarjeni, na primer z izbiro elementa s pojavnega seznama. The dejanje () metoda zahteva, da se navedeta dva parametra, primerek dogodka in primerek predmeta. Primer dogodka vsebuje informacije o dogodku, vključno s ciljem dogodka (komponenta, ki je prvi prejela dogodek), koordinatami x in y dogodka ter časom, ko se je dogodek zgodil. Primer Object vsebuje podatke, specifične za dogodek. Za predmete Button vsebuje besedilo na oznaki gumba.

uvoz java.awt. *;

javni razred Example5 razširja java.applet.Applet {TextArea ta = null;

public void init () {Panel p;

setLayout (novo BorderLayout ());

p = nova plošča ();

ta = novo TextArea ();

p.add (ta);

dodaj ("Center", str);

p = nova plošča ();

p.add (nov gumb ("Ena")); p.add (nov gumb ("Dva"));

Izbira c = nova izbira ();

c.addItem ("ena"); c.addItem ("dva"); c.addItem ("tri");

p.add (c);

dodaj ("Jug", str); }

javno logično dejanje (dogodek e, objekt o) {Niz str = (Niz) o;

ta.appendText (str + "\ n");

vrni false; }

public static void main (String [] args) {Frame f = new Frame ("Primer 5");

Primer5 ex = nov Primer5 ();

ex.init ();

f.add ("Center", nekdanji);

f.pack (); f.show (); }}

Seznam 6.

Primer ravnanja z dogodki

$config[zx-auto] not found$config[zx-overlay] not found