Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Curs – 9
AWT
Dupa cum am mai spus AWT reprezinta un set de clase care ne ajuta - printre altele -
sa cream o interfata grafica utilizator care sa reactioneze la datele de intrare primite de
la mouse sau tastatura .
Deoarece Java este un limbaj independent de platforma AWT ofera modalitatea de a
proiecta o interfata care sa fie la fel reprezentata si cu aceleasi caracteristici pe orice
sistem pe care ar rula . Folosind pachetul AWT avem de luat in calcul mai multe
elemente care compun o interfata grafica :
Toate clasele AWT sunt bineinteles incluse in pachetul java.awt . Pentru a le putea
folosi trebuie importat acest pachet explicit la inceputul codului nostru sursa .
Importarea intregului pachet are ca rezultat disponibilizarea pentru programator a
tuturor componentelor , containerelor si administratorilor de dispunere folositi pentru
realizarea unei interfete grafice . O alta modalitate de a putea folosi clasele necesare
este si importarea individuala a claselor necesare .
Acestea sunt pozitionate in cadrul interfetei pe care o construim prin adaugarea lor
intr-un container . Acesta este chiar el o componenta si deci poate fi la randul sau
adaugat in alt container . Cel mai usor mod de a demonstra cum se proiecteaza o
interfata este folosirea containerului cu care am lucrat in ultimele cursuri - clasa
Applet .
ADAUGAREA DE COMPONENTE LA UN CONTAINER
Exista doar doi pasi care trebuie urmati pentru a adauga o componenta la un container
:
Datorita faptului ca un Applet este un container putem folosi metoda add() in cadrul
unui applet pentru a adauga o componenta direct in fereastra Applet .
Fiecare componenta AWT la randul ei este o clasa , deci componenta este creata
propriu-zis prin crearea unui obiect al clasei respective .
De exemplu , clasa Button reprezinta butoanele din cadrul unei interfete grafice . Un
buton se creaza specificand eticheta sa in metoda constructorului , ca mai jos :
add(butonNou);
import java.awt.*;
O eticheta este de fapt cea mai simplista componenta a unei intergete grafice , ea fiind
implementata prin clasa Label . Etichetele se folosesc pentru a identifica rolul
celorlalte componente si nu pot fi modificate direct de utilizator - de fapt reprezinta
niste siruri afisate in dreptul celorlalte componente pentru a ne arata cu ce se ocupa
componenta respectiva .
Folosirea etichetelor pentru text se foloseste in locul metodei drawString() din mai
multe cauze :
Pentru a modifica textul etichetei dupa crearea acesteia putem folosi metoda
setText(sir) ; noul sir dat ca parametru este afisat dupa reimprospatarea componentei .
O alta metoda folositoare este si getText() care ne returneaza valoarea textului
etichetei .
In continuare avem un exemplu de applet in care s-au creat trei etichete ; in codul
sursa apare si un obiect de tip GridLayout - acesta este folosit pentru a putea vedea
efectul alinierii etichetelor . In cazul in care nu l-am fi folosit Java ar fi apelat implicit
administratorul FlowLayout care nu ne-ar mai fi permis sa aliniem etichetele .
Administratorii de dispunere vor fi prezentati mai tarziu detaliat .
import java.awt.*;
BUTOANE
Un buton reprezinta de fapt o zona pe care putem efectua un clic ; el poate fi creat cu
ajutorul clasei Button . In general aceste butoane sunt folosite pentru a declansa o
actiune atunci cand se efectueaza un clic pe suprafata lor .
Ca sa cream un buton trebuie sa urmam una dintre caile urmatoare : fie apelam
constructorul Button() care ne creaza un buton fara nici un text fie apelam
constructorul cu un argument de tip String care este de fapt chiar textul butonului .
Odata creat acest buton ii mai putem modifica textul cu ajutorul metodei setLabel()
sau putem folosi metoda getLabel() pentru a afla textul acestui buton .
import java.awt.*;
CASETE DE VALIDARE
Aceste componente , numite in engleza checkbox , sunt in practica niste casete patrate
care pot fi bifate sau nu cu ajutorul unui clic de mouse . Scopul lor este in general de a
selecta sau deselecta anumite facilitati ale unui program .
In majoritatea cazurilor in care se folosesc casete de validare acestea sunt neexclusive
, adica oricare dintre casete poate avea valoare bifat sau nu , putand deci fi bifate la un
moment dat chiar si toate casetele sau nici una . O alta modalitate de folosire a acestor
casete este si gruparea lor care duce la realizarea asa numitelor butoane radio ;
proprietatea acestora de baza este faptul ca la un moment dat poate fi activ ( bifat )
doar un singur caz , o singura caseta .
Ambele tipuri de casete de validare sunt implementate cu ajutorul clasei Checkbox .
Pentru a crea o caseta de validare neexclusiva putem folosi unul dintre urmatorii
constructori :
import java.awt.*;
In cazul in care dorim sa grupam mai multe casete de validare intr-un grup pentru a
realiza niste butoane radio vom crea un obiect CheckboxGroup :
Checkbox(sir,grupCaseteValidare,boolean)
import java.awt.*;
In cazul in care vrem sa modificam starea de validare a unui buton radio dintr-un grup
putem folosi metoda setCurrent(validare) . Putem folosi si metoda getCurrent() pentru
a intoarce valoarea curenta de bifare a unei casete de validare .
LISTE DE OPTIUNI
Acestea sunt create cu ajutorul clasei Choice si permit alegerea unei singure optiuni
dintr-o lista derulanta pe verticala .
Pentru a crea o astfel de lista trebuie mai intai sa cream un obiect Choice care va
pastra lista propriu-zisa :
import java.awt.*;
public class ListaSelectie extends java.applet.Applet {
Choice lista=new Choice();
Label eticheta=new Label("Echipa care credeti ca va castiga Liga Campionilor in
2002 :");
In cadrul clasei Choice exista mai multe metode folositoare pentru controlul asupra
unei liste de selectie :
CAMPURI DE TEXT
In continuare este prezentat un applet care utilizeaza mai multe campuri de text in clar
si un camp de text care ascunde textul introdus de utilizator :
import java.awt.*;
Clasa TextField are si ea cateva metode foarte des folosite pentru a controla campurile
de text :
ZONE DE TEXT
Aceste componente - numite text area in engleza - sunt de fapt niste campuri de text
care contin mai multe linii ( spre deosebire de campurile de text clasice care apar doar
pe un rand ) . O zona de text poseda si bare de scroll pentru eventualul text care nu
incape in partea vizibila a zonei de text .
Pentru a crea o astfel de zona de text trebuie sa folosim unul dintre cei patru
constructori de mai jos :
import java.awt.*;
In cazul zonelor de text mai trebuie sa mentionam ca ele sunt inrudite cu campurile de
text nu numai din punct de vedere logic ci si ca ierarhie de clase Java ; ambele
componente mostenesc de fapt o clasa numita TextComponent , clasa care de fapt
poseda metodele setText() , getText() , setEditable() si isEditable() si astfel aceste
metode sunt disponibile si clasei TextArea .
Zonele de text poseda si ele unele metode proprii foarte utile :
- metoda insertText(String,int) - insereaza sirul dat ca parametru la pozitia data
de argumentul intreg ; prima valoare a indexului este 0 . OBS. : Incepand cu
Java 2 metoda se recomanda a se inlocui cu metoda insert(String,int) .
- metoda replaceText(String,int,int) - inlocuieste textul aflat intre pozitiile
indicate de argumentele intregi cu sirul dat ca prim argument . OBS. : Si
aceasta metoda are o alta versiune incepand cu Java 2 , si anume metoda
replace(String,int) .
LISTE DERULANTE
1. o lista derulanta poate fi configurata astfel incat sa poata fi selectate mai multe
optiuni
2. aceste liste se prezinta ca o zona de text in care sunt afisate mai multe optiuni
iar daca lista contine mai multe optiuni decat pot fi afisate atunci apare bara de
scroll .
Lista derulanta este definita prin crearea unui obiect List la care apoi se adauga
elementele propriu-zise ale listei . Pentru a realiza acest lucru putem folosi unul dintre
constructorii de mai jos :
import java.awt.*;
BARE DE SCROLL
Componentele numite bare de derulare - scrollbars - sunt cele care permit selectarea
unei valori prin deplasarea unei casete intre doua sageti . Dupa cum am vazut in cazul
componentelor anterioare mai multe dintre acestea au incorporate astfel de bare de
derulare ( de exemplu zonele de text sau listele derulante ) . Clasa Scrollbar este cea
responsabila pentru alte tipuri noi de bare de scroll . O astfel de bara de scroll poate fi
orizontala sau verticala .
Barele de derulare sunt folosite in general pentru a specifica valorile minime si
maxime care pot fi stabilite prin utilizarea componentei .
Pentru a crea o bara de scroll trebuie sa folosim unul dintre constructorii urmatori :
import java.awt.*;
SUPRAFETE DE DESENARE
Aceste componente sunt in general folosite ca loc pentru afisarea de imagini sau
animatii . Bineinteles ca putem desena si pe alte componente - ca de exemplu in
fereastra Applet - insa obiectele Canvas ( aceasta fiind clasa responsabila de
implementarea suprafetelor de desenare ) sunt cele mai simplu de folosit in acest scop
.
Pentru a folosi o suprafata de desenare trebuie mai intai sa cream o subclasa a clasei
Canvas ; aceasta subclasa se poate ocupa de toate operatiunile de desenare care
trebuie sa aiba loc in metoda sa paint() .
Dupa ce s-a creat o subclasa Canvas aceasta poate fi folosita in aplicatia noastra prin
apelarea constructorului sau si prin adaugarea noului obiect Canvas intr-un container .
Pentru a exemplifica teoria de mai sus sa studiem putin applet urmator ; acesta
deseneaza o cruce in centrul ferestrei Applet si poate muta centru acesteia daca
fereastra care publica appletul este redimensionata :
import java.awt.*;
Acest applet contine in codul sau sursa doua clase ; prima dintre ele :- Cruce , este
chiar appletul insusi . A doua clasa este o clasa creata de noi ca fiind o subclasa a
clasei Canvas .
Clasa Cruce creaza un obiect GridLayout care va fi stabilit drept administrator de
dispunere cu ajutorul metodei setLayout() , creaza un obiect de tipul celei de a doua
clase create in applet si apoi adauga acest obiect in containerul desemnat de insasi
fereastra Applet . Datorita folosirii administratorului de dispunere suprafata de
desenare numita "suprafata" va cuprinde de fapt toata suprafata ferestrei appletului .
In cadrul clasei canvasNou se determina mai intai mijlocul ferestrei Applet - lucru
facut dinamic astfel incat totdeauna , indiferent de eventuala redimensionare a
ferestrei , variabilele x si y vor contine coordonatele corecte pentru jumatatea laturilor
ferestrei . Tot aici este setata si culoare pentru desenare , culoarea albastra . Trebuie
atrasa atentia ca aceasta metoda - ca si metodele de desenare propriu-zisa a liniilor ce
compun vrucea - este apelata pentru obiectul de tip Graphics al metodei paint() si nu
pentru suprafata de desenare . Obiectul ecran , de tipul Graphics , se ocupa de toate
eventualele operatii de desenare care au loc pe obiectul suprafata de desenare . Finalul
clasei canvasNou se ocupa de desenarea directa a celor patru linii care formeaza
crucea , fiecare linie avand cate 6 pixeli lungime si terminandu-se la 4 pixeli de
punctul care reprezinta exact centrul ferestrei .