Documente online.
Zona de administrare documente. Fisierele tale
Am uitat parola x Creaza cont nou
 HomeExploreaza
upload
Upload




Biblioteca de clase AWT

Informatica


Biblioteca de clase

AWT



In acest capitol, vom discuta despre clasele si interfetele din pachetul Abstract Windowing Toolkit (AWT), pe care veti invata sa le folositi pentru crearea interfetei grafice cu utilizatorul (GUI) a aplicatiilor si miniaplicatiilor independente. Listingurile din acest capitol contin exemple de programe care ilustreaza gestionarea componentelor GUI. La sfarsitul capitolului, veti putea folosi clasele AWT in propriile aplicatii si miniaplicatii Java.

Prezentarea pachetului AWT

Clasele si interfetele din Setul de instrumente pentru gestionarea ferestrelor (Abstract Windowing Toolkit - AWT) sunt folosite pentru dezvoltarea aplicatiilor independente si implementarea elementelor de control GUI necesare in miniaplicatii. Aceste clase accepta toate aspectele dezvoltarii interfetei grafice cu utilizatorul, inclusiv tratarea evenimentelor.

Component Container sunt doua dintre cele mai importante clase ale pachetului java.awt.

Component este superclasa tuturor claselor care implementeaza controale GUI. Container este o subclasa a clasei Component si contine alte componente AWT. Merita sa va familiarizati cu descrierea API a acestor clase.

Clasa Window este o 515e48f subclasa a clasei Container; ea pune la dispozitia programatorilor un set de metode pentru implementarea ferestrelor. Clasa Window are doua subclase, Frame si Dialog, folosite pentru crearea obiectelor Window. Clasa Frame este folosita la crearea ferestrei principale a aplicatiei, iar clasa Dialog la implementarea casetelor de dialog. Vom discuta mai intai despre clasa Frame.

Folosirea clasei Frame pentru implementarea ferestrelor aplicatiilor

Frame este o subclasa a clasei Window; ea incapsuleaza fereastra unei aplicatii. Un obiect Frame poate sa contina o bara de meniuri si sa afiseze un titlu. Listingul 11.1 prezinta modul de folosire a unui obiect Frame pentru implementarea ferestrei unei aplicatii simple.

Listingul 11.1. Programul FrameExample.


import java.awt.*;

public class FrameExeample extends Frame

public FrameExample ( )

public void paint ( Graphics g )

public boolean handleEvent(Event event)

else return false;

}


Dupa ce creati in aplicatie obiectul Frame, folositi metoda show() pentru a afisa cadrul. Metoda show() este mostenita din clasa Window. Alte metode folosite pentru afisarea initiala a obiectului Frame sunt pack() si resize(). Metoda pack(), ca si metoda show(), mosteneste clasa Window. Ea organizeaza componentele obiectului Window si determina dimensiunea acestuia. Metoda resize() mosteneste clasa Component si este folosita pentru redimensionarea unui obiect Window la o dimensiune specificata.

Programul de mai sus prezinta structura de baza a unei aplicatii independente. Clasa principala a programului extinde clasa Frame si creaza o singura metoda, main(), asemanatoare metodelor folosite in programele de consola. Aceasta foloseste constructorul FrameExample() pentru a crea o fereastra a aplicatiei.

Constructorul FrameExample() foloseste constructorul superclasei pentru a stabili titlul ferestrei (FrameExample). Metoda pack() este, in general, folosita pentru gruparea componentelor, ceea ce permite mediului Java sa organizeze obiectele in cadrul ferestrei. Metoda resize() este folosita pentru redimensionarea ferestrei la 400x400 pixeli. In sfarsit, metoda show() este apelata pentru afisarea ferestrei.

Metoda paint() este apelata de sistemul de executie pentru desenarea initiala si pentru redesenarea ferestrei aplicatiei, ori de cate ori aceasta este mutata, redimensionata sau acoperita de alte ferestre. Metoda paint() primeste ca parametru un obiect al clasei Graphics. Acest obiect este folosit pentru actualizarea ferestrei afisate, prin desenarea texturii prestabilite. Metoda paint() din programul FrameExample afiseaza textul Fereastra unui program simplu in punctul de coordonate (100,100).

Metoda handleEvent() asigura tratarea primara a evenimentelor pentru componentele AWT. In general, ea provine din extinderea clasei Frame. Metoda handleEvent() din programul FrameExample urmareste aparitia evenimentului WINDOW_DESTROY si incheie programul apeland metoda exit() din clasa System. Din clasa Event vom discuta in sectiunea 'Tratarea evenimentelor in programele care folosesc ferestre'.

In figura 11.1, puteti vedea fereastra afisata initial de programul FrameExample.

Figura 11.1.

Fereastra afisata

Initial de programul

FrameExample.

Folosirea meniurilor si barelor de meniuri

Clasa MenuBar implementeaza o bara de meniuri, atasata, de obicei, unei aplicatii independente. MenuBar este o subclasa a clasei MenuComponent, care furnizeaza un set de metode pentru toate clasele de meniuri. Atasati un obiect MenuBar la un obiect Frame, folosind metoda setMenuBar() din clasa Frame.

Un obiect MenuBar contine unul sau mai multe obiecte Menu, care implementeaza meniurile derulante. Clasa Menu furnizeaza metodele necesare pentru adaugarea obiectelor MenuItem si a separatorilor in meniurile derulante implementate de obiectul Menu: De asemenea, ea contine metodele pentru accesul la obiectele MenuItem din obiectele Menu. Deoarece Menu este o subclasa a clasei MenuItem, un obiect Menu poate contine un alt obiect Menu, ceea ce permite crearea meniurilor in cascada , pe mai multe niveluri. Programul prezentat in listingul 11.2 ilustreaza acest concept.

Listingul 11.2. Programul MenuExample


import java.awt.*

public class MenuExample extends Frame

public MenuExample()

void addMenus()

public void paint(Graphics g)

public boolean handleEvent(Event event) else if(event.id==Event.ACTION_EVENT && event.target instanceof MenuItem) else

}else return false;

}


MenuItem este o subclasa a clasei MenuComponent; ea este folosita pentru implementarea unui articol dintr-un meniu derulant. Clasa MenuItem furnizeaza metode pentru activarea si dezactivarea (estomparea) etichetei asociate obiectului MenuItem, precum si pentru configurarea acesteia. Clasa MenuItem are doua subclase: Menu si CheckboxMenu Item. Clasa Menu a fost deja prezentata; clasa CheckboxMenu Item implementeaza un articol de meniu care poate fi validat sau invalidat si furnizeaza metodele pentru stabilirea si aflarea starii de validare. Puteti afla mai multe informatii despre casetele de validare, citind sectiunea 'Casete de validare si butoane radio'.

MenuComponent este superclasa tuturor acestor clase de meniuri. Metodele sale sunt folosite in operatii aplicate meniurilor, cum ar fi crearea articolelor de meniu.

Interfata MenuContainer defineste metodele care trebuie implementate de toate clasele continand obiecte de meniu. Ea este implementata de clasele Frame, Menu si MenuBar.

Programul MenuExample respecta structura programului FrameExample din listingul 11.1. El apeleaza metoda addMenus() in constructorul MenuExample(), pentru stabilirea meniurilor ferestrei. Remarcati faptul ca variabila menuSelection este un obiect de tip String si face parte din clasa MenuExaple.

Metoda addMenus() creaza un obiect MenuBar si mai multe obiecte de tip Menu, carora le adauga articole de meniu. Obiectele Menu sunt apoi adaugate la obiectul MenuBar, iar acesta este asociat ferestei aplicatiei, prin apelarea metodei setMenuBar().

Metoda paint() este redefinita, astfel incat sa deseneze in fereastra, cu textura prestabilita, articolul de meniu selectat de utilizator. Retineti faptul ca, in general, nu este necesara apelarea ei directa. Metoda paint() este apelata automat atuci cand folositi metodele show(), repaint() sau update().

Metoda handleEvent() din programul FrameExample este expandata, astfel incat sa verifice aparitia unui obiect ACTION_EVENT, care are ca destinatie un obiect MenuItem, in scopul tratarii actiunii de selectare a unui articol de meniu de utilizator. Metoda actualizeaza variabila MenuSelection pentru identificarea articolului de meniu selectat de utilizator. Metoda repaint() determina redesenarea ferestrei si apeleaza metoda paint(), asa cum am precizat mai sus.

Figura 11.2, prezinta fereastra afisata initial de programul MenuExample.

Figura 11.2.

Fereastra afisata

initial de programul

MenuExample

Tratarea evenimentelor in programele care folosesc ferestre

Clasa Event este elementul central al mecanismului de generare si tratare a evenimentelor in ferestrele Java. Evenimentele sunt generate de utilizatorul care interactioneaza cu fereastra unei aplicatii sau a unei miniaplicatii Java , sau chiar de sistemul de executie Java. Evenimentele generate de utilizatori apar la selectarea unei optiuni de meniu sau la apasarea unei taste. Evenimentele generate de sistemul de executie cuprind erorile si exceptiile. Aceste evenimente sunt tratate de un set de metode predefinite in clasa Component si in subclasele acesteia. Metodele sunt redefinite, pentru a efectua prelucrari personalizate ale evenimentelor.

In clasa Event sunt definite un numar de constante pentru identificarea evenimentelor stabilite pentru clasele AWT. Este important sa cunoasteti aceste constante, astfel incat sa va familiarizati cu tipurile de evenimente care trebuiesc tratate de programele dumneavoastra. Veti face cunostinta cu metodele de tratare a evenimentelor legate de diferitele componente ale ferestrei, pe masura ce veti parcurge exemplele de programe din acest capitol.

Implementarea casetelor de dialog cu clasa Dialog

Clasa Dialog, ca si clasa Frame, este o subclasa a clasei Window. In timp ce clasa Frame este folosita pentru implementarea ferestrei principale a unei aplicatii, clasa Dialog implementeaza casetele de dialog care prezinta informatii si interactioneaza cu utilizatorii unui program sau ai unei miniaplicatii. Pot fi create doua tipuri de casete de dialog. Casetele de dialog modale sunt obiecte Dialog pe care utilizatorul trebuie sa le inchida inainte de a putea folosi alte ferestre ale aplicatiei. Casetele de dialog nemodale nu impun aceasta restrictie.

Programul din listingul 11.3. Programul DialogExample.


import java.awt.*;

public class DialogExample extend Frame

public DialogExample()

void addMenus()

void createDialog()

public boolean handleEvent(Event event) else if (event.id==event.ACTION_EVENT && event.target instanceof MenuItem) else if('Show'.equals(event.arg)) else

}else return false;

}


Programul DialogExample respecta structura programelor FrameExample si MenuExample. El creaza variabila dialog care reprezinta referinta la o caseta de dialog pe care o creeaza si o afiseaza. Pentru crearea acestei casete de dialog, este apelata metoda createDialog() in constructorul DialogExample.

Metoda addMenus() a fost actualizata, astfel incat sa cuprinda articolele de meniu pentru afisarea si ascunderea casetei de dialog.

Metoda createDialog() creeaza o caseta de dialog nemodala cu dimensiunea 200x200 pixeli. Aceasta este afisata numai Dupa selectarea articolului de meniu Show si tratarea evenimentului astfel generat de catre metoda handleEvent().

Metoda handleEvent() trateaza articolul de meniu Show prin apelarea metodei show() din clasa Window, care afiseaza caseta de dialog. Optiunea de meniu Hide este tratata prin apelarea metodei hide() din clasa Component.

Observatie: Metoda show() din clasa Windows redefineste metoda show() din clasa Component si este folosita pentru afisarea obiectelor de tip Window. Spre deosebire de medoda show() din clasa Component, care se rezuma la afisarea ferestrei, metoda show() din clasa Window aduce fereastra in prim-plan, daca aceasta este deja afisata.

 


Figura 11.3, prezinta fereastra afisata initial de programul DialogExample.

Figura 11.3.

Fereastra afisata

initial de programul

DialogExample.

Folosirea clasei FileDialog pentru accesul la sistemul local de fisiere

FileDialog este o subclasa a clasei Dialog, folosita pentru selectarea unui fisier din lista de directoare. Clasa FileDialog asigura posibilitatea folosirii unor casete de dialog separate pentru incarcarea si salvarea fisierelor.

Programul prezentat in listingul 11.4 ilusteaza modul de folosire a clasei FileDialog.

Listingul 11.4. Programul FileDialogExample.


Programul FileDialogExample este foarte asemanator cu programul DialogExample, cu exceptia faptului ca el creeaza si afiseaza un obiect FileDialog, nu un obiect Dialog. Remarcati faptul ca a fost eliminat articolul de meniu Hide, deoarece fereastra FileDialog este modala si nu poate fi ascunsa Dupa afisare.

Metoda createDialog() creeaza obiectul FileDialog si ii asociaza titlul FileDialogBox.

Figura11.4

Fereastra afisata

initial de programul

FileDialogExample.

Organizarea componentelor prin folosirea claselor Panel si Layout

In aceasta sectiune sunt prezentate clasele AWT folosite pentru organizarea componentelor din aplicatii si miniaplicatii.

Panel este clasa cel mai des folosita pentru organizarea componentelor din aplicatiile independente. Ea este o subclasa a clasei Container si este afisata ca un panou intr-o fereastra. Majoritatea metodelor sale sunt mostenite de la superclasele Container si Component. Programul din listingul 11.5 ilusteaza folosirea clasei Panel.

Observatie: Clasa Applet este o subclasa a clasei Panel, folosita pentru implementarea unui panou in fereastra unui browser Web. Aceasta clasa adauga metode utile pentru accesul la functiile browserului.

 


Listingul 11.5. Programul PanelExample.


Programul PanelExample respecta structura celorlalte programe prezentate in acest capitol. In constructorul PanelExample, este apelata metoda addPanel() pentru adaugarea unui obiect Panel care contine obiecte Button. Butonelor nu li se asociaza metode pentru tratarea evenimentelor, asa incat, atunci cand executati clic pe ele, nu se intampla nimic. Despre butoane si despre operatiile de tratare a evenimentelor asociate vom discuta in sectiunea 'Etichete si butoane'. In acest program, butoanele au fost introduse numai pentru a ilustra modul in care pot fi adaugate noi componente la un panou si la fereastra principala a aplicatiei.

Figura 11.5, prezinta fereastra afisata initial de programul PanelExample.

Figura 11.5.

Fereastra afisata

initial de programul

PanelExample.

Interfata LayoutManager defineste metodele care trebuiesc implementate de clasele folosite pentru dispunerea obiectelor de tip Component intr-un obiect Container. Interfata este implementata de cinci clase AWT: BorderLayout, CardLayout, FlowLayout, GridBagLayout si GridLayout. Aceste clase sunt folosite pentru aranjarea obiectelor reprezentand instante ale clasei Container sau ale Subclaselor acesteia, astfel:

Clasa BorderLayout asigura posibilitatea formarii unui obiect Container de-a lungul unei laturi si in centrul containerului.

Clasa CardLayout asigura posibilitatea dispunerii a unui obiect Container sub forma unui teanc de carti de joc.

Clasa FlowLayout asigura posibilitatea organizarii unui obiect Container de la stanga la dreapta, pe randuri.

Clasa GridBagLayout asigura posibilitatea organizarii unui obiect Container in functie de un set de obiecte de tip GridBagConstraints.

Clasa GridLayout asigura posibilitatea organizarii unui obiect Container sub forma de grila.

Clasa GridBagConstraints este folosita pentru crearea obiectelor care specifica dimensiunea si pozitia unui obiect controlat de un obiect GridBagLayout.

Observatie: Clasa Insert asigura posibilitatea adaugarii marginilor pentru componentele afisate; ea poate fi folosita impreuna cu clasa GridBagConstraints.

 


Programul prezentat in listingul 11.6 ilustreaza folosirea celor cinci clase de organizare a containerelor.

Listingul 11.6. Programul LayoutExample


Programul LayoutExample este de doua ori mai mare decat celelalte programe prezentate in acest capitol; el contine ceva mai multe operatii de pregatire in vederea afisarii panourilor care ilustreaza cele cinci clase folosite pentru organizarea containerelor.

In acest program, metoda addPanel() stabileste organizarea ferestrei aplicatiei sub forma unei grile cu trei randuri si doua coloane. La aceasta grila, sunt adaugate cinci panouri care ilustreaza cele cinci clase de organizare.

Metoda addButtons() este folosita pentru adaugarea butoanelor la panouri, ilustrand modul in care fiecare clasa determina organizarea componentelor. Intr-un obiect GridBagLayout este organizat in functie de obiectele GridBagConstraints. Variabilele continute de aceste obiecte sunt actualizate, astfel incat sa se specifice pozitia, dimensiunea si modul de umplere al butoanelor. Butoanele adaugate la obiectul Panel pe baza celorlaltor moduri de organizare nu necesita initializari speciale.

Figura 11.6 prezinta fereastra afisata initial de programul LayoutExample.

Figura 11.6.

Fereastra afisata

initial de programul

LayoutExample.

Folosirea controalelor obisnuite ale interfetei grafice cu utilizatorul (GUI)

In aceasta sectiune, sunt prezentate controalele obisnuite furnizate de biblioteca AWT si modul de tratare a evenimentelor asociate acestora. Controalele discutate aici sunt furnizate de clasele Label, Button, Checkbox, List, TextField si TextArea. Alte controale GUI vor fi discutate mai tarziu in acest capitol.

Etichete si butoane

Clasa Label este folosita pentru afisarea unui rand de text protejat la scriere. Ea contine metode pentru stabilirea si obtinerea textului unui obiect Label si alinierea textului in cadrul spatiului ocupat de obiectul afisat.

Clasa Button va ofera posibilitatea de a folosi butoanele in aplicatiile si miniaplicatiile Java. Obiectele Button sunt etichetate cu un sir de caractere; in Java nu este permisa deocamdata folosirea imaginilor asociate butoanelor. Executarea unui clic pe un buton genereaza un obiect Event, care este identificat ca un obiect ACTION_EVENT. Programul prezentat in listingul 11.7 ilustreaza folosirea claselor Label si Button.

Listingul 11.7. Programul ButtonExample.


Programul ButtonExample ilustreaza folosirea claselor Label si Button, afisand eticheta ultimului buton pe care utilizatorul a executat clic, prin folosirea unui obiect Label. Obiectul Label contine initial sirul de caractere Default Text, stabilit la inceputul programului. Metoda addButtons() este apelata de constructor pentru configurarea obiectelor Label si Button.

Metoda handleEvent() verifica aparitia evenimentelor ACTION_EVENT care au ca destinatie un obiect Button, pentru examinarea clicurilor executate de utilizator. Aceste evenimente sunt tratate prin actualizarea obiectului Label, astfel incat acesta sa contina eticheta ultimului buton pe care utilizatorul a executat clic.

Figura 11.7 prezinta fereastra afisata initial de programul ButtonExample.

Figura 11.7.

Fereastra afisata

initial de programul

ButtonExample.

Casete de validare si butoane radio

Clasa Checkbox asigura posibilitatea implementarii casetelor de validare si butoanelor radio. Clasa CheckboxGroup grupeaza obiectele Checkbox si stabileste faptul ca acestea vor fi tratate ca butoane radio, in loc de casete de validare.

Clasa Checkbox furnizeaza metode pentru obtinerea si modificarea starii de validare si a etichetei unei casete. Validarea sau invalidarea unei casete sau a unui buton radio determina aparitia unui eveniment ACTION_EVENT.

Programul din listingul 11.8 ilustreaza folosirea casetelor de validare si a butoanelor radio.

Listingul 11.8. Programul CheckboxExample.


Programul CheckboxExample afiseaza rezultatul clicurilor executate de utilizator in caseta de validare si butonul radio, actualizand textul afisat de obiectul Label.

Matricea checkbox[]este folosita stocarea casetelor de validare si a butoanelor radio. In constructorul CheckboxExample(), este apelata metoda addComponents(), pentru adaugarea casetelor de validare si a butoanelor radio la fereastra aplicatiei.

Metoda addComponents() plaseaza obiecul Label care urmeaza sa fie actualizat in centrul partii superioare a ferestrei. Apoi, creeaza trei obiecte Panel, doua dintre ele fiind incluse in cel de-al treilea. Ambele panouri de pe nivelul doi sunt configurate sub forma unei grile cu o coloana si trei linii. Cele trei casete de validare sunt plasate intr-un panou, iar cele trei butoane radio in celalalt panou. Pentru organizarea butoanelor radio, este folosit un obiect CheckboxGroup.

Evenimentul ACTION_EVENT, generat in urma validarii sau invalidarii unei casete de catre utilizator, este tratat prin determinarea casetei de validare sau a butonului selectat si afisarea etichetelor asociate acestora, folosind obiectul Label din partea de sus a ferestrei. Incercati programul, pentru a vedea diferenta dintre tratarea butoanelor radio si a casetelor de validare.

Figura 11.8 prezinta fereastra afisata initial de programul CheckboxExample.

Figura 11.8.

Fereastra afisata

initial de programul

CheckboxExample.

Optiuni si liste

Clasa Choice implementeaza o lista de optiuni, din care poate fi selectata una singura. Metodele acestei clase pot fi folosite pentru actualizarea listei si aflarea starii elementelor sale.

Clasa List implementeaza liste din care pot fi selectate una sau mai multe optiuni. Metodele acestei clase pot fi folosite pentru actualizarea elementelor din lista si aflarea starii acestora (selectat sau neselectat). Programul prezentat in listingul 11.9 ilustreaza folosirea claselor Choice si List.

Listingul 11.9. Programul ListExample.


Programul ListExample ilustreaza asemanarile si diferentele dintre clasele List si Choice. Variabilele list, choice si label sunt folosite pentru accesul la componentele corespunzatoare ale interfetei grafice cu utilizatorul (GUI). Ele sunt create si initializate la inceputul sectiunii de descriere a clasei.

Metoda addComponents() adauga un obiect Label in partea de sus a ferestrei si creeaza trei panouri. Variabila panel reprezinta referinta la obiectul Panel principal, din centrul ferestrei aplicatiei. Variabilele panel1 si panel2 sunt referinte la obiectele Panel amplasate in partea stanga, respectiv partea dreapta a zonei acoperite de panoul principal. In panoul din partea stanga este adaugat un obiect Choice, iar in panoul din partea dreapta este adaugat un obiect List.

Metoda handleEvent() este actualizata astfel incat sa trateze evenimentele referitoarea la clasele Choice si List; ea actualizeaza obiecul Label in functie de optiunile selectate de utilizator.

Figura 11.9 prezinta fereastra afisata initial de programul ListExample.

Figura 11.9.

Fereastra afisata

initial de programul

ListExample.

Campuri de tip text si zone de text

Clasa TextField va ofera posibilitatea de a introduce un singur rand de text. Pentru a permite utilizatorilor sa introduca o parola, fara ca aceasta sa fie afisata pe ecran, puteti folosi clasa TextField, care va permite stabilirea unui alt caracter ce va fi afisat pe ecran in locul textului real. Caracterul de inlocuire stabilit mascheaza caracterele introduse de utilizator, fara a afecta datele reale. Multi programatori folosesc caracterul (*) drept caracter de inlocuire. Pentru stabilirea caracterului de inlocuire, folositi metoda setEchoCaracter().

Clasa TextArea va ofera posibilitatea de a introduce mai multe randuri de text. Ea furnizeaza bare de derulare orizontala si verticala, pentru derularea textului introdus.

TextComponent este superclasa claselor TextField si TextArea, furnizand un set de metode comune celor doua clase. Metoda setEditable() permite crearea unor obiecte TextField si TextArea protejate la scriere.

Programul prezentat in listingul 11.10 ilustreaza folosirea claselor TextField si TextArea.

Listingul 11.10. Progamul TextExample.


Programul TextExample creeaza un obiect TextField si un obiect TextArea si le afiseaza in partea de sus si in partea centrala a ferestrei aplicatiei. Atunci cand utilizatorul introduce un text in obiectul TextField si apasa tasta Enter, textul este inserat la inceputul obiectului TextArea.

Clasa TextExample creeaza si initializeaza obiectele TextField si TextArea. Remarcati modul in care este specificat textul care va fi afisat initial in aceste campuri.

Metoda handleEvent() verifica aparitia unui eveniment legat de un obiect TextField, apoi actualizeaza obiectul TextArea cu textul continut de obiectul TextField. Pentru citirea textului din obiectul TextField este folosita metoda getText() din clasa TextComponent. Apoi, metoda insertText() din clasa TextArea insereaza textul la inceputul obiectului TextArea.

Figura 11.10 prezinta fereastra afisata initial de programul TextExample.

Figura 11.10.

Fereastra afisata

initial de programul

TextExample.

Desenarea cu ajutorul claselor Canvas si Graphics

Clasa Canvas asigura posibilitatea afisarii unui obiect Graphics in spatiul unei ferestre. Metoda paint() din clasa Graphics este folosita pentru actualizarea obiectului Graphics, asociat obiectului Canvas. Clasa Graphics este o clasa abstracta, care contine un set de metode pentru desenarea obiectelor si afisarea imaginilor. Accesul la un obiect Graphics se realizeaza prin intermediul metodei paint() din clasele Canvas si Component. Programul prezentat in listingul 11.11 ilustreaza folosirea claselor Canvas si Graphics.

Listingul 11.11. Programul GraphicsExample.


Programul GraphicsExample declara doua subclase ale clasei Canvas: LeftCanvas si RightCanvas. doua obiecte, cate unul pentru fiecare dintre aceste subclase, sunt create si adaugate la fereastra aplicatiei. Acesta este configurata ca un obiect GridLayout, cu o linie si doua coloane. Aceleasi rezultat poate fi obtinut si prin folosirea unor panouri multiple, asa cum ati vazut in exemplu precedent din acest capitol. Metoda paint()din clasa GraphicsExample este definita astfel incat sa apeleze metodele repaint() din clasele LeftCanvas si RightCanvas, ceea ce determina actualizarea zonelor de ecran corespunzatoare.

Clasa LeftCanvas extinde clasa Canvas si foloseste metodele setColor() si fillOval() din clasa Graphics pentru desenarea unui oval de culoarea rosie in obiectul Graphics asociat obiectului LeftCanvas.

Clasa RightCanvas este definita intr-un mod asemanator cu clasa LeftCanvas, dar deseneaza un dreptunghi albastru, in loc de un oval rosu.

Figura 11.11 prezinta fereastra afisata initial de programul GraphicsExample.

Figura 11.11.

Fereastra afisata

initial de programul

GraphicsExample.

Clase geometrice

Biblioteca AWT contine clasele Point, Rectangle, Polygon si Dimension, care permit efectuarea unor operatii cu figuri geometrice. Clasa Point incapsuleaza un punct dintr-un plan bidimensional. Clasa Rectangle reprezinta un dreptunghi, prin precizarea coltului din stanga sus, a inaltimii si a latimii. Clasa Polygon reprezinta un poligon prin doua matrice, una pentru coordonatele x si alta pentru coordonatele y. Clasa Dimension incalpsuleaza dimensiunile unui obiect plan (bidimensional).

Programul pezentat in listingul 11.12 ilustreaza folosirea acestor clasele.

Listingul 11.12. Programul GeometryExample.


Programul GeometryExample creeaza in declaratia clasei mai multe obiecte geometrice: doua obiecte Point, atribuite variabilelor p1 si p2, un obiect Dimension de 50x50 de pixeli, atribuit variabilei dim, un obiect Rectangle, care foloseste obiectul Point desemnat de variabila p2 si obiectul Dimension desemnat de variabila dim si care este atribuit variabilei rect. Apoi, este creat un obiect polygon cu vertexuri de coordonate (150,150), (275,125), (300,50), (350,150), (290,175), (250,250) si (200,350).

Metoda paint() este redefinita, astfel incat sa deseneze obiectele geometrice in obiectul Graphics din fereastra prestabilita a aplicatiei. Metoda paint() deseneaza o linie intre punctele p1 si p2, un obiect Rectangle specificat de variabila rect si un polinom specificat de variabila poly.

Figura 11.12 prezinta fereastra afisata initial de programul GeometryExample.

Figura 11.12.

Fereastra afisata

initial de programul

GeometryExample.

Folosirea fonturilor

Clasa Font incapsuleaza fonturile intr-o maniera independenta de platforma, prin definirea mai multor fonturi independente si maparea lor cu fonturile acceptate de sistemul local de operare si de gestionare a ferestrelor. De asemenea, aceasta clasa defineste constantele care permit afisarea unui obiect Font simplu, aldin (bold), cursiv (italic) sau aldin-cursiv (bold-italic).

Clasa FontMetrics incapsuleaza parametrii de dimensiune ai unui obiect Font. Ea contine metode care returneaza latimea in pixeli a unui caracter sau a unui sir de caractere, precum si metode care returneaza inaltimea, prelungirea superioara (ascent), prelungirea inferioara (descent) si interlinierea (leading), in pixeli pentru un obiect Font. Prelungirea superioara si prelungirea inferioara reprezinta numarul de pixeli cu care un obiect Font depaseste linia de baza, deasupra si dedesubt. Interlinierea reprezinta distanta minima dintre prelungirea inferioara a unui rand de text si prelungirea superioara a randului urmator de text. Inaltimea unui obiect Font este suma valorilor corespunzatoare prelungirii superioare, prelungirii inferioare si interlinierii.

Programul prezentat in listingul 11.13 ilustreaza folosirea claselor Font si FontMetrics.

Listingul 11.13. Programul FontExample.


Programul FontExample creeaza un obiect Font Helvetica de 24 de puncte, bold italic si foloseste obiectul FontMetrics asociat cu acest font pentru a afisa textul in obiectul Graphics prestabilit al ferestrei.

Cea mai mare parte a operatiilor de prelucrare se efectueaza in metoda redefinita paint(). Aceasta creeaza un obiect Font si foloseste metoda getFontMetrics() din clasa Graphics pentru a obtine obiectul FontMetrics asociat fontului. Din acesta, metoda obtine valorile pentru prelungirea superioara, inaltimea si interlinierea fontului.

Variabila baseline este folosita pentru stabilirea coordonatei verticale a primului rand de text. Distanta dintre liniile de baza succesive reprezinta inaltimea fontului.

In fereastra sunt afisate zece randuri de text, pentru a ilustra modul in care toate aceste metode contribuie la afisarea textului intr-un obiect Graphics.

Figura 11.13 prezinta fereastra afisata initial de programul FontExample.

Figura 11.13.

Fereastra afisata

initial de programul

FontExample.

Clase pentru imagini

Clasele Image si Color incapsuleaza imaginile grafice si culorile intr-o maniera independenta de format. Clasele si interfetele din pachetul java.awt.imagine sunt folosite pentru implementarea aplicatiilor de prelucrare a imaginilor. Interfata ImageProducer defineste metodele implementate de clasele care produc informatii despre imagini. Interfata ImageConsumer defineste metodele implementate de clasele care folosesc informatii despre imagini. Interfata ImageObserver defineste metodele si constantele folosite pentru urmarirea operatiei de incarcare a unei imagini.

Clasele ColorModel, DirectColorModel si IndexColorModel sunt folosite pentru implementarea unor modele portabile de culori. Clasele FilteredImageSource, ImageFilter, RGBImageFilter si CropImageFilter va ofera posibilitatea implementarii unor algoritmi de filtrare a imaginilor. Clasele PixelGrabber si MemoryImageSource sunt folosite pentru captarea unei imagini intr-o matrice de memorie si pentru generarea unei imagini din aceasta sursa. Clasa MediaTracker va ofera posibilitatea urmaririi operatiei de incarcare a unei liste de imagini.

Programul prezentat in listingul 11.14 ilustreaza folosirea claselor de imagini prezentate in aceasta sectiune.

Listingul 11.14. Programul ImageExample.


Programul ImageExample incarca fisierul test.gif si il afiseaza in obiectul Graphics prestabilit al ferestrei aplicatiei.

Metoda loadImage() obtine obiectul Toolkit prestabilit al ferestrei aplicatiei si foloseste metoda getImage() din clasa Toolkit pentru a incarca fisierul test.gif in obiectul Image referit de variabila image. Despre clasa Toolkit vom discuta in sectiunea 'Clasa Toolkit si implementarea ferestrelor pe platformele native'.

Desenarea imaginii pe ecran este realizata de metoda paint(). S-ar putea ca in timpul afisarii pe ecran, imaginea sa palpaie. Aceasta se intampla datorita faptului ca programul incearca sa realizeze simultan afisarea imaginii si incarcarea acesteia, la fel cum procedeaza browserele Web pentru afisarea imaginilor. In exemplul din sectiunea urmatoare, veti vedea cum puteti evita aceasta problema, folosind clasa MediaTracker.

Figura 11.14 prezinta fereastra afisata initial de programul ImageExample.

Figura 11.14.

Fereastra afisata

initial de programul

ImageExample.

Folosirea barelor de derulare

Barele de derulare va ofera posibilitarea deplasarii unui obiect care este prea mare pentru a fi afisat intr-o fereastra. Pachetul AWT permite atat folosirea barei de derulare verticala cat si a celei orizontale. Bara de derulare verticala deplaseaza un obiect in sus si in jos pe ecran, iar bara de derulare orizontala deplaseaza obiecul la stanga si la dreapta. Ambele sunt implementate de clasa ScrollBar.

Barele de derulare genereaza evenimente pe baza actiunilor utilizatorului. Acesta poate executa clic pe capetele unei bare de derulare pentru a genera evenimentele SCROLL_LINE_UP si SCROLL_LINE_DOWN, intre cursorul barei de derulare si unul din capete pentru a genera evenimentele SCROLL_PAGE_UP si SCROLL_PAGE_DOWN, sau poate muta cursorul barei de derulare pentru a genera evenimentul SCROLL_ABSOLUTE.

Barele de derulare sunt definite prin parametrii orientation, value, visibile, minimum si maximum. Parametrul orientation indica daca bara de derulare este verticala sau orizontala. Parametrii minimum si maximum specifica valorile minima si maxima asociate barei de derulare. Parametrul value indica valoarea curenta a unei bare de derulare. Parametrul visible specifica dimensiunea zonei vizibile a obiectului derulat.

Programul prezentat in listingul 11.15 ilustreaza folosirea clasei Scrollbar.

Listingul 11.15. Programul ScrollbarExample.


Programul ScroolbarExample incarca si afiseaza o imagine GIF care nu incape in fereastra aplicatiei. Programul foloseste bare de derulare pentru a permite utilizatorului sa deruleze imaginea afisata. Aceasta este incarcata din fisierul bigtest.gif.

Barele de derulare orizontala si verticala sunt create la inceputul declaratiei de clasa. Ele sunt asociate variabilelor horiz si vert. Metoda handleEvent() este actualizata, astfel incat sa urmareasca aparitia unor evenimente legate de barele de derulare si, ca raspuns la aceasta, sa apeleze metoda repaint() pentru redesenarea ecranului.

Metoda paint() este redefinita pentru reafisarea imaginii incarcate, in functie de valorile curente ale barelor de derulare. Acestea sunt obtinute cu ajutorul metodei getValue() din clasa Scrollbar.

Metoda loadImage() foloseste un obiect MediaTracker pentru a forta programul sa astepte incarcarea imaginii, inainte de a efectua alte operatii de prelucrare.

Figura 11.15 prezinta fereastra afisata initial de programul ScrollbarExample.

Figura 11.15.

Fereastra afisata

initial de programul

ScrollbarExample.

Clasa Toolkit si implementarea ferestrelor pentru platforme native

Clasa Toolkit asigura posibilitatea implementarii ferestrelor pe platforme native, prin intermediul interfetelor pereche din pachetul java.awt.peer. De asemenea, clasa contine metode pentru returnarea parametrilor asociati ecranului monitorului.

Programul prezentat in listingul 11.16 ilustreaza folosirea clasei Toolkit.

Listingul 11.16. Programul ToolkitExample.


Programul ToolkitExample ilustreaza folosirea metodelor getScreenResolution() si getScreenSize() din clasa Toolkit. Constructorul ToolkitExample foloseste aceste doua metode pentru a obtine rezolutia ecranului in puncte pe inci (dpi) si dimensiunea de afisare permisa de ecranul monitorului. Acesti parametri sunt afisati prin intermediul unui obiect TextField.

Figura 11.16 prezinta fereastra afisata initial de programul ToolkitExample.

Figura 11.16.

Fereastra afisata

initial de programul

ToolkitExample.

Rezumat

In acest capitol, ati invatat despre clasele si interfetele din setul de instrumente pentru gestionarea ferestrelor (AWT). Ati vazut modul de folosire a acestora in aplicatii independente si miniaplicatii si ati studiat cateva exemple de programe. Din acest moment, puteti folosi clasele si interfetele AWT in propriile programe Java.


Document Info


Accesari: 1643
Apreciat: hand-up

Comenteaza documentul:

Nu esti inregistrat
Trebuie sa fii utilizator inregistrat pentru a putea comenta


Creaza cont nou

A fost util?

Daca documentul a fost util si crezi ca merita
sa adaugi un link catre el la tine in site


in pagina web a site-ului tau.




eCoduri.com - coduri postale, contabile, CAEN sau bancare

Politica de confidentialitate | Termenii si conditii de utilizare




Copyright © Contact (SCRIGROUP Int. 2024 )