Programmēšana

Ievads AWT

Java programmēšanas valodas klases bibliotēka nodrošina lietotāja saskarnes rīku komplektu, ko sauc par Abstract Windowing Toolkit jeb AWT. AWT ir gan spēcīgs, gan elastīgs. Tomēr jaunpienācēji bieži uzskata, ka tā spēks ir aizsegts. Klase un metodes apraksti, kas atrodami izplatītajā dokumentācijā, jaunajam programmētājam sniedz maz norādījumu. Turklāt pieejamie piemēri bieži vien neatbild uz daudziem svarīgiem jautājumiem. Protams, jaunpienācējiem vajadzētu sagaidīt zināmas grūtības. Efektīvas grafiskās lietotāja saskarnes pēc būtības ir sarežģītas, lai tās izstrādātu un ieviestu, un dažkārt sarežģītā mijiedarbība starp AWT klasēm tikai padara šo uzdevumu sarežģītāku. Tomēr, pareizi vadoties, grafiskā lietotāja interfeisa izveide, izmantojot AWT, ir ne tikai iespējama, bet arī samērā vienkārša.

Šis raksts aptver dažas AWT pamatā esošās filozofijas un pievērš uzmanību praktiskām problēmām, kā izveidot vienkāršu sīklietotnes vai lietojumprogrammas lietotāja saskarni.

Kas ir lietotāja interfeiss

Lietotāja saskarne ir tā programmas daļa, kas mijiedarbojas ar programmas lietotāju. Lietotāju saskarnēm ir dažādas formas. Šīs formas ir sarežģītas, sākot no vienkāršām komandrindas saskarnēm līdz grafiskām lietotāja saskarnes un klikšķa saskarnēm, ko nodrošina daudzas mūsdienu lietojumprogrammas.

Zemākajā līmenī operētājsistēma pārraida informāciju no peles un tastatūras uz programmu kā ievadi un nodrošina pikseļus programmas izvadīšanai. AWT tika izveidots tā, lai programmētājiem nebūtu jāuztraucas par peles izsekošanas vai tastatūras lasīšanas detaļām, kā arī jāpievērš uzmanība ekrāna rakstīšanas detaļām. AWT nodrošina labi izstrādātu objektorientētu saskarni šiem zema līmeņa pakalpojumiem un resursiem.

Tā kā Java programmēšanas valoda nav atkarīga no platformas, AWT jābūt neatkarīgai arī no platformas. AWT tika izstrādāts, lai nodrošinātu kopēju rīku komplektu grafiskai lietotāja saskarnes projektēšanai, kas darbojas dažādās platformās. Lietotāja interfeisa elementi, ko nodrošina AWT, tiek ieviesti, izmantojot katras platformas vietējo GUI rīku komplektu, tādējādi saglabājot katras platformas izskatu. Šī ir viena no AWT spēcīgākajām pusēm. Šādas pieejas trūkums ir fakts, ka grafiskā lietotāja saskarne, kas izveidota vienā platformā, var izskatīties citādi, ja to parāda citā platformā.

Sastāvdaļas un konteineri

Grafiskais lietotāja interfeiss ir veidots no grafiskiem elementiem, kurus sauc par komponentiem. Tipiski komponenti ietver tādus vienumus kā pogas, ritjoslas un teksta laukus. Komponenti ļauj lietotājam mijiedarboties ar programmu un nodrošina lietotājam vizuālu atgriezenisko saiti par programmas stāvokli. AWT visi lietotāja interfeisa komponenti ir klases Component vai viena no tā apakštipiem.

Komponenti nav atsevišķi, bet drīzāk ir atrodami konteineros. Konteineri satur un kontrolē komponentu izkārtojumu. Konteineri paši ir sastāvdaļas, un tāpēc tos var ievietot citu konteineru iekšpusē. AWT visi konteineri ir konteineru klases vai kāda no tā apakštipiem.

Telpiski komponentiem pilnībā jāiekļaujas konteinerā, kas tos satur. Šī komponentu (ieskaitot konteinerus) ligzdošana konteineros rada elementu koku, sākot ar konteineru koka saknē un izplešoties līdz lapām, kas ir tādas sastāvdaļas kā pogas.

1. attēlā parādīta vienkārša grafiskā lietotāja saskarne, kāda tā izskatītos, kad tā tiktu parādīta operētājsistēmā Windows 95. 2. attēlā parādīti 1. attēla saskarnes komponenti, kas sakārtoti kā koks.

Komponentu veidi

3. attēlā parādīta mantojuma attiecība starp lietotāja interfeisa komponentu klasēm, ko nodrošina AWT. Klases komponents nosaka saskarni, kurai jāpievienojas visiem komponentiem.

AWT nodrošina deviņas pamata ne-konteineru komponentu klases, no kurām var izveidot lietotāja saskarni. (Protams, jaunas komponentu klases var atvasināt no jebkura no šiem vai no pašas klases komponentes.) Šīs deviņas klases ir klases poga, audekls, izvēles rūtiņa, izvēle, iezīme, saraksts, ritjosla, TextArea un TextField. 4. attēlā attēlots katras klases eksemplārs.

Lai apskatītu šo sīklietotni, jums ir nepieciešama Java iespējota pārlūkprogramma.

4. attēls.

Deviņi lietotāja interfeisa komponenti

Šī displeja avots ir atrodams šeit.

Konteineru veidi

AWT nodrošina četras konteineru klases. Tie ir klases Window un tā divi apakštipi - klases rāmis un klases dialogs, kā arī panelis. Papildus AWT piedāvātajiem konteineriem Applet klase ir konteiners - tas ir paneļa klases apakštips, un tāpēc tajā var ievietot komponentus. Zemāk ir sniegti īsi katras konteineru klases apraksti, ko nodrošina AWT.

LogsAugšējā līmeņa displeja virsma (logs). Logu klases eksemplārs nav pievienots citam konteineram un nav tajā iestrādāts. Klases Window gadījumam nav apmales un nosaukuma.
RāmisAugšējā līmeņa displeja virsma (logs) ar apmali un virsrakstu. Klases Frame eksemplāram var būt izvēlņu josla. Citādi tas ir ļoti līdzīgs loga klases gadījumam.
DialogsAugšējā līmeņa displeja virsma (logs) ar apmali un virsrakstu. Klases Dialog eksemplārs nevar pastāvēt bez saistītā Frame klases gadījuma.
Panelis

Vispārējs konteiners sastāvdaļu turēšanai. Paneļa klases eksemplārs nodrošina konteineru, kuram pievienot komponentus.

Konteinera izveide

Pirms pievienojat komponentus, kas veido lietotāja saskarni, programmētājam jāizveido konteiners. Veidojot lietojumprogrammu, programmētājam vispirms jāizveido klases loga vai klases rāmja eksemplārs. Veidojot sīklietotni, rāmis (pārlūkprogrammas logs) jau pastāv. Tā kā Applet klase ir paneļa klases apakštips, programmētājs var pievienot komponentus pašas Applet klases instancei.

1. saraksta kods izveido tukšu rāmi. Kadra nosaukums ("1. piemērs") ir noteikts aicinājumā uz konstruktoru. Rāmis sākotnēji nav redzams, un tas jādara redzams, atsaucoties uz to rādīt () metodi.

importēt java.awt. *;

publiskā klase1. piemērs {public static void main (String [] args) {Frame f = new Frame ("1. piemērs");

f.parādīt (); }}

Saraksts 1.

Tukšs rāmis

2. saraksta kods paplašina kodu no 1. saraksta, lai jaunā klase mantotu no klases paneļa. Iekš galvenais () metodi, šīs jaunās klases eksemplārs tiek izveidots un pievienots objektam Frame, izsaucot pievienot () metodi. Pēc tam tiek parādīts rezultāts. Abu piemēru rezultātiem vajadzētu izskatīties identiski (tas ir, tiem vajadzētu izskatīties diezgan neinteresantiem).

importēt java.awt. *;

publiskā klase1a. piemērs paplašina paneli {public static void main (String [] args) {Frame f = new Frame ("1.a piemērs");

Piemērs1a ex = jauns piemērs1a ();

f.add ("Centrs", bijušais);

f.paka (); f.parādīt (); }}

2. saraksts.

Rāmis ar tukšu paneli

Iegūstot jauno klasi no klases sīklietotnes, nevis klases paneļa, šo piemēru tagad var palaist gan kā atsevišķu lietojumprogrammu, gan kā sīklietotni, kas iegulta tīmekļa lapā. Šī piemēra kods ir norādīts 3. sarakstā. Iegūtais sīklietotne ir parādīta 5. attēlā (un joprojām ir diezgan neinteresanta).

importēt java.awt. *;

publiskā klase1b. paplašina java.applet.Applet {public static void main (String [] args) {Frame f = new Frame ("1.b piemērs");

1.b piemērs = jauns 1.b piemērs ();

f.add ("Centrs", bijušais);

f.paka (); f.parādīt (); }}

3. saraksts.

Rāmis ar tukšu sīklietotni

Lai apskatītu šo sīklietotni, jums ir nepieciešama Java iespējota pārlūkprogramma.

5. attēls.

Tukšs rāmis

Piezīme. Objekts Frame var aizstāt loga objekts un dažos gadījumos pat Dialog objekts. Tie visi ir derīgi konteineri, un komponentus katram pievieno tādā pašā veidā.

Komponentu pievienošana konteineram

Lai lietotāja saskarne būtu noderīga, tai ir jābūt ne tikai konteineram - tajā jābūt komponentiem. Komponenti tiek pievienoti konteineriem, izmantojot konteineru pievienot () metodi. Ir trīs pamatformas pievienot () metodi. Izmantojamā metode ir atkarīga no konteinera izkārtojuma pārvaldnieka (skatiet sadaļu ar nosaukumu Komponentu izkārtojums).

Kods 4. sarakstā pievieno divu pogu izveidi kodam, kas parādīts 3. sarakstā. Izveide tiek veikta tajā() metodi, jo tā tiek automātiski izsaukta sīklietotnes inicializācijas laikā. Tāpēc neatkarīgi no tā, kā programma tiek startēta, pogas tiek izveidotas, jo tajā() izsauc vai nu pārlūks, vai galvenais () metodi. 6. attēlā ir iegūtais sīklietotne.

importēt java.awt. *;

publiskā klase3. piemērs paplašina java.applet.Applet {public void init () {add (new Button ("One")); pievienot (jauna poga ("Divi")); }

public Dimension preferSize () {return new Dimension (200, 100); }

public static void main (String [] args) {Frame f = new Frame ("3. piemērs");

3. piemērs ex = jauns 3. piemērs ();

ex.init ();

f.add ("Centrs", bijušais);

f.paka (); f.parādīt (); }}

4. saraksts.

Sīklietotne ar divām pogām

Lai apskatītu šo sīklietotni, jums ir nepieciešama Java iespējota pārlūkprogramma.

6. attēls.

Sīklietotne ar divām pogām

Komponentu izkārtojums

Līdz šim brīdim nekas nav teikts par to, kā tiek ievietoti konteineram pievienotie komponenti. Izkārtojumu kontrolē nevis konteiners, bet izkārtojuma pārvaldnieks, kas saistīts ar konteineru. Izkārtojuma pārvaldnieks pieņem visus komponentu izvietošanas lēmumus. AWT visās izkārtojuma pārvaldnieku klasēs tiek ieviesta LayoutManager saskarne.

AWT nodrošina piecus izkārtojuma pārvaldniekus. Tie svārstās no ļoti vienkāršiem līdz ļoti sarežģītiem. Šis raksts aptver tikai divas izkārtojuma pārvaldnieka klases, kuras izmanto šeit minētie piemēri: FlowLayout klase un BorderLayout klase.

FlowLayout klase komponentus ievieto traukā no kreisās uz labo. Kad vieta vienā rindā ir iztukšota, tiek sākta cita rinda. Konteinera viena argumenta versija pievienot () metodi izmanto, lai pievienotu komponentus.

BorderLayout klasē ir piecas zonas, kā parādīts 7. attēlā. Zonu nosaukumi ir "ziemeļi", "dienvidi", "austrumi", "rietumi" un "centrs". Katrā no šīm piecām zonām var ievietot vienu sastāvdaļu. Kad norobežojošā konteinera izmērs tiek mainīts, katras robežas zonas izmērs tiek mainīts tieši tik daudz, lai tajā varētu ievietot komponentu. Jebkura liekā vieta tiek piešķirta centra zonai. Konteinera divu argumentu versija pievienot () metodi izmanto, lai pievienotu komponentus. Pirmais arguments ir String objekts, kas nosauc zonu, kurā ievietot komponentu.

Katrai konteineru klasei ir noklusējuma izkārtojuma pārvaldnieks. Klases Frame un Dialog noklusējuma izkārtojuma pārvaldnieks ir BorderLayout pārvaldnieks. Paneļa klases (un Applet klases) noklusējuma izkārtojuma pārvaldnieks ir FlowLayout pārvaldnieks.

5. saraksta kods izmanto abus izkārtojuma pārvaldniekus un ietver vēl dažus lietotāja interfeisa komponentus. Rezultāts parādīts 8. attēlā.

importēt java.awt. *;

public class 4. piemērs paplašina java.applet.Applet {public void init () {Panel p;

setLayout (jauns BorderLayout ());

p = jauns panelis ();

p.add (jauns TextArea ());

pievienot ("Centrs", p);

p = jauns panelis ();

p.add (jauna poga ("Viens")); p.add (jauna poga ("Divi"));

Choice c = new Choice ();

c.addItem ("viens"); c.addItem ("divi"); c.addItem ("trīs");

p. pievienot (c);

pievienot ("Dienvidi", p); }

public static void main (String [] args) {Frame f = new Frame ("4. piemērs");

4. piemērs ex = jauns 4. piemērs ();

ex.init ();

f.add ("Centrs", bijušais);

f.paka (); f.parādīt (); }}

5. saraksts.

Sarežģītāks piemērs

Lai apskatītu šo sīklietotni, jums ir nepieciešama Java iespējota pārlūkprogramma.

8. attēls.

Sarežģītāks piemērs

Pasākumu apstrāde

Iepriekš minētie piemēri nedara neko citu, kā tikai parāda inertu lietotāja saskarni. Protams, ir ļoti svarīgi, lai lietotāja interfeiss rīkotos lietotāja ievades rezultātā. Tomēr šajā rakstā ir paredzēts iedziļināties notikumu apstrādes noslēpumos. Tas jāgaida līdz nākamajam rakstam. Tomēr pilnīguma labad 6. saraksta koda piemērs parāda, kā rīkoties ar viena veida notikumiem, kurus programma var saņemt. Jaunā klase ignorē darbība () metodi, ko nodrošina Component klase. The darbība () metode reaģē uz darbības notikumiem, kurus ģenerē, piemēram, atlasot vienumu no uznirstošā saraksta. The darbība () metode prasa, lai tiktu piegādāti divi parametri, notikuma instance un objekta instance. Notikuma instancē ir informācija par notikumu, tostarp notikuma mērķis (komponents, kurš pirmo reizi saņēma notikumu), notikuma x un y koordinātas un laiks, kad notikums notika. Objekta instance glabā notikumam raksturīgu datu daļu. Pogas objektiem tas satur tekstu pogas etiķetē.

importēt java.awt. *;

publiskā klase5. piemērs paplašina java.applet.Applet {TextArea ta = null;

public void init () {Paneļa p;

setLayout (jauns BorderLayout ());

p = jauns panelis ();

ta = jauns TextArea ();

p.add (ta);

pievienot ("Centrs", p);

p = jauns panelis ();

p.add (jauna poga ("Viens")); p.add (jauna poga ("Divi"));

Choice c = new Choice ();

c.addItem ("viens"); c.addItem ("divi"); c.addItem ("trīs");

p. pievienot (c);

pievienot ("Dienvidi", p); }

publiska būla darbība (notikums e, objekts o) {virkne str = (virkne) o;

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

atgriezties nepatiesa; }

public static void main (String [] args) {Frame f = new Frame ("5. piemērs");

5. piemērs ex = jauns 5. piemērs ();

ex.init ();

f.add ("Centrs", bijušais);

f.paka (); f.parādīt (); }}

6. saraksts.

Piemērs ar notikumu apstrādi

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