Sunteți pe pagina 1din 25

Cuvinte importante:

- realizarea unei interfete grafice folosind AWT: ierarhii de clase


AWT; clasa Component, clasa Container, clasa Window, clasa Frame, clasa
Pane;
- notiuni de baza despre pozitionarea componentelor interfetei
utilizator: administratori de pozitionare;
- componente AWT elementare: clasa Label, clasa Button, clasa
TexField, clasa TextArea;
- realizarea unei interfete grafice folosind Swing: avantaje Swing;
proiectarea ferestrelor aplicatiei Java- clasa JFrame; folosirea componentelor
elementare Swing.

07/12/21 1
Realizarea unei interfete grafice folosind AWT
Pentru realizarea u nei interfete grafice utilizator pachetul java.awt dispune de
urmatoarea ierarhie de clase:

Object

Component (clasa abstracta)

Container Button Label TextComponent …

Window ScrollPane Panel TextArea TextField

Dialog Frame Applet

Clasa abstracta Component, aflata in radacina arborelui claselor din AWT, defineste
interfata general valabila pentru toate componentele grafice. Obiectele de tip
Component se numesc componente grafice.
Un container (obiect de tip Container) este o componenta care poate contine alte
componente AWT. Exemple de containere sunt: ferestre independente (obiecte de
tip Frame), casete de dialog (obiecte de tip Dialog), fereastra Applet etc.
07/12/21 2
Clasa Container este superclasa tuturor suprafetelor de afisate Java (ferestre
independente, Appleturi etc).
O fereastra AWT (obiect de tip Window) este o suprafata de afisare dreptunghiulara
fara margini si fara bara de meniuri.
Un cadru (obiect de tip Frame) este o fereastra AWT cu margini, titlu si bara de
meniuri.
O fereastra de dialog (obiect de tip Dialog) extinde o fereastra AWT prin adaugarea
de margini si a unui titlu; ea este folosita in principal pentru a prelua informatii de la
utilizator.
O fereastra de defilare (obiect de tip ScrollPane) implementeaza un cadru de
defilare pe orizontala si pe verticala pentru o componenta inclusa in container.
Un panou (obiect de tip Panel) este folosit pentru a grupa mai multe componente
elementare (butoane, casete de text etichete etc).
Un applet este (obiect de tip Applet) extinde un panou AWT si este folosit ca
suprafata de afisare a componentelor elementare ale unei aplicatii Internet de tip
Applet, executate prin intermediul unui browser compatibil Java (ca de exemplu
Internet Explorer sau Netscape).

07/12/21 3
Vom descrie succint fiecare din componentele prezentate in ierarhia de clase AWT.
Clasa Component este o clasa abstracta care deriva din clasa Object si face parte
din pachetul java.awt.
Dintre metodele acestei clase mentionam:
- void setVisible(boolean <b>) afiseaza o componenta daca parametrul
<b> are valoarea true si face componenta invizibila daca parametrul <b> este false;
- void requestFocus() prin care componenta curenta primeste focus-ul
(controlul asupra tastaturii) cu conditia ca ea sa fie vizibila;
- void setBackGround(Color <c>) stabileste culoarea fundalului
componentei conform cu parametrul <c>;
- void setForeGround(Color <c>) stabileste culoarea prim planului
componentei;
- void setFont(Font f) stabileste fontul pentru componenta.

07/12/21 4
Clasa Container face parte din pachetul java.awt.
Constructorul clasei este de forma:
Container()
Dintre metodele acestei clase mentionam:
- Component add(Component <comp>) introduce componenta <comp> in
container;
- void remove(Component <comp>) elimina componenta <comp> din
container;
- void setLayout(LayoutManager <lm>) stabileste modul de pozitionare al
componentelor interfetei in container, corespunzator parametrului <lm>. Vom reveni
la modalitatile de dispunere a componentelor interfetei mai tarziu in aceasta lectie;
- Insets getInsets() - determina distanta rezervata pentru marginile
suprafetei de afisare;
- void validate() - forteaza containerul sa reaseze toate componentele sale;
aceasta metoda trebuie apelata explicit atunci cand adaugam sau eliminam
componente pe suprafata de afisare dupa ce aceasta a devenit vizibila.
07/12/21 5
Clasa Frame face parte din pachetul java.awt.
Dintre constructorii clasei mentionam:
- Frame() creaza o fereastra cu margini, titlu si bara de meniuri dar care nu
are precizat nici un text in titlu;
- Frame(String <titlu>) creaza o fereastra cu margini, titlu si bara de
meniuri care are inscris in titlu textul dat de parametrul <titlu>.
Prezentam o metoda a clasei Frame des intalnita:
- void setTitle(String <titlu>) stabileste textul care apare in titlul ferestrei.
- void pack() este mostenita de la clasa Window; metoda redimensioneaza
fereastra la cea mai mica dimensiune posibila, tinand cont de dimensiunile curente
ale componentelor sale, de modul de asezare a componentelor sale si de insertiile de
margini sau intre componente stabilite; trebuie apelata dupa adaugarea tuturor
componentelor pe suprafata ferestrei.
Clasa Panel care face parte din pachetul java.awt are doi constructori:
- Panel()
- Panel(LayoutManager <lm>) stabileste modul de pozitionare al
componentelor interfetei in panel, corespunzator parametrului <lm>.
07/12/21 6
Notiuni de baza despre pozitionarea componentelor interfetei utilizator
Pentru a avea mai mult control asupra aspectului interfetei, programatorul care
lucreaza cu AWT poate folosi administratorii de pozitionare (layout managers). Un
administrator de dispunere determina modul cum vor fi aranjate (pozitionate)
componentele adaugate intr-un container.
Cativa dintre acesti administratori de pozitionare corespund claselor din urmatoarea
ierarhie din pachetul java.awt:
LayoutManager (interfata)
FlowLayout (clasa a superclasei Object)
GridLayout (clasa a superclasei Object)
LayoutManager2 (interfata)
CardLayout (clasa a superclasei Object)
BorderLayout (clasa a superclasei Object)
GridBagLayout (clasa a superclasei Object)

07/12/21 7
Pentru a crea un administrator de pozitionare pentru un container, se creaza o instanta
a clasei administratorului folosind o instructiune de genul:
GridLayout glo = new GridLayout();
Dupa crearea administratorului de pozitionare, acesta va fi declarat drept
administrator de pozitionare pentru container folosind metoda setLayout() a acestuia:
setLayout(glo);
Nota: Administratorul de pozitionare trebuie stabilit inainte de a adauga, folosind
metoda add(), componentele in container.
Vom descrie succint cativa dintre administratorii de pozitionare mai des folositi.
Pozitionarea secventiala a componentelor
FlowLayout este cea mai simpla clasa de administrare a pozitionarii componentelor.
Ea aranjeaza componentele intr-o maniera asemanatoare dispunerii cuvintelor intr-o
pagina – de la stanga la dreapta pana la capatul randului, apoi in continuare pe randul
urmator.

07/12/21 8
Pozitionarea tabelara a componentelor
Administratorul de pozitionare tabelara (GridLayout) aranjeaza componentele intr-un
tabel format din randuri si coloane. Componentele sunt asezate incepand cu celula
aflata cel mai in stanga pe primul rand al tabelului si continuand spre dreapta. Dupa
completarea tuturor celulelor de pe primul rand se continua cu cel de-al doilea rand,
de la stanga la dreapta, si asa mai departe.
Pozitionare marginala
Pozitionarea marginala (BorderLayout) imparte un container in cinci sectiuni: nord,
sud, est, vest si centru. Acest aranjament are ca rezultat o componenta centrala de
dimensiuni mari, inconjurata de patru componente de dimensiuni mai mici.
Pozitionare tabelara neproportionata
Pozitionarea tabelara neproportionata (GridBagLayout) reprezinta o extensie a
dispunerii tabelare. O pozitionare tabelara neproportionata difera de o dispunere
tabelara simpla prin urmatoarele:
- o componenta poate ocupa mai multe celule ale tabelului;
- proportiile intre diferitele randuri sau coloane nu trebuie sa fie aceleasi;
- componentele dispuse in cadrul celulelor pot fi aranjate in diferite moduri.
07/12/21 9
Componente AWT elementare
Componentele elementare (numite si controale grafice) permit interactiunea cu
utilizatorul si realizarea (prin modul lor de asezare si aspectul lor) unei interfete
“prietenoase” in dialogul cu acesta.
Componentele elementare pot fi adaugate containerelor. Fie C un container si comp
o componenta elementara. Adaugarea lui comp in C se realizeaza astfel:
- se creaza componenta comp;
- se apeleaza metoda add(), declarata in clasa Container, pentru
componenta comp:
C.add(comp);
Atunci cand se adauga o componenta intr-un container, nu se specifica
coordonatele x, y ale locului unde va fi plasata aceasta. De aranjamentul
componentelor se ocupa administratorul de dispunere (layout manager) care
apartine containerului respectiv.
Vom descrie cateva componente elementare mai des folosite: etichete (Label),
butoane (Button), campuri de text (TextField) si zone de text (TextArea).

07/12/21 10
Etichete
Etichetele sunt create folosind clasa Label. E.tichetele sunt texte care pot fi afisate pe
suprafata de afisare dar nu pot fi modificate de utilizator
Clasa Label are urmatorii constructori:
- Label() creaza o eticheta cu text vid;
- Label(String <text>) creaza o eticheta cu textul, specificat in parametrul
<text>, aliniat la stanga.
Dintre metodele clasei Label, mai des folosite sunt:
- void setText(String <text>) scrie un text, specificat in parametrul <text>,
pe eticheta;
- String getText() returneaza textul asociat etichetei;
- void setAlignment(int i) seteaza aliniere textului in eticheta (precizand
pentru argument una din constantele clasei). Alinierea implicita este la stanga.

07/12/21 11
Butoane
Butoanele sunt create folosind clasa Button. Butoanele sunt folosite intr-o interfata
pentru a declansa o anumita actiune.
Clasa Button are urmatorii constructori:
- Button() creaza un buton care nu contine nici un text pentru explicarea
functiei sale;
- Button(String <eticheta>) creaza un buton pe care este afisat sirul de text,
specificat in parametrul <eticheta>.
Dintre metodele clasei Button, mai des folosite sunt:
- void setLabel(String <eticheta>) scrie sirul de text, specificat in
parametrul <eticheta>, pe buton;
- String getLabel() returneaza eticheta inscrisa pe buton;

07/12/21 12
Campuri si arii de text
Campurile si ariile de text sunt create folosind clasele TextField si TextArea. Textele
sunt folosite intr-o interfata pentru a crea zone in care textul poate fi modificat de
utilizator. Aceste doua clase au ca superclasa TextComponent.
Clasa TextField are mai multi constructori dintre care mentionam:
- TextField() creaza un camp de text care nu contine nici un text;
- TextField(String <text>) creaza un camp de text completat cu sirul de
text, specificat in parametrul <text>.
Dintre metodele clasei TextField, mai des folosite sunt:
- void setText(String <text>) scrie sirul de text, specificat in parametrul
<text>, in camp;
- String getText() returneaza textul continut de camp;
- void setEditable(boolean <b>) determina daca acel camp de text poate fi
modificat. Un parametru cu valoarea false impiedica editarea campului, iar valoarea
true o permite (aceasta este prestabilita).
- boolean isEditable() returneaza o valoare de tip boolean prin care se
indica daca acel camp poate fi editat (true) sau nu (false).
07/12/21 13
Obiectele de tip TextArea se deosebesc de obiectele TextField prin aceea ca ele
contin mai multe linii de text. Zonele de text poseda bare de defilare orizontale si
verticale, care permit utilizatorului sa parcurga intregul text continut in componenta.
Clasa TextArea are mai multi constructori dintre care mentionam:
- TextArea() creaza o arie de text care nu contine nici un text, cu inaltimea
si latimea nespecificate;
- TextArea(String <text>) creaza o arie de text completata cu sirul de text,
specificat in parametrul <text>, cu inaltimea si latimea nespecificate.
Dintre metodele clasei TextArea, mai des folosite sunt:
- void setText(String <text>), String getText(), void setEditable(boolean
<b>), boolean isEditable() prezentate la clasa TextField;
- void setRows (int <m>) stabileste numarul de linii ale ariei de text
conform cu parametrul <m>;
- void setColumns (int <n>) stabileste numarul de coloane ale ariei de text
conform cu parametrul <n>;

07/12/21 14
- void insert(String <str>, int <poz>) insereaza textul <str> la pozitia
<poz> din aria de text;
- void replaceRange(String <str>, int <p>, int <u>) inlocuieste textul
dintre pozitiile <p> si <u> cu testul <str>.

Realizarea unei interfete grafice folosind Swing


Tehnologia Swing face parte din proiect numit JFC (Java Foundation Classes) care
pune la dispozitie, dezvoltatorilor de aplicatii Java o serie intreaga de facilitati pentru
scrierea de aplicatii cu o interfata grafica mult imbunatatita functional si estetic fata
de vechiul model AWT.
Avantaje Swing
Swing permite unui program Java sa-si modifice aspectul si comportarea (“look and
feel”) sub actiunea unui program sau chiar a utilizatorului. Astfel, Swing permite
crearea unui program Java cu o interfata utilizator care foloseste stilul sistemului de
operare nativ – cum ar fi Windows sau Solaris – sau un stil propriu Java, care a fost
denumit “Metal”.
Componentele Swing sunt implementate in intregime in Java. Aceasta are ca rezultat
o mai buna compatibilitate cu platforme diferite decat in cazul folosirii
componentelor AWT. Toate componentele Swing fac parte din pachetul javax.swing.

07/12/21 15
Proiectarea ferestrelor aplicatiei cu Swing
Modul de folosire a unei componente Swing nu este diferit de cel al folosirii
componentelor AWT. Toate componentele Swing sunt subclase ale clasei
JComponent.

Object (din pachetul java.lang)

Component (clasa abstracta, din pachetul java.awt)

Container (din pachetul java.awt)

Jcomponent (clasa abstracta, din pachetul javax.swing)

Pentru a fi afisate pe ecran, componentele grafice, ale unei aplicatii care foloseste o
interfata Swing, trebuie plasate pe o suprafata de afisare, numit “container radacina”.
“Containerul radacina” este reprezentat de una din clasele JFrame, JDialog sau
JApplet.

07/12/21 16
Vom face cateva consideratii asupra modului de folosire a clasei JFrame. Clasa
JFrame este o extensie a clasei Frame si poate fi folosita intr-un mod asemanator,
totusi, cu cateva deosebiri.
Orice aplicatie Java cu interfata Swing contine cel putin un “container radacina”
reprezentat de fereastra principala a programului, instanta a clasei JFrame. Un obiect
care reprezinta o fereastra Swing contine o zona care este rezervata barei de meniuri
si care este situata in partea sa superioara si corpul ferestrei pe care vor fi plasate
componentele sale. Corpul ferestrei este o instanta a clasei Container ce poate fi
obtinuta cu metoda getContentPane() (metoda a clasei JFrame). Plasarea si
aranjarea componentelor pe suprafata ferestrei se va face folosind obiectul de tip
Container si nu direct fereastra de tip JFrame.
Spre deosebire de Frame, un obiect JFrame are un comportament implicit la
inchiderea ferestrei, care consta in ascunderea ferestrei atunci cand utilizatorul apasa
butonul de inchidere (din coltul dreapta sus). Acest comportament poate fi modificat
prin apelarea metodei setDefaultCloseOperation() (metoda a clasei JFrame) care
primeste ca parametru diverse constante ce se gasesc in clasa WindowConstants.

07/12/21 17
Constantele folosite ca parametru pentru metoda setDefaultCloseOperation() sunt:
-DO_NOTHING_ON_CLOSE (definita in WindowConstants) – nu se intampla
nimic, ci numai solicita programului sa trateze, in metoda windowClosing(),
evenimentele interceptate cu un interceptor de tip WindowListener;
-HIDE_ON_CLOSE (definita in WindowConstants) – inchide automat fereastra
dupa invocarea si interceptarea unui obiect de tip WindowListener;
-EXIT_ON_CLOSE (definita in WindowConstants) – termina aplicatia folosind
metoda System.exit().
Valoarea implicita este: HIDE_ON_CLOSE.
Daca se foloseste mediul de programare NetBeans, codul pentru apelul
metodelor getContentPane si setDefaultCloseOperation se genereaza
automat in metoda initComponents() a constructorului ferestrei de tip JFrame,
ca in secventa de mai jos:

07/12/21 18
public class TestInterfataSwing extends javax.swing.JFrame {
/** Creates new form TestInterfataSwing */
public TestInterfataSwing() {
initComponents();
}
private void initComponents() {
jButton1 = new javax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jButton1.setText("Calcul Medie");
org.jdesktop.layout.GroupLayout layout = new
org.jdesktop.layout.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(layout.createSequentialGroup()
.add(161, 161, 161)
.add(jButton1)
07/12/21 19
.addContainerGap(148, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(org.jdesktop.layout.GroupLayout.TRAILING, layout.createSequentialGroup()
.addContainerGap(249, Short.MAX_VALUE)
.add(jButton1)
.add(28, 28, 28))
);
pack();
}
// Variables declaration - do not modify
private javax.swing.JButton jButton1;
// End of variables declaration
}

07/12/21 20
Folosirea componentelor elementare Swing
Deoarece clasa JComponent extinde clasa Container, ea mosteneste functionalitatea
generala a containerelor si componentelor AWT, furnizand bineınteles si o serie
intreaga de noi facilitati.
Dintre facilitatile oferite de clasa Jcomponent mentionam:
-Asocierea de “ToolTips” (informatii ajutatoare dependente de context). Folosind
metoda setToolTip() poate fi atasat unei componente un text cu explicatii legate de
componenta respectiva. Cand utilizatorul trece cu mouse-ul deasupra componentei
va fi afisat, pentru o perioada de timp, textul ajutator specificat.
- Stabilirea de chenare. Orice componenta Swing poate avea unul sau mai multe
chenare. Specificarea unui chenar se realizeaza cu metoda setBorder().
- Extinderea suportului pentru pozitionarea si dimensionarea componentelor.
Folosind metodele setPreferredSize(), setMinimumSize(), setMaximumSize(),
setAlignmentX(), setAlignmentY() pot fi controlati parametrii folositi de
gestionarii de pozitionare pentru plasarea si dimensionarea automata a
componentelor in cadrul unui container.

07/12/21 21
- Stabilirea de secvente de taste de accelerare. O secventa de taste de accelerare (key
accelerator), denumita si secventa de prescurtare (keyboard mnemonic), reprezinta o
grupare de taste care poate fi folosita pentru a controla comportamentul unei
componente a interfetei utilizator. Aceste taste permit folosirea unei aplicatii fara
ajutorul mouse-ului.
Toate componentele elementare AWT se regasesc si in Swing. In majoritatea
cazurilor, constructorii componentelor Swing sunt similari constructorilor AWT.
Toate clasele corespunzatoare componentelor elementare din AWT au acelasi nume
in Swing dar precedat de litera “J”, cum ar fi: JButton, JTextField, JLabel, JTextArea
etc.
Casete de dialog standard pentru afisare de mesaje si introducere de date de la
tastatura
Clasa JOptionPane ofera mai multe metode care pot fi folosite pentru a crea casete de
dialog standard: mici ferestre in care se afiseaza un scurt mesaj sau se introduc date
de la tastatura.
Casetele de dialog standard sunt de patru tipuri:
- ConfirmDialog – o caseta de dialog care pune o intrebare si contine trei butoane:
Yes, No, Cancel;
- InputDialog - o caseta de dialog care asteapta introducerea unui text;
07/12/21 22
- MessageDialog - o caseta de dialog care afiseaza un mesaj;
- OptionDialog - o caseta de dialog care cuprinde toate celelalte trei tipuri.
Pentru crearea uneia din cele patru tipuri de casete de dialog se foloseste metoda
show<tip_caseta>() in care <tip_caseta> specifica unul din tipurile de casete
prezentate mai sus.
Crearea casetelor de dialog de confirmare
Crearea casetelor de dialog de confirmare se realizeaza cu metoda:
showConfirmDialog(<componenta_parinte>, <mesaj_afisat>, <titlu_casetei>,
<buton_afisat>, <pictograma_afisata>)
unde:
-<componenta_parinte> - specifica containerul care va fi considerat parintele
casetei de dialog; aceasta informatie este folosita pentru a determina unde se va
afisa pe ecran fereastra de dialog; daca se foloseste valoarea null pentru acest
argument sau containerul nu este un obiect Frame, caseta de dialog va fi afisata in
centrul ecranului.
-<mesaj_afisat> - specifica sirul de text care va fi afisat in caseta;
-<titlul_casetei> - specifica un sir de text care va fi afisat pe bara de titlu;
07/12/21 23
-<buton_afisat> - specifica ce butoane vor fi afisate in caseta, pe baza constantelor:
YES_NO_CANCEL_OPTION sau YES_NO_OPTION;
-<pictograma_afisata> - specifica tipul pictogramei afisata in caseta care determina
tipul casetei de dialog, pe baza constantelor: ERROR_MESSAGE,
INFORMATION_MESSAGE, PLAIN_MESSAGE, QUESTION_MESSAGE.
Metoda returneaza un intreg care reprezinta una din cele trei valori posibile:
YES_OPTION, NO_OPTION, CANCEL_OPTION.
De exemplu:
int raspuns = JOptionPane.showConfirmDialog(null, “Pot sa adaug o inregistrare in
fisierul dvs.”);
Crearea casetelor de dialog de intrare
Crearea casetelor de dialog de intrare se realizeaza cu metoda:
showInputDialog(<componenta_parinte>, <mesaj_afisat>, <titlu_casetei>,
<pictograma_afisata>)
Metoda returneaza un sir care reprezinta raspunsul utilizatorului.

07/12/21 24
De exemplu:
String raspuns = JOptionPane.showInputDialog(this, "Introduceti un numar",
"Introducere de date", JOptionPane.INFORMATION_MESSAGE);

07/12/21 25