Sunteți pe pagina 1din 81

UNIVERSITATEA TEHNICĂ “GH.

ASACHI” DIN IAŞI


FACULTATEA DE ELECTRONICĂ, TELECOMUNICAŢII ŞI TEHNOLOGIA INFORMAŢIEI

Programare Java

IV. Interfața grafică cu utilizatorul


-AWT-

2020
Interfața grafică cu utilizatorul
Cuprins
FACULTATEA DE ELECTRONICĂ, TELECOMUNICAŢII ŞI TEHNOLOGIA INFORMAŢIEI

1. Introducere
2. AWT – generalități
3. Clasa Component
UNIVERSITATEA TEHNICĂ “GH. ASACHI” DIN IAŞI

4. Clasa Container
5. Layout Manager
6. Clasa Panel
7. Evenimente generate de componente
8. Componente de tip ferestre
9. Componente AWT de lucru cu meniuri
10. Componente AWT simple
Interfața grafică cu utilizatorul
1. Introducere
FACULTATEA DE ELECTRONICĂ, TELECOMUNICAŢII ŞI TEHNOLOGIA INFORMAŢIEI

➢ Interfața grafică cu utilizatorul (GUI- Graphical User Interface) se referă la


tipurile de comunicare vizuală între un program și utilizator.
UNIVERSITATEA TEHNICĂ “GH. ASACHI” DIN IAŞI

GUI – este formată din ferestre, acestea conţin elemente grafice de control
(widgets) care permit interacţiunea cu utilizatorul.
➢ Limbajul Java pune la dispoziția programatorului trei API-uri pentru
realizarea unei interfețe grafice: AWT, Swing și JavaFX.
AWT (Abstract Windowing Toolkit) API – a fost introdusă în JDK 1.0
Swing – face parte din Java Foundation Classes (apare cu Java 2) și
introduce noi componente în vederea dezvoltării de interfețe grafice mai
evoluate.
Interfața grafică cu utilizatorul
1. Introducere
FACULTATEA DE ELECTRONICĂ, TELECOMUNICAŢII ŞI TEHNOLOGIA INFORMAŢIEI

JavaFX – integrată în JDK 8, pentru a înlocui Swing.


În afara acestor API-uri din JDK, alte organizații pun la dispoziție propriile
API-uri pentru Java, cum ar fi Eclipse's Standard Widget Toolkit (SWT) (
UNIVERSITATEA TEHNICĂ “GH. ASACHI” DIN IAŞI

folosită în Eclipse), Google Web Toolkit (GWT) (folosită în Android), 3D


Graphics API cum ar fi Java bindings pentru OpenGL (JOGL) și Java3D.
Pentru JDK API:
https://docs.oracle.com/javase/9/docs/api/overview-summary.html
Pentru programarea grafică 2D:
https://docs.oracle.com/javase/tutorial/2d/index.html
Interfața grafică cu utilizatorul
2. AWT – generalități
Abstract Windows Toolkit (AWT)
FACULTATEA DE ELECTRONICĂ, TELECOMUNICAŢII ŞI TEHNOLOGIA INFORMAŢIEI

➢ este utilă pentru dezvoltarea de interfețe grafice simple.


➢ cuprinde 12 pachete cu 370 clase
➢ cele mai utilizate pachete sunt java.awt și java.awt.event
UNIVERSITATEA TEHNICĂ “GH. ASACHI” DIN IAŞI

➢Pachetul java.awt conține clasele grafice AWT principale:


▪ Clasele GUI Component, de ex: Button, TextField, Label.
▪ Clasele GUI Container, de ex: Frame, Panel.
▪ Managerii de layout, de ex FlowLayout, BorderLayout și GridLayout.
▪ Clasele grafice personalizate, de ex Graphics, Color și Font.
➢ Pachetul java.awt.event conține clasele pentru gestionarea evenimentelor:
▪ Clasele Event, de ex: ActionEvent, MouseEvent, KeyEvent, WindowEvent.
▪ Interfețele Event Listener, de ex: ActionListener, MouseListener,
MouseMotionListener, KeyListener și WindowListener.
▪ Clasele Event Listener Adapter, de ex: MouseAdapter, KeyAdapter și WindowAdapter
Interfața grafică cu utilizatorul
2. AWT – generalități
Componentele grafice AWT sunt derivate din clasa Component- o clasă abstractă care
defineşte interfaţa general valabilă pentru toate componentele grafice. Pentru crearea
FACULTATEA DE ELECTRONICĂ, TELECOMUNICAŢII ŞI TEHNOLOGIA INFORMAŢIEI

meniurilor se foloseşte clasa abstractă MenuComponent.


UNIVERSITATEA TEHNICĂ “GH. ASACHI” DIN IAŞI

Ierarhia de clase AWT


Interfața grafică cu utilizatorul
2. AWT – generalități
➢ Crearea obiectelor grafice nu realizează automat și afișarea lor pe ecran. Mai întâi ele trebuie
FACULTATEA DE ELECTRONICĂ, TELECOMUNICAŢII ŞI TEHNOLOGIA INFORMAŢIEI

așezate pe o suprafață de afișare, care poate fi o fereastră sau un applet, și vor deveni vizibile în
momentul în care suprafața pe care sunt afisate va fi vizibilă, numită container și reprezintă o
instanță a unei clase derivate din Container. Clasa Container este o subclasă aparte a lui
Component, fiind la rândul ei superclasa tuturor suprafețelor de afișare Java.
UNIVERSITATEA TEHNICĂ “GH. ASACHI” DIN IAŞI

➢ Există două tipuri de elemente GUI:


1.Component: Componentele sunt entități GUI elementare, cum ar fi Button, Label, și TextField.
Prin componentă vom înţelege orice obiect care poate avea o reprezentare grafică şi care poate
interacţiona cu utilizatorul. Componentele GUI se mai numesc controale (de ex, Microsoft ActiveX
Control), widget-uri (de ex, Eclipse's Standard Widget Toolkit, Google Web Toolkit), care permit
utilizatorului să interaționeze (controleze) cu apilcația. Exemple de componente: ferestre, butoane,
liste, bare de defilare, arii de text etc.
2.Container: Containerele, cum sunt Frame și Panel, sunt folosite pentru a conține componentele,
așezate după un anumit layout (de ex FlowLayout sau GridLayout). Un container poate conține sub-
containere.
Interfața grafică cu utilizatorul
2. AWT – generalități
FACULTATEA DE ELECTRONICĂ, TELECOMUNICAŢII ŞI TEHNOLOGIA INFORMAŢIEI
UNIVERSITATEA TEHNICĂ “GH. ASACHI” DIN IAŞI

În figura de mai sus sunt 3 containere: un Frame și două Panel.


Un Frame este un container de nivel superior din cadrul unui program AWT.
Un Frame are o bară de titlu (conține o imagine, un titlu și butoane de
minimizare/maximizare/închidere), iar opțional poate avea o bară de meniuri și o
suprafață de afișare a conținutului.
Un Panel este o suprafață dreptunghiulară ce este folosită pentru a grupa componente
GUI similare în cadrul unui layout. În figura de mai sus, Frame-ul conține două Panel-
uri. Sunt prezente cinci componente: un Label (pentru descriere), un TextField (pentru
a permite utilizatorului să introducă text) și trei Button (pentru anumite acțiuni din
partea utilizatorului).
Interfața grafică cu utilizatorul
2. AWT – generalități
Suprafețe de afișare:
FACULTATEA DE ELECTRONICĂ, TELECOMUNICAŢII ŞI TEHNOLOGIA INFORMAŢIEI

❖Container - este superclasa tuturor suprafețelor de afișare Java.


Obiectele grafice trebuie plasate pe o suprafață de afișare (fereastră, applet),
devenind vizibile în momentul în care suprafața pe care sunt afișate este vizibilă.
UNIVERSITATEA TEHNICĂ “GH. ASACHI” DIN IAŞI

Suprafața se mai numește container. Orice container are o metodă numită


add(Component c).
Exemple de containere:
AWT Swing
• Panel •JPanel
• Frame • JFrame
• Applet • JApplet
• Window • JWindow
Gestionari de poziționare:
❖LayoutManager
De gestionarea ferestrei și plasarea componentelor într-o anumită ordine pe
suprafața ei se ocupă un obiect asociat fiecărui container și care se numește
gestionar de poziționare.
Interfața grafică cu utilizatorul
2. AWT – generalități
Evenimente:
FACULTATEA DE ELECTRONICĂ, TELECOMUNICAŢII ŞI TEHNOLOGIA INFORMAŢIEI

❖ AWTEvent

O componentă grafică poate genera evenimente: apăsarea unui buton,


UNIVERSITATEA TEHNICĂ “GH. ASACHI” DIN IAŞI

modificarea textului, închiderea unei ferestre etc.

Evenimentele sunt instanțe ale claselor derivate din AWTEvent.

Interceptarea evenimentelor generate de componentele unui program se

realizează prin intermediul unor clase de tip listener (ascultător,

consumator de evenimente). Aceste clase sunt definite în pachetul

java.awt.event.
Interfața grafică cu utilizatorul
2. AWT – generalități
Exemplu: o fereastră cu un buton
FACULTATEA DE ELECTRONICĂ, TELECOMUNICAŢII ŞI TEHNOLOGIA INFORMAŢIEI

import java.awt.*;
class Interfata extends Frame
{ public Interfata(String s)
{ //creare fereastra
Frame f = new Frame (s);
setBackground(Color.green);
UNIVERSITATEA TEHNICĂ “GH. ASACHI” DIN IAŞI

//setare mod de dispunere a componentelor


setLayout(new FlowLayout());
//creare buton
Button buton1 = new Button("apasa-ma");
//adaugare buton
add(buton1);
}
}
public class ExempluGUI
{ public static void main(String[] args)
{ Interfata ecran = new Interfata("Fereastra");
ecran.setSize(500,100);
ecran.setVisible(true);
}
}
Interfața grafică cu utilizatorul
3. Clasa Component
Componente grafice
FACULTATEA DE ELECTRONICĂ, TELECOMUNICAŢII ŞI TEHNOLOGIA INFORMAŢIEI

Componentele AWT sunt definite de clase din pachetul java.awt, aceste clase

au ca superclasă clasa Component.


UNIVERSITATEA TEHNICĂ “GH. ASACHI” DIN IAŞI

❖ Button – butoane cu eticheta formată dintr-un text pe o singură linie.

❖ Canvas – suprafață de desenare.

❖ Checkbox – căsuţă de opţiuni, componentă ce poate avea două stări

(pentru a grupa mai multe obiecte de acest tip există clasa CheckBoxGroup).

❖ Choice – liste de opţiuni cu alegere unică.


Interfața grafică cu utilizatorul
3. Clasa Component
Componente grafice
FACULTATEA DE ELECTRONICĂ, TELECOMUNICAŢII ŞI TEHNOLOGIA INFORMAŢIEI

❖Container – superclasa tuturor suprafețelor de afișare.

❖ Label – etichete simple ce pot conține o singură linie de text needitabil.


UNIVERSITATEA TEHNICĂ “GH. ASACHI” DIN IAŞI

❖ List – liste de opţiuni cu selecție simplă sau multiplă.

❖ Scrollbar – bare de defilare orizontale sau verticale.

❖ TextComponent – superclasa componentelor pentru editarea textului.

-TextField – text pe o singură linie. (câmp de text)

-TextArea – text pe mai multe linii. (arie de text)


UNIVERSITATEA TEHNICĂ “GH. ASACHI” DIN IAŞI

FACULTATEA DE ELECTRONICĂ, TELECOMUNICAŢII ŞI TEHNOLOGIA INFORMAŢIEI

3. Clasa Component
Interfața grafică cu utilizatorul
Interfața grafică cu utilizatorul
3. Clasa Component
Metode ale clasei Component
FACULTATEA DE ELECTRONICĂ, TELECOMUNICAŢII ŞI TEHNOLOGIA INFORMAŢIEI

➢ public String getName( )


➢ public void setName(String name)
-pentru determinarea/stabilirea numelui componentei.
UNIVERSITATEA TEHNICĂ “GH. ASACHI” DIN IAŞI

➢ public boolean isVisible( )


➢ public void setVisible (boolean b)
-verifică/setează proprietatea de vizibilitate a unei componente. Componentele de tip
fereastră sunt inițial invizibile, de aceea după crearea unei ferestre e nevoie de apelul
metodei setVisible(true) pentru a o face vizibilă.
➢public boolean isEnabled( )
➢ public void setEnabled(boolean b)
-verifică/setează proprietatea legată de activarea componentei. Doar în cazul în care este
activă, o componentă poate răspunde la acțiunile utilizatorului asupra ei și poate genera
evenimente.
Interfața grafică cu utilizatorul
3. Clasa Component
Metode ale clasei Component
FACULTATEA DE ELECTRONICĂ, TELECOMUNICAŢII ŞI TEHNOLOGIA INFORMAŢIEI

➢public Color getBackground( )


➢ public void setBackground (Color c)
-Returnează/setează culoarea de fond a componentei. Clasa Color permite lucrul cu
UNIVERSITATEA TEHNICĂ “GH. ASACHI” DIN IAŞI

culorile într-un format RGB.


➢public Color getForeground( )
➢ public void setForeground (Color c)
-Returnează/setează culoarea cu care se desenează componenta.
➢public Font getFont( )
➢ public void setFont (Font f)
- Returnează/setează tipul de font utilizat pentru afișarea caracterelor. Clasa Font este
utilizată pentru lucrul cu diferite tipuri de fonturi utilizate pentru afișare. Un obiect de tip
Font conține o serie de caracteristici ale fontului (dimensiune, stil, bold, italic etc.)
Interfața grafică cu utilizatorul
3. Clasa Component
Metode ale clasei Component
FACULTATEA DE ELECTRONICĂ, TELECOMUNICAŢII ŞI TEHNOLOGIA INFORMAŢIEI

➢public Point getLocation( )


➢ public void setLocation( int x, int y)
➢ public void setLocation(Point p)
-returnează/setează poziția (coordonatele) componentei relativ la coordonatele colțului
UNIVERSITATEA TEHNICĂ “GH. ASACHI” DIN IAŞI

stânga-sus a componentei părinte (componenta container în care se află). Clasa Point


este o clasă asociată unui punct.
➢public Point getLocationOnScreen( )
-Returnează coordonatele componentei relativ la colțul stânga-sus al ecranului.
➢ public Dimension getSize( )
➢ public void setSize(int width, int height)
➢ public void setSize(Dimension d)
-determină/setează dimensiunile componentei. Clasa Dimension grupează dimensiunile
lățime și înălțime într-un singur tip de date și conține două atribute publice width și
height prin care cele două dimensiuni pot fi accesate din exteriorul clasei.
Interfața grafică cu utilizatorul
3. Clasa Component
public Rectangle getBounds( )
FACULTATEA DE ELECTRONICĂ, TELECOMUNICAŢII ŞI TEHNOLOGIA INFORMAŢIEI

➢ public void setBounds(int x, int y, int width, int height)


➢ public void setBounds(Rectangle r)
-determină/setează marginile componentei. Aceasta implică atât poziția componentei cât și
dimensiunea ei. Clasa Rectangle definește atât dimensiunile (width, height) cât și poziția
UNIVERSITATEA TEHNICĂ “GH. ASACHI” DIN IAŞI

colțului stânga sus (x,y) a formei rectangulare. Poziția este relativă la componenta părinte.
➢ public boolean getCursor( )
➢ public void setCursor(Cursor c)
-returnează/setează forma cursorului. Java permite o serie de tipuri de cursor, definite prin
constantele din clasa Cursor (DEFAULT_CURSOR, CROSSHAIR_CURSOR, TEXT_CURSOR,
WAIT_CURSOR, HAND_CURSOR)
➢ public void list( )
➢ public void list(PrintStream out)
➢ public void list(PrintWriter out)
- afișează o serie de informații legate de componentă la consola standard sau la alte stream-
uri.
Interfața grafică cu utilizatorul
4. Clasa Container
Suprafețe de afișare
FACULTATEA DE ELECTRONICĂ, TELECOMUNICAŢII ŞI TEHNOLOGIA INFORMAŢIEI

- reprezintă suprafețe pe care sunt plasate componentele.


- sunt instanțe ale unor clase derivate din clasa Container.
❖ Window – superclasa tuturor ferestrelor
UNIVERSITATEA TEHNICĂ “GH. ASACHI” DIN IAŞI

Frame – ferestre standard


Dialog – ferestre de dialog modale sau nemodale
❖ Panel – suprafață fără reprezentare grafică folosită pentru gruparea altor
componente.
Applet – pentru crearea applet-urilor
❖ ScrollPanel – pentru implementarea automată a derulării pe orizontală sau
verticală a unei componente grafice.
Interfața grafică cu utilizatorul
4. Clasa Container
În figura următoare este prezentată ierarhia de clase AWT Container:
FACULTATEA DE ELECTRONICĂ, TELECOMUNICAŢII ŞI TEHNOLOGIA INFORMAŢIEI
UNIVERSITATEA TEHNICĂ “GH. ASACHI” DIN IAŞI
Interfața grafică cu utilizatorul
4. Clasa Container
Metode ale clasei Container
FACULTATEA DE ELECTRONICĂ, TELECOMUNICAŢII ŞI TEHNOLOGIA INFORMAŢIEI

➢ public Component add(Component comp)


➢ public Component add(Component comp, int index)
UNIVERSITATEA TEHNICĂ “GH. ASACHI” DIN IAŞI

-adaugă componenta specificată la sfârșitul container-ului sau în poziția


specificată de index.
➢ void remove (Component comp)
➢ void removeAll( )
- șterge de pe container componenta specificată, respectiv șterge toate
componentele de pe container.
Interfața grafică cu utilizatorul
4. Clasa Container
Metode ale clasei Container
FACULTATEA DE ELECTRONICĂ, TELECOMUNICAŢII ŞI TEHNOLOGIA INFORMAŢIEI

➢ public void setLayout(LayoutManager lm)


-stabilește gestionarul de poziționare al containerului.
UNIVERSITATEA TEHNICĂ “GH. ASACHI” DIN IAŞI

➢ public Insets getInsets( )


-determină distanța rezervată pentru marginile suprafeței de afișare.
➢ public void validate( )
- forțează containerul să repozitioneze toate componentele sale. Această
metodă trebuie apelată explicit atunci când adăugăm sau eliminăm
componente de pe suprafața de afișare după ce aceasta a devenit vizibilă.
Interfața grafică cu utilizatorul
5. Layout Manager
➢ Layout manager = gestionar de poziționare - obiect care controlează
FACULTATEA DE ELECTRONICĂ, TELECOMUNICAŢII ŞI TEHNOLOGIA INFORMAŢIEI

dimensiunea și poziția componentelor unui container.

➢ fiecare obiect de tip Container (Applet, Frame, Panel etc) are asociat un
UNIVERSITATEA TEHNICĂ “GH. ASACHI” DIN IAŞI

obiect care se ocupă de dispunerea componentelor pe suprafața sa și anume

gestionarul său de poziționare.

➢ clasele pentru gestionarea poziționării implementează interfața

LayoutManager.

➢ la instanțierea unui container se creează implicit un gestionar de poziționare

asociat acestuia. (Exemplu: ferestre – BorderLayout, panouri: FlowLayout)


Interfața grafică cu utilizatorul
5. Layout Manager
Exemplu: poziționarea a cinci butoane
FACULTATEA DE ELECTRONICĂ, TELECOMUNICAŢII ŞI TEHNOLOGIA INFORMAŢIEI

import java . awt .*;


public class TestLayout {
public static void main ( String args []) {
Frame f = new Frame (" Grid Layout ");
f. setLayout (new GridLayout (3, 2)); //gestionar de poziționare GridLayout
UNIVERSITATEA TEHNICĂ “GH. ASACHI” DIN IAŞI

Button b1 = new Button (" Buton 1");


Button b2 = new Button ("B 2");
Button b3 = new Button (" Buton 3");
Button b4 = new Button ("Acesta este butonul 4");
Button b5 = new Button (" Buton 5");
f.add(b1); f.add (b2); f. add(b3); f.add(b4); f.add(b5);
f. pack ();
f.setSize(400, 150);
f.setVisible(true);}
}
Interfața grafică cu utilizatorul
5. Layout Manager
Exemplu: poziționarea a cinci butoane
FACULTATEA DE ELECTRONICĂ, TELECOMUNICAŢII ŞI TEHNOLOGIA INFORMAŢIEI

import java . awt .*;


public class TestLayout {
public static void main ( String args []) {
Frame f = new Frame (“ Flow Layout ");
f. setLayout (new FlowLayout ( )); //gestionar de poziționare FlowLayout
UNIVERSITATEA TEHNICĂ “GH. ASACHI” DIN IAŞI

Button b1 = new Button (" Buton 1");


Button b2 = new Button ("B 2");
Button b3 = new Button (" Buton 3");
Button b4 = new Button ("Acesta este butonul 4");
Button b5 = new Button (" Buton 5");
f.add(b1); f.add (b2); f. add(b3); f.add(b4); f.add(b5);
f. pack ();
f.setSize(400, 150);
f.setVisible(true);}
}
Interfața grafică cu utilizatorul
5. Layout Manager
Gestionari de poziționare AWT:
FACULTATEA DE ELECTRONICĂ, TELECOMUNICAŢII ŞI TEHNOLOGIA INFORMAŢIEI

❖ FlowLayout

❖ BorderLayout
UNIVERSITATEA TEHNICĂ “GH. ASACHI” DIN IAŞI

❖ GridLayout

❖ CardLayout

❖ GridBagLayout

Unui container i se poate asocia un gestionar de poziționare cu ajutorul metodei

setLayout a clasei Container: public void setLayout(LayoutManager gp).

Pe langa aceşti gestionari, mai există şi cei din modelul Swing care vor fi prezentaţi în

capitolul dedicat dezvoltării de aplicaţii GUI folosind Swing..


Interfața grafică cu utilizatorul
5. Layout Manager
FACULTATEA DE ELECTRONICĂ, TELECOMUNICAŢII ŞI TEHNOLOGIA INFORMAŢIEI

Metode utilizate de LayoutManager:

➢ public Dimension getPrefferedSize( )


UNIVERSITATEA TEHNICĂ “GH. ASACHI” DIN IAŞI

➢ public Dimension getMinimumSize( )

➢ public Dimension getMaximumSize( )

- Sunt utilizate pentru a calcula poziția și dimensiunea componentelor grafice

pentru afișarea lor în cadrul unui container.


Interfața grafică cu utilizatorul
5. Layout Manager
Gestionarul FlowLayout
FACULTATEA DE ELECTRONICĂ, TELECOMUNICAŢII ŞI TEHNOLOGIA INFORMAŢIEI

-Este cel mai simplu layout manager. Aranjează componentele de la stânga la

dreapta și de sus în jos în ordinea adăugării componentelor în container.


UNIVERSITATEA TEHNICĂ “GH. ASACHI” DIN IAŞI

-Implicit, componentele sunt centrate pe fiecare linie iar distanța implicită între

componente este de 5 pixeli pe verticală și 5 pixeli pe orizontală.

-Este gestionarul implicit al containerelor derivate din clasa Panel, deci și al

applet-urilor.
Interfața grafică cu utilizatorul
5. Layout Manager
Exemplu: gestionarul FlowLayout
FACULTATEA DE ELECTRONICĂ, TELECOMUNICAŢII ŞI TEHNOLOGIA INFORMAŢIEI

import java . awt .*;


public class TestLayout {
public static void main ( String args []) {
Frame f = new Frame ("Flow Layout");
f. setLayout (new FlowLayout ( ));
UNIVERSITATEA TEHNICĂ “GH. ASACHI” DIN IAŞI

Button b1 = new Button (" Buton 1");


Button b2 = new Button ("B 2");
Button b3 = new Button (" Buton 3");
Button b4 = new Button ("Acesta este butonul 4");
Button b5 = new Button (" Buton 5");
f.add(b1); f.add (b2); f. add(b3); f.add(b4); f.add(b5);
f. pack ();
f.setVisible(true);}
}
Redimensionând fereastra astfel încât componentele să nu mai încapă pe o linie,
acestea vor fi afisate pe linia următoare:
Interfața grafică cu utilizatorul
5. Layout Manager
Gestionarul BorderLayout
FACULTATEA DE ELECTRONICĂ, TELECOMUNICAŢII ŞI TEHNOLOGIA INFORMAŢIEI

- împarte suprafața de afișare în cinci regiuni: sud, nord, est, vest și centru.

-O componentă poate fi plasată în oricare din cele cinci regiuni, dimensiunea


UNIVERSITATEA TEHNICĂ “GH. ASACHI” DIN IAŞI

componentei fiind calculată astfel încât să ocupe întreg spațiul de afișare din regiune.

-Pentru a adăuga mai multe componente grafice într-una din cele cinci regiuni, acestea

trebuie grupate într-un panel, care va fi apoi adăugat în regiunea dorită.

-Adăugarea în container se face cu metoda add:

public void add (Component comp, Object const)

-Parametrul const specifică zona de dispunere a componentei și poate fi oricare din

atributele statice ale clasei BorderLayout: NORTH, SOUTH, EAST, WEST, CENTER.

-este gestionarul implicit pentru containerele derivate din clasa Window.


Interfața grafică cu utilizatorul
5. Layout Manager
Exemplu: gestionarul BorderLayout
FACULTATEA DE ELECTRONICĂ, TELECOMUNICAŢII ŞI TEHNOLOGIA INFORMAŢIEI

import java . awt .*;


public class TestLayout {
public static void main ( String args []) {
Frame f = new Frame (" Border Layout ");
// Apelul de mai jos poate sa lipseasca
UNIVERSITATEA TEHNICĂ “GH. ASACHI” DIN IAŞI

f. setLayout (new BorderLayout ());


f.add(new Button (" Nord "), BorderLayout . NORTH );
f.add(new Button (" Sud"), BorderLayout . SOUTH );
f.add(new Button (" Est"), BorderLayout . EAST );
f.add(new Button (" Vest "), BorderLayout . WEST );
f.add(new Button (" Centru "), BorderLayout . CENTER );
f. pack ();
f.setVisible(true);
}
}
La redimensionarea ferestrei nordul și sudul se modifică
doar pe orizontală, estul și vestul doar pe verticală, iar
centrul atât pe orizontală cât și pe verticală.
Interfața grafică cu utilizatorul
5. Layout Manager
Gestionarul GridLayout
FACULTATEA DE ELECTRONICĂ, TELECOMUNICAŢII ŞI TEHNOLOGIA INFORMAŢIEI

- permite aranjarea componentelor pe linii și coloane, componentele fiind

plasate în celulele tabelului de la stânga la dreapta, începând cu prima linie.


UNIVERSITATEA TEHNICĂ “GH. ASACHI” DIN IAŞI

- componentele vor avea aceeași dimensiune.

-Numărul de linii și coloane este specificat prin constructor la crearea obiectului

și poate fi modificat ulterior prin metodele:

public void setRows(int rows)

respectiv

public void setColumns(int cols)


Interfața grafică cu utilizatorul
5. Layout Manager
Exemplu: gestionarul GridLayout
FACULTATEA DE ELECTRONICĂ, TELECOMUNICAŢII ŞI TEHNOLOGIA INFORMAŢIEI

import java . awt .*;


public class TestLayout {
public static void main ( String args []) {
Frame f = new Frame (" Grid Layout ");
f. setLayout (new GridLayout (3, 2));
UNIVERSITATEA TEHNICĂ “GH. ASACHI” DIN IAŞI

f.add(new Button ("Buton 1"));


f.add(new Button ("Buton 2"));
f.add(new Button ("But 3"));
f.add(new Button ("B4"));
f.add(new Button ("Butonul nr.5"));
f.add(new Button ("6"));
f. pack ();
f.setVisible(true);
}
}
Interfața grafică cu utilizatorul
5. Layout Manager
Gestionarul CardLayout
FACULTATEA DE ELECTRONICĂ, TELECOMUNICAŢII ŞI TEHNOLOGIA INFORMAŢIEI

- oferă posibilitatea suprapunerii componentelor una peste alta și afișarea

uneia singure la un moment dat.


UNIVERSITATEA TEHNICĂ “GH. ASACHI” DIN IAŞI

-La adăugarea în container se folosește metoda public void add(Component

comp, Object const), prin obiectul const se va asocia un nume componentei

adăugate. Acest nume poate fi folosit pentru a face vizibilă componenta

respectivă utilizând metoda void show(Container parent, String name).

-O altă posibilitate de a schimba componenta vizibilă este folosirea metodelor

void next(Container parent) și void previous(Container parent) din clasa

CardLayout.
Interfața grafică cu utilizatorul
5. Layout Manager
Exemplu: gestionarul CardLayout
FACULTATEA DE ELECTRONICĂ, TELECOMUNICAŢII ŞI TEHNOLOGIA INFORMAŢIEI

import java. awt .*;


import java. awt. event .*;
public class TestLayout extends Frame implements ActionListener {
Panel tab;
public TestLayout () {
UNIVERSITATEA TEHNICĂ “GH. ASACHI” DIN IAŞI

super (" CardLayout ");


Button card1 = new Button (" Card 1");
Button card2 = new Button (" Card 2");
Panel butoane = new Panel ();
butoane . add( card1 );
butoane . add( card2 );
tab = new Panel ();
tab . setLayout ( new CardLayout ());
TextField tf = new TextField (" Text Field ");
Button btn = new Button (" Button ");
tab .add (" Card 1", tf);
tab .add (" Card 2", btn);
Interfața grafică cu utilizatorul
5. Layout Manager
add ( butoane , BorderLayout . NORTH );
FACULTATEA DE ELECTRONICĂ, TELECOMUNICAŢII ŞI TEHNOLOGIA INFORMAŢIEI

add (tab , BorderLayout . CENTER );


pack ();

card1 . addActionListener ( this );


card2 . addActionListener ( this );
UNIVERSITATEA TEHNICĂ “GH. ASACHI” DIN IAŞI

}
public void actionPerformed ( ActionEvent e) {
CardLayout gestionar = ( CardLayout ) tab. getLayout ();
gestionar . show (tab , e. getActionCommand ());
}
public static void main ( String args []) {
TestLayout f = new TestLayout ();
f. setVisible (true);
}
}
Interfața grafică cu utilizatorul
5. Layout Manager
Gestionarul GridBagLayout
FACULTATEA DE ELECTRONICĂ, TELECOMUNICAŢII ŞI TEHNOLOGIA INFORMAŢIEI

- este cel mai complex și flexibil gestionar de poziționare.

-Suprafața de afișare este un tabel, însă numărul de linii și de coloane sunt determinate
UNIVERSITATEA TEHNICĂ “GH. ASACHI” DIN IAŞI

automat, în funcție de componentele amplasate pe suprafață.

-Dimensiunile celulelor pot fi diferite, cu restricția ca pe aceeași linie să aibă aceeași

înălțime, iar pe coloană să aibă aceeași lățime.

-o componentă poate ocupa mai multe celule adiacente.

-Modul de afișare a unei componente se specifică prin asocierea unui obiect de tip

GridBagConstraints, ce conține diferite proprietăți ale componentei referitoare la

regiunea de afișare și la poziție.


Interfața grafică cu utilizatorul
5. Layout Manager
Gestionarul GridBagLayout
FACULTATEA DE ELECTRONICĂ, TELECOMUNICAŢII ŞI TEHNOLOGIA INFORMAŢIEI

- legătura dintre o componentă și un obiect GridBagConstraints se realizează prin

metoda public void setConstraints(Component comp, GridBagConstraints constraints)


UNIVERSITATEA TEHNICĂ “GH. ASACHI” DIN IAŞI

- Cele mai utilizate constrângeri sunt specificate prin următoarele variabile din clasa

GridBagConstraints:

➢ gridx, gridy – celula ce reprezintă colțul stânga sus al componentei.

➢ gridwidth, gridheight – numărul de celule pe linie și coloană pe care va fi afișată

componenta.

➢ fill – specifică dacă o componentă va ocupa tot spațiul pe care îl are destinat, valorile

posibile sunt: HORIZONTAL, VERTICAL, BOTH, NONE.


Interfața grafică cu utilizatorul
5. Layout Manager
Gestionarul GridBagLayout
FACULTATEA DE ELECTRONICĂ, TELECOMUNICAŢII ŞI TEHNOLOGIA INFORMAŢIEI

➢ insets – distanțele dintre componentă și marginile suprafeței sale de afișare

➢ anchor – folosită atunci când componenta este mai mică decât suprafața sa
UNIVERSITATEA TEHNICĂ “GH. ASACHI” DIN IAŞI

de afișare pentru a forța o anumită dispunere a sa: CENTER, NORTH,

NORTHEAST, EAST, SOUTHEAST, SOUTH, SOUTHWEST, WEST, NORTHWEST.

➢ weightx, weighty – folosite pentru distribuția spațiului liber, uzual are

valoarea 1.
Interfața grafică cu utilizatorul
6. Clasa Panel
- Oferă un cadru de plasare a altor componente grafice și nu are o
FACULTATEA DE ELECTRONICĂ, TELECOMUNICAŢII ŞI TEHNOLOGIA INFORMAŢIEI

reprezentare vizibilă.

- clasa Panel este derivată din clasa Container, nu adaugă alte metode celor
UNIVERSITATEA TEHNICĂ “GH. ASACHI” DIN IAŞI

din clasa Container.

- pentru a crea o componentă de tip Panel se poate utiliza unul dintre

constructorii: Panel( ) și Panel(LayoutManager layout), în cazul primului

constructor gestionarul implicit este de tipul FlowLayout.


Interfața grafică cu utilizatorul
6. Clasa Panel
Exemplu: gruparea componentelor folosind Panel
FACULTATEA DE ELECTRONICĂ, TELECOMUNICAŢII ŞI TEHNOLOGIA INFORMAŢIEI

import java . awt .*;


public class TestPanel {
public static void main ( String args []) {
UNIVERSITATEA TEHNICĂ “GH. ASACHI” DIN IAŞI

Frame f = new Frame (" Test Panel ");


Panel intro = new Panel ();
intro . setLayout (new GridLayout (1, 3));
intro .add(new Label (" Text :"));
intro .add(new TextField ("", 20) );
intro .add(new Button (" Adaugare "));
Panel lista = new Panel ();
lista . setLayout (new FlowLayout ());
lista .add(new List (10) );
lista .add(new Button (" Stergere "));
Interfața grafică cu utilizatorul
6. Clasa Panel
Exemplu: gruparea componentelor folosind Panel
FACULTATEA DE ELECTRONICĂ, TELECOMUNICAŢII ŞI TEHNOLOGIA INFORMAŢIEI

Panel control = new Panel ();


control . add( new Button (" Salvare "));
control . add( new Button (" Iesire "));
f.add(intro , BorderLayout . NORTH );
f.add(lista , BorderLayout . CENTER );
UNIVERSITATEA TEHNICĂ “GH. ASACHI” DIN IAŞI

f.add( control , BorderLayout . SOUTH );


f. pack ();
f. setVisible (true);
}
}
Interfața grafică cu utilizatorul
7. Evenimente generate de componente
➢ Evenimentul reprezintă o acțiune impusă de către utilizator (apăsarea unei taste sau a
FACULTATEA DE ELECTRONICĂ, TELECOMUNICAŢII ŞI TEHNOLOGIA INFORMAŢIEI

unui buton de mouse, manevrarea barei de derulare, marcarea unei opțiuni într-un meniu,
închiderea unei ferestre etc).
➢ Componentele care generează evenimente se mai numesc și surse de evenimente.
UNIVERSITATEA TEHNICĂ “GH. ASACHI” DIN IAŞI

➢ interceptarea evenimentelor generate de componente se realizează prin intermediul unor


clase de tip listener (ascultător, consumator de evenimente).
➢ pentru fiecare tip de eveniment există o clasă, de exemplu evenimentul generat de
acționarea unui buton este descris de clasa ActionEvent, cel generat de modificarea unui
text este descris de clasa TextEvent etc. Toate aceste clase sunt derivate din clasa
AWTEvent.
➢Clasele AWT pentru gestionarea evenimentelor se găsesc în pachetul java.awt.event.
➢Există trei tipuri de obiecte care sunt implicate în gestionarea evenimentelor: o sursă de
evenimente, un ascultător de evenimente (listener) și un obiect eveniment.
Interfața grafică cu utilizatorul
7. Evenimente generate de componente
➢The source object (such as Button and Textfield) interacts with the user. Upon
FACULTATEA DE ELECTRONICĂ, TELECOMUNICAŢII ŞI TEHNOLOGIA INFORMAŢIEI

triggered, the source object creates an event object to capture the action (e.g., mouse-
click x and y, texts entered, etc). This event object will be messaged to all the registered
listener object(s), and an appropriate event-handler method of the listener(s) is called-
UNIVERSITATEA TEHNICĂ “GH. ASACHI” DIN IAŞI

back to provide the response. In other words, triggering a source fires an event to all its
listener(s), and invoke an appropriate event handler of the listener(s).

➢To express interest for a certain source's event, the listener(s) must be registered with
the source. In other words, the listener(s) "subscribes" to a source's event, and the
source "publishes" the event to all its subscribers upon activation. This is known as
subscribe-publish or observable-observer design pattern.
UNIVERSITATEA TEHNICĂ “GH. ASACHI” DIN IAŞI

FACULTATEA DE ELECTRONICĂ, TELECOMUNICAŢII ŞI TEHNOLOGIA INFORMAŢIEI

7. Evenimente generate de componente


Interfața grafică cu utilizatorul
Interfața grafică cu utilizatorul
7. Evenimente generate de componente
1. The source object registers its listener(s) for a certain type of event.
FACULTATEA DE ELECTRONICĂ, TELECOMUNICAŢII ŞI TEHNOLOGIA INFORMAŢIEI

➢A source fires an event when triggered. For example, clicking a Button fires an ActionEvent, clicking a
mouse button fires MouseEvent, typing a key fires KeyEvent.
How the source and listener understand each other? The answer is via an agreed-upon interface. For
example, if a source is capable of firing an event called XxxEvent (e.g., MouseEvent) involving various
UNIVERSITATEA TEHNICĂ “GH. ASACHI” DIN IAŞI

operational modes (e.g., mouse-clicked, mouse-entered, mouse-exited, mouse-pressed, and mouse-


released). Firstly, we need to declare an interface called XxxListener (e.g., MouseListener) containing
the names of the handler methods (recall that an interface contains only abstract methods without
implementation). For example, the MouseListener interface is declared as follows with five operational
modes.
Secondly, all XxxEvent listeners must implement the XxxListener interface. That is, the listeners must
provide their own implementations (i.e., programmed responses) to all the abstract methods declared in
the XxxListener interface. In this way, the listener(s) can response to these events appropriately.
Interfața grafică cu utilizatorul
7. Evenimente generate de componente
Thirdly, in the source, we need to maintain a list of XxxEvent listener object(s), and define two
FACULTATEA DE ELECTRONICĂ, TELECOMUNICAŢII ŞI TEHNOLOGIA INFORMAŢIEI

methods: addXxxListener() and removeXxxListener() to add and remove a XxxEvent listener from this
list. Take note that the addXxxListenser() takes a XxxListener object as its sole parameter. In other
words, it can only add objects of the type XxxListener, and its sub-type. Since XxxListener is an
interface, you cannot create instance of XxxListener, but need to create instance of a subclass
UNIVERSITATEA TEHNICĂ “GH. ASACHI” DIN IAŞI

implementing the XxxListener interface.


In summary, we identify the source, the event-listener interface, and the listener object. The listener
must implement the event-listener interface. The source object then registers listener object via the
addXxxListener(XxxListener lis) method.
The source is triggered by a user.
The source create a XxxEvent object, which encapsulates the necessary information about the
activation. For example, the (x, y) position of the mouse pointer, the text entered, etc.
Finally, for each of the XxxEvent listeners in the listener list, the source invokes the appropriate handler
on the listener(s), which provides the programmed response.
In summary, triggering a source fires an event to all its registered listeners, and invoke an appropriate
handler of the listener.
Interfața grafică cu utilizatorul
7. Evenimente generate de componente
➢ O clasă consumatoare de evenimente specifică în declarația sa că va asculta evenimente
de un anumit tip, prin implementarea unei interfețe specifice tipului de eveniment.
FACULTATEA DE ELECTRONICĂ, TELECOMUNICAŢII ŞI TEHNOLOGIA INFORMAŢIEI

➢ Exemplu:

class AscultaButoane implements ActionListener {


public void actionPerformed(ActionEvent e) {
// Metoda interfetei ActionListener
UNIVERSITATEA TEHNICĂ “GH. ASACHI” DIN IAŞI

...
}
}

class AscultaTexte implements TextListener {


public void textValueChanged(TextEvent e) {
// Metoda interfetei TextListener
...
}
}
➢ Toate aceste interfețe sunt derivate din EventListener. (interfaţă din pachetul java.util)
➢ sursele evenimentelor permit oricărei clase să asculte evenimentele sale prin metode de tip
addTipEvenimentListener( ), unde TipEveniment este un tip de eveniment.
Interfața grafică cu utilizatorul
7. Evenimente generate de componente
➢Exemplu:
import java . awt .*;
FACULTATEA DE ELECTRONICĂ, TELECOMUNICAŢII ŞI TEHNOLOGIA INFORMAŢIEI

import java . awt. event .*;


class Fereastra extends Frame implements ActionListener {
Button ok = new Button ("OK");
Button exit = new Button (" Exit ");
int n=0;
UNIVERSITATEA TEHNICĂ “GH. ASACHI” DIN IAŞI

public Fereastra ( String titlu ) {


super ( titlu );
setLayout (new FlowLayout ());
setSize (200 , 100) ;
add (ok);
add ( exit );
ok. addActionListener ( this );
exit . addActionListener ( this );
// Ambele butoane sunt ascultate in clasa Fereastra
// deci ascultatorul este instanta curenta : this
}
Interfața grafică cu utilizatorul
7. Evenimente generate de componente
➢Exemplu:
// Metoda interfetei ActionListener
FACULTATEA DE ELECTRONICĂ, TELECOMUNICAŢII ŞI TEHNOLOGIA INFORMAŢIEI

public void actionPerformed ( ActionEvent e) {


if (e. getSource () == exit )
System . exit (0); // Terminam aplicatia
if (e. getSource () == ok) {
n ++;
UNIVERSITATEA TEHNICĂ “GH. ASACHI” DIN IAŞI

this . setTitle ("Ati apasat OK de " + n + " ori");


}
}
}
Metoda getSource( ) returnează componenta generatoare a unui eveniment
Interfața grafică cu utilizatorul
7. Evenimente generate de componente
Tratarea evenimentelor – pe scurt:
FACULTATEA DE ELECTRONICĂ, TELECOMUNICAŢII ŞI TEHNOLOGIA INFORMAŢIEI

1. Determină ce eveniment apare.


De ex: evenimentul ce apare la apăsarea butonului Close al unei ferestre

2. Decide ce clasă/interfaţă va trata acest eveniment.


UNIVERSITATEA TEHNICĂ “GH. ASACHI” DIN IAŞI

public interface WindowListener extends EventListener {


void windowActivated(WindowEvent e);
void windowClosed(WindowEvent e);
void windowClosing(WindowEvent e);
void windowDeactivated(WindowEvent e);
void windowDeiconified(WindowEvent e);
void windowIconified(WindowEvent e);
void windowOpened(WindowEvent e);
}

3
Interfața grafică cu utilizatorul
7. Evenimente generate de componente
Tratarea evenimentelor – pe scurt:
FACULTATEA DE ELECTRONICĂ, TELECOMUNICAŢII ŞI TEHNOLOGIA INFORMAŢIEI

3. Declară clasa care “ascultă” evenimente, clasa implementează interfeţe specifice fiecărui tip de
eveniment – acestea descriu metode ce vor fi apelate automat la apariţia evenimentelor.

import java.awt.*;
UNIVERSITATEA TEHNICĂ “GH. ASACHI” DIN IAŞI

implements WindowListener
import java.awt.event.*;
public class Handler {
public void windowActivated(WindowEvent e) {}
public void windowClosed(WindowEvent e) {}
public void windowClosing(WindowEvent e) {
Window w = e.getWindow();
w.setVisible(false);
w.dispose();
System.exit(0);
}
public void windowDeactivated(WindowEvent e) {}
public void windowDeiconified(WindowEvent e) {}
public void windowIconified(WindowEvent e) {}
public void windowOpened(WindowEvent e) {}
}
Interfața grafică cu utilizatorul
7. Evenimente generate de componente
Tratarea evenimentelor – pe scurt:
FACULTATEA DE ELECTRONICĂ, TELECOMUNICAŢII ŞI TEHNOLOGIA INFORMAŢIEI

4. Precizează în ce clasă (clasa de tip listener) este localizată metoda ce se va executa


când apare evenimentul. Sursele evenimentelor permit oricărei clase sa ”asculte”
evenimentele sale prin metode de tip addXXXListener;

import java.awt.*;
UNIVERSITATEA TEHNICĂ “GH. ASACHI” DIN IAŞI

public class HelloGUI {


public static void main (String[] args) {
Handler h = new Handler();
System.out.println (“Creare GUI");
Frame f = new Frame ("Hello GUIs");
f.setSize( 200, 200 );

f.addWindowListener(h);
f.setVisible(true);
System.out.println(“Finalizare GUI");
} // main
} // clasa HelloGUI
Interfața grafică cu utilizatorul
7. Evenimente generate de componente
Tipuri de evenimente:
1) Evenimente de nivel jos (generate la acțiuni directe ale utilizatorului asupra
FACULTATEA DE ELECTRONICĂ, TELECOMUNICAŢII ŞI TEHNOLOGIA INFORMAŢIEI

componentei)

❖ ComponentEvent
- este generat când componenta este ascunsă, mutată, redimensionată, afișată.
-Pentru a răspunde la acest eveniment trebuie implementată interfața
UNIVERSITATEA TEHNICĂ “GH. ASACHI” DIN IAŞI

ComponentListener:
public interface ComponentListener extends EventListener {
public abstract void componentResized(ComponentEvent e);
public abstract void componentMoved(ComponentEvent e);
public abstract void componentShown(ComponentEvent e);
public abstract void componentHidden(ComponentEvent e); }
❖FocusEvent
-Aceste eveniment este legat de obținerea sau pierderea focusului.
- dacă o componentă este în focus atunci evenimentele generate de tastatură îi sunt
adresate respectivei componente. Interfața care trebuie implementată este
FocusListener:
public interface FocusListener extends EventListener {
public abstract void focusGained(FocusEvent e);
public abstract void focusLost(FocusEvent e); }
Interfața grafică cu utilizatorul
7. Evenimente generate de componente
1) Evenimente de nivel jos
FACULTATEA DE ELECTRONICĂ, TELECOMUNICAŢII ŞI TEHNOLOGIA INFORMAŢIEI

❖ KeyEvent
-este generat la acțiunea tastaturii (apăsare, eliberare taste, tastare)
-Interfața care trebuie implementată este KeyListener:
public interface KeyListener extends EventListener {
public abstract void keyTyped(KeyEvent e);
UNIVERSITATEA TEHNICĂ “GH. ASACHI” DIN IAŞI

public abstract void keyPressed(KeyEvent e);


public abstract void keyReleased(KeyEvent e);
}
❖ MouseEvent
-Acest eveniment este legat de anumite acțiuni ale mouse-ului în cadrul componentei.
-Interfața care trebuie implementată este MouseListener:
public interface MouseListener extends EventListener {
public abstract void mouseClicked(MouseEvent e);
public abstract void mousePressed(MouseEvent e);
public abstract void mouseReleased(MouseEvent e);
public abstract void mouseEntered(MouseEvent e);
public abstract void mouseExited(MouseEvent e);
}
Interfața grafică cu utilizatorul
7. Evenimente generate de componente
1) Evenimente de nivel jos
FACULTATEA DE ELECTRONICĂ, TELECOMUNICAŢII ŞI TEHNOLOGIA INFORMAŢIEI

❖ WindowEvent
-Eveniment legat de acțiuni asupra ferestrelor: minimizare, maximizare, deschidere,
închidere etc.
-Interfața care trebuie implementată este WindowListener:
public interface WindowListener extends EventListener {
UNIVERSITATEA TEHNICĂ “GH. ASACHI” DIN IAŞI

public abstract void windowOpened(WindowEvent e);


public abstract void windowClosing(WindowEvent e);
public abstract void windowClosed(WindowEvent e);
public abstract void windowIconified(WindowEvent e);
public abstract void windowDeiconified(WindowEvent e);
public abstract void windowActivated(WindowEvent e);
public abstract void windowDeactivated(WindowEvent e);
}
Interfața grafică cu utilizatorul
7. Evenimente generate de componente
Tipuri de evenimente:
2) Evenimente semantice (reprezintă interacțiunea cu o componentă GUI: apăsarea
FACULTATEA DE ELECTRONICĂ, TELECOMUNICAŢII ŞI TEHNOLOGIA INFORMAŢIEI

unui buton, selectarea unui articol dintr-o listă etc)

❖ ActionEvent
-Acționare
- Interfața care trebuie implementată este ActionListener:
UNIVERSITATEA TEHNICĂ “GH. ASACHI” DIN IAŞI

public interface ActionListener extends EventListener {


public abstract void actionPerformed(ActionEvent e);
}
❖ AdjustmentEvent
- ajustarea unei valori
- Interfața care trebuie implementată este AdjustmentListener:
public interface AdjustmentListener extends EventListener {
public abstract void adjustmentValueChanged(AdjustmentEvent e);
}
Interfața grafică cu utilizatorul
7. Evenimente generate de componente
2) Evenimente semantice
FACULTATEA DE ELECTRONICĂ, TELECOMUNICAŢII ŞI TEHNOLOGIA INFORMAŢIEI

❖ ItemEvent
- schimbarea stării
- Interfața care trebuie implementată este ItemListener:
public interface ItemListener extends EventListener {
public abstract void itemStateChanged(ItemEvent e);
UNIVERSITATEA TEHNICĂ “GH. ASACHI” DIN IAŞI

}
❖ TextEvent
- schimbarea textului
- Interfața care trebuie implementată este TextListener:
public interface TextListener extends EventListener {
public abstract void textValueChanged(TextEvent e);
}
Interfața grafică cu utilizatorul
7. Evenimente generate de componente
Clase adaptori
FACULTATEA DE ELECTRONICĂ, TELECOMUNICAŢII ŞI TEHNOLOGIA INFORMAŢIEI

-Atunci când o clasă care tratează evenimente implementează interfața


corespunzătoare tipului de eveniment, ea trebuie să implementeze obligatoriu
UNIVERSITATEA TEHNICĂ “GH. ASACHI” DIN IAŞI

toate metodele definite de acea interfață.


-Pentru situațiile în care nu ne interesează toate metodele interfeței, se poate
folosi o serie de clase care implementează interfețele de tip Listener fără a
specifica cod pentru metodele lor. Aceste clase se numesc adaptori.
-Un adaptor este o clasă abstractă care implementează o anumită interfață fără
a specifica cod nici unei metode a interfeței.
-Scopul unui adaptor este ca la crearea unei clase ascultătoare de evenimente, în
loc să se implementeze interfața, extindem adaptorul corespunzător interfeței
respective și implementăm metodele care ne interesează.
Interfața grafică cu utilizatorul
7. Evenimente generate de componente
Clase adaptori
În tabelul următor sunt dați adaptorii interfețelor de tip listener. Interfețele care nu au
FACULTATEA DE ELECTRONICĂ, TELECOMUNICAŢII ŞI TEHNOLOGIA INFORMAŢIEI

adaptor sunt cele care definesc o singură metodă și deci crearea unei clase adaptor nu are
sens.
Interfața Adaptor
ActionListener nu are
UNIVERSITATEA TEHNICĂ “GH. ASACHI” DIN IAŞI

AdjustmentListener nu are
ComponentListener ComponentAdapter
ContainerListener ContainerAdapter
FocusListener FocusAdapter
ItemListener nu are
KeyListener KeyAdapter
MouseListener MouseAdapter
MouseMotionListener MouseMotionAdapter
TextListener nu are
WindowListener WindowAdapter
Interfața grafică cu utilizatorul
8. Componente de tip ferestre
1)Clasa Window
- Implementează o fereastră grafică fără titlu și fără chenar.
FACULTATEA DE ELECTRONICĂ, TELECOMUNICAŢII ŞI TEHNOLOGIA INFORMAŢIEI

- Este derivată din clasa Container.


- Metodele mai importante ale clasei sunt:
➢ public void show( )
- face vizibilă fereastra și o aduce în fața altor ferestre grafice existente.
➢ public void hide( )
UNIVERSITATEA TEHNICĂ “GH. ASACHI” DIN IAŞI

- face fereastra invizibilă fără a o distruge însă.


➢ public boolean isShowing( )
- verifică dacă fereastra este vizibilă sau nu.
➢ public void dispose( )
- închide fereastra și eliberează toate resursele acesteia.
➢ public void pack( )
- redimensionează automat fereastra la o suprafață optimă care să cuprindă toate
elementele sale, se apelează în general după adăugarea tuturor componentelor pe
suprafața ferestrei.
➢ public Component getFocusOwner( )
- returnează componenta ferestrei care are focus-ul (dacă fereastra este activă).
➢ public void toFront( )
➢ public void toBack( )
- mută fereastra în față, respectiv în spatele altor ferestre grafice existente.
Interfața grafică cu utilizatorul
8. Componente de tip ferestre
2) Clasa Frame
FACULTATEA DE ELECTRONICĂ, TELECOMUNICAŢII ŞI TEHNOLOGIA INFORMAŢIEI

public class Frame extends Window implements MenuContainer


- Este derivată a clasei Window și este folosită pentru crearea de ferestre independente
și funcționale, cu bară de titlu și poate avea și o bară de meniuri.
- Constructorii Frame( ) și Frame(String title) permit crearea unei feresre inițial invizibilă,
parametrul title desemnează șirul afișat în bara de titlu a ferestrei. Pentru a face
UNIVERSITATEA TEHNICĂ “GH. ASACHI” DIN IAŞI

fereastra vizibilă se folosește apelul metodei setVisible(true).


- gestionarul de poziționare implicit al clasei Frame este BorderLayout.
- Metode mai utilizate:
➢ public static Frame [ ] getFrame( )
- returnează lista tuturor ferestrelor deschise ale unei aplicații.
➢ public void setIconImage(Image im)
- Setează obiectul imagine utilizat ca icoană la minimizarea ferestrei grafice.
➢ public void setMenuBar (MenuBar mb)
- Setează bara de meniuri asociată ferestrei.
➢ public void setTitle(String title)
- Setează titlul ferestrei.
➢ public void setResizable(boolean res)
- stabilește dacă fereastra poate fi redimensionată de utilizator.
Interfața grafică cu utilizatorul
8. Componente de tip ferestre
3) Clasa Dialog
FACULTATEA DE ELECTRONICĂ, TELECOMUNICAŢII ŞI TEHNOLOGIA INFORMAŢIEI

public class Dialog extends Window


- Este utilizată pentru a crea o fereastră grafică de tip dialog, utilizată de obicei pentru
afișarea unor mesaje și pentru a prelua date de la utilizator.
- Fereastra de tip Dialog are o bară de titlu dar nu poate avea o bară de meniuri.
UNIVERSITATEA TEHNICĂ “GH. ASACHI” DIN IAŞI

- Fereastra de dialog este dependentă de o altă fereastră numită fereastră părinte, când
fereastra părinte este distrusă sunt distruse și ferestrele sale de dialog, iar când
fereastra părinte este minimizată ferestrele de dialog sunt făcute invizibile.
- Pot fi de două tipuri:
❖ modale: care blochează accesul la fereastra părinte în momentul deschiderii lor, cum
sunt ferestrele de introducere a unor date, de alegere a unui fișier, de selectare a unei
opțiuni etc.
❖ nemodale: care nu blochează fluxul de intrare către fereastra părinte, cum ar fi dialogul
de căutare a unui cuvânt într-un fișier.
- implicit, o fereastră de dialog este nemodală și invizibilă.
Interfața grafică cu utilizatorul
8. Componente de tip ferestre
3) Clasa Dialog
FACULTATEA DE ELECTRONICĂ, TELECOMUNICAŢII ŞI TEHNOLOGIA INFORMAŢIEI

➢ Constructorii mai utilizați sunt:


Dialog(Frame parent)
Dialog(Frame parent, boolean modal)
Dialog(Frame parent, String title)
UNIVERSITATEA TEHNICĂ “GH. ASACHI” DIN IAŞI

Dialog(Frame parent, String title, boolean modal)


Dialog(Dialog parent)
Dialog(Dialog parent, String title)
Dialog(Dialog parent, String title, boolean modal)
➢ Alte metode:
public void setModal(booolean)
public boolean isModal( )
- setează/verifică tipul ferestrei (modală sau nu)
public String getTitle( )
public void setTitle(String title)
- returnează/setează titlul ferestrei.
Interfața grafică cu utilizatorul
8. Componente de tip ferestre
4) Clasa FileDialog
FACULTATEA DE ELECTRONICĂ, TELECOMUNICAŢII ŞI TEHNOLOGIA INFORMAŢIEI

public class FileDialog extends Dialog


- Este o clasă derivată din clasa Dialog și este utilizată pentru a crea o
fereastră de dialog pentru selecția unui fișier.
UNIVERSITATEA TEHNICĂ “GH. ASACHI” DIN IAŞI

- Fereastra afișează un arbore ce reprezintă structura ierarhică a directoarelor


și fișierelor și permite utilizatorului căutarea în această structură și selecția
unui fișier.
- Există două tipuri de ferestre FileDialog: fereastră de tip load și fereastră
de tip save.
- Fereastra de tip load permite doar selecția unui fișier existent în structura
de directoare iar cea de tip save oferă posibilitatea de a creea un fișier
nou.
- După ce este selectat un fișier, fereastra se închide automat.
Interfața grafică cu utilizatorul
8. Componente de tip ferestre
4) Clasa FileDialog
FACULTATEA DE ELECTRONICĂ, TELECOMUNICAŢII ŞI TEHNOLOGIA INFORMAŢIEI

➢ Are constructorii:
FileDialog(Frame parent)
FileDialog(Frame parent, String title)
FileDialog(Frame parent, String title, int mod)
UNIVERSITATEA TEHNICĂ “GH. ASACHI” DIN IAŞI

- Parametrul mod specifică tipul ferestrei (save sau load), pentru


specificarea acestui tip clasa conține două constante statice și anume:
SAVE și LOAD, implicit tipul ferestrei este load.
➢ Alte metode:
public int getMode( )
public void setMode(int mod)
- returnează/setează tipul ferestrei (save sau load).
public String getDirectory( )
public void setDirectory(String dir)
- returnează/setează directorul de lucru
public String getFile( )
Public void setFile(String file)
- returnează/setează fișierul selectat
Interfața grafică cu utilizatorul
9. Componente AWT de lucru cu meniuri
1) Clasa MenuComponent
FACULTATEA DE ELECTRONICĂ, TELECOMUNICAŢII ŞI TEHNOLOGIA INFORMAŢIEI

- Este o clasă abstractă derivată din clasa Object și este superclasa tuturor
claselor de tip meniu.
- Câteva dintre metodele clasei sunt:
UNIVERSITATEA TEHNICĂ “GH. ASACHI” DIN IAŞI

public String getName( )


public void setName(String name)
- returnează/setează numele componentei.
public MenuContainer getParent( )
- returnează părintele componentei de tip meniu.
public Font getFont( )
public void setFont(Font f)
- returnează/setează tipul de font utilizat pentru afișare.
Interfața grafică cu utilizatorul
9. Componente AWT de lucru cu meniuri
2) Clasa MenuBar
FACULTATEA DE ELECTRONICĂ, TELECOMUNICAŢII ŞI TEHNOLOGIA INFORMAŢIEI

- Este o clasă derivată din clasa MenuComponent și este utilizată pentru a


crea o bară de meniuri asociată unei ferestre cadru de tip Frame folosind
metoda setMenuBar(MenuBar bar) a clasei Frame.
UNIVERSITATEA TEHNICĂ “GH. ASACHI” DIN IAŞI

3) Clasa MenuItem
- Este o clasă derivată din clasa MenuComponent și reprezintă clase ce
implementează un meniu.
- La selecția unui meniu, acesta generează un eveniment de tipul
ActionEvent.
4) Clasa Menu
- Este o clasă derivată din clasa MenuItem și este componenta ce oferă
posibilitatea realizării unei structuri verticale de meniuri.
Interfața grafică cu utilizatorul
9. Componente AWT de lucru cu meniuri
5) Clasa CheckboxMenuItem
FACULTATEA DE ELECTRONICĂ, TELECOMUNICAŢII ŞI TEHNOLOGIA INFORMAŢIEI

- Este o clasă derivată din clasa MenuItem și implementează interfața


ItemSelectable.
- Implementează într-un meniu articole de tip comutator- care are două stări
UNIVERSITATEA TEHNICĂ “GH. ASACHI” DIN IAŞI

logice (ON/OFF), acționarea articolului determinând trecerea sa dintr-o stare


în alta și generarea unui eveniment de tipul ItemEvent.
6) Clasa PopupMenu
- Este o clasă derivată din clasa Menu și reprezintă o componentă de tip meniu
popUp care poate fi asociată oricărei componente grafice derivată din clasa
Component.
- Asocierea cu o componentă grafică de tipul Component se face prin metoda
add(PopupMenu popup) din clasa Component.
Interfața grafică cu utilizatorul
9. Componente AWT de lucru cu meniuri
Exemplu: crearea unui meniu
FACULTATEA DE ELECTRONICĂ, TELECOMUNICAŢII ŞI TEHNOLOGIA INFORMAŢIEI

import java . awt .*;


import java . awt. event .*;
public class TestMenu {
public static void main ( String args []) {
Frame f = new Frame (" Test Menu ");
UNIVERSITATEA TEHNICĂ “GH. ASACHI” DIN IAŞI

MenuBar mb = new MenuBar ();


Menu fisier = new Menu (" File ");
fisier . add( new MenuItem (" Open "));
fisier . add( new MenuItem (" Close "));
fisier . addSeparator ();
fisier . add( new MenuItem (" Exit "));
Menu optiuni = new Menu (" Options ");
optiuni . add( new MenuItem (" Copy "));
optiuni . add( new MenuItem ("Cut"));
optiuni . add( new MenuItem (" Paste "));
Interfața grafică cu utilizatorul
9. Componente AWT de lucru cu meniuri
Menu editare = new Menu (" Edit ");
editare . add( new MenuItem (" Undo "));
FACULTATEA DE ELECTRONICĂ, TELECOMUNICAŢII ŞI TEHNOLOGIA INFORMAŢIEI

editare . add( optiuni );


editare . addSeparator ();
editare . add( new CheckboxMenuItem (" Bold "));
editare . add( new CheckboxMenuItem (" Italic "));
mb. add( fisier );
UNIVERSITATEA TEHNICĂ “GH. ASACHI” DIN IAŞI

mb. add( editare );


f. setMenuBar (mb);
f. setSize (200 , 100) ;
f. setVisible (true);
}
}
Interfața grafică cu utilizatorul
10. Componente AWT simple
1) Clasa Label
FACULTATEA DE ELECTRONICĂ, TELECOMUNICAŢII ŞI TEHNOLOGIA INFORMAŢIEI

- Reprezintă o componentă pentru plasarea unui text pe o suprafață de afișare.


- Textul nu poate fi modificat de către utilizator dar poate fi modificat din
program.
UNIVERSITATEA TEHNICĂ “GH. ASACHI” DIN IAŞI
Interfața grafică cu utilizatorul
10. Componente AWT simple
import java . awt .*;
public class TestMenu {
FACULTATEA DE ELECTRONICĂ, TELECOMUNICAŢII ŞI TEHNOLOGIA INFORMAŢIEI

public static void main ( String args []) {


Frame f = new Frame (" Label ");
Label nord , sud , est , vest , centru ;
nord = new Label (" Nord ", Label . CENTER );
nord . setForeground ( Color . blue );
sud = new Label ("Sud ", Label . CENTER );
UNIVERSITATEA TEHNICĂ “GH. ASACHI” DIN IAŞI

sud . setForeground ( Color .red);


vest = new Label (" Vest ", Label . LEFT );
vest . setFont ( new Font (" Dialog ", Font .ITALIC , 14));
est = new Label ("Est ", Label . RIGHT );
est . setFont ( new Font (" Dialog ", Font .ITALIC , 14));
centru = new Label (" Centru ", Label . CENTER );
centru . setBackground ( Color .green );
centru . setFont ( new Font (" Arial ", Font .BOLD , 20));
f.add(nord , BorderLayout . NORTH );
f.add(sud , BorderLayout . SOUTH );
f.add(est , BorderLayout . EAST );
f.add(vest , BorderLayout . WEST );
f.add(centru , BorderLayout . CENTER );
f. pack ();
f. setVisible (true);
}
}
Interfața grafică cu utilizatorul
10. Componente AWT simple
2) Clasa Button
FACULTATEA DE ELECTRONICĂ, TELECOMUNICAŢII ŞI TEHNOLOGIA INFORMAŢIEI

- Reprezintă o componentă pentru plasarea unui buton pe o suprafață de


afișare.
- Este o componentă activă, asupra ei se poate acționa de către utilizator.
UNIVERSITATEA TEHNICĂ “GH. ASACHI” DIN IAŞI

- Textul este format dintr-o singură linie.


Interfața grafică cu utilizatorul
10. Componente AWT simple
3) Clasa Choice
FACULTATEA DE ELECTRONICĂ, TELECOMUNICAŢII ŞI TEHNOLOGIA INFORMAŢIEI

- Definește o listă de opțiuni din care utilizatorul poate selecta una singură.
- La un moment dat, o singură opțiune din listă este vizibilă
- Este o componentă grafică de tipul pop-up menu.
UNIVERSITATEA TEHNICĂ “GH. ASACHI” DIN IAŞI
Interfața grafică cu utilizatorul
10. Componente AWT simple
4) Clasa List
FACULTATEA DE ELECTRONICĂ, TELECOMUNICAŢII ŞI TEHNOLOGIA INFORMAŢIEI

- Definește o listă de opțiuni care permite utilizatorului să selecteze una sau


mai multe opțiuni la un moment dat.
- Opțiunile sunt afișate într-o componentă de dimensiune fixă, având un
UNIVERSITATEA TEHNICĂ “GH. ASACHI” DIN IAŞI

scrollbar.
Interfața grafică cu utilizatorul
10. Componente AWT simple
5) Clasa Checkbox
FACULTATEA DE ELECTRONICĂ, TELECOMUNICAŢII ŞI TEHNOLOGIA INFORMAŢIEI

- Reprezintă o componentă care se poate găsi în două stări: on sau off.


- Prin acțiunea utilizatorului cu mouse-ul asupra componentei se schimbă
starea ei.
UNIVERSITATEA TEHNICĂ “GH. ASACHI” DIN IAŞI
Interfața grafică cu utilizatorul
10. Componente AWT simple
6) Clasa CheckboxGroup
FACULTATEA DE ELECTRONICĂ, TELECOMUNICAŢII ŞI TEHNOLOGIA INFORMAŢIEI

- Definește un grup de comutatoare (Checkbox) din care doar unul poate fi


selectat
- Aceste componente se mai numesc butoane radio.
UNIVERSITATEA TEHNICĂ “GH. ASACHI” DIN IAŞI
Interfața grafică cu utilizatorul
10. Componente AWT simple
7) Clasa Scrollbar
FACULTATEA DE ELECTRONICĂ, TELECOMUNICAŢII ŞI TEHNOLOGIA INFORMAŢIEI

- definește o bară de defilare pe verticală sau pe orizontală.


- Permite selecția dintr-un domeniu de valori numerice a unei valori sau a unui
subdomeniu.
UNIVERSITATEA TEHNICĂ “GH. ASACHI” DIN IAŞI
Interfața grafică cu utilizatorul
10. Componente AWT simple
8) Clasa ScrollPane
FACULTATEA DE ELECTRONICĂ, TELECOMUNICAŢII ŞI TEHNOLOGIA INFORMAŢIEI

- Permite atașarea unor bare de defilare orizontală și/sau verticală oricărei


componente grafice.
- Este utilă pentru acele componente care nu au implementată funcționalitatea
UNIVERSITATEA TEHNICĂ “GH. ASACHI” DIN IAŞI

de defilare automată, cum ar listele.


Interfața grafică cu utilizatorul
10. Componente AWT simple
9) Clasa TextField
FACULTATEA DE ELECTRONICĂ, TELECOMUNICAŢII ŞI TEHNOLOGIA INFORMAŢIEI

- Definește un control de editare a textului pe o singură linie


- Este utilă pentru interogarea utilizatorului asupra unei valori.
UNIVERSITATEA TEHNICĂ “GH. ASACHI” DIN IAŞI

10) Clasa TextArea


- Definește un control de editare a textului pe mai multe linii
- Este utilă pentru editarea de texte, introducerea unor comentarii etc.

S-ar putea să vă placă și