aplica ii java - runceanu.roasadar, modul de aranjare a componentelor pe o suprafata de afisare nu...

96
Aplica ț ii JAVA Universitatea Constantin Brâncuşi” din Târgu-Jiu Lect.dr . Adrian Runceanu

Upload: others

Post on 26-Apr-2021

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Aplica ii JAVA - runceanu.roAsadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a clasei Container. Fiecare obiect de tip Container, sau o

Aplicații JAVA

Universitatea “Constantin Brâncuşi” din Târgu-Jiu

Lect.dr. Adrian Runceanu

Page 2: Aplica ii JAVA - runceanu.roAsadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a clasei Container. Fiecare obiect de tip Container, sau o

[email protected]

Curs 5

Interfata grafica AWT(Abstract Window Toolkit )

17.03.2016 Curs - Aplicatii Java 2

Page 3: Aplica ii JAVA - runceanu.roAsadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a clasei Container. Fiecare obiect de tip Container, sau o

[email protected]

5. Interfata grafica AWT

1. Privire de ansamblu asupra interfetei grafice2. Componente AWT3. Gestionari de pozitionare4. Gruparea componentelor (Clasa Panel)5. Tratarea evenimentelor6. Folosirea ferestrelor in AWT

317.03.2016 Curs - Aplicatii Java

Page 4: Aplica ii JAVA - runceanu.roAsadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a clasei Container. Fiecare obiect de tip Container, sau o

[email protected]

1. Privire de ansamblu asupra interfetei grafice

Interfata grafica sau, mai bine zis, interfata grafica cu

utilizatorul (GUI), este un termen cu înteles larg care se

refera la toate tipurile de comunicare vizuala între un

program si utilizatorii sai.

Aceasta este o particularizare a interfetei cu utilizatorul

(UI), prin care vom întelege conceptul generic de

interactiune între un program si utilizatorii sai.

Asadar, UI se refera nu numai la ceea ce utilizatorul vede

pe ecran ci la toate mecanismele de comunicare între

acesta si program.

17.03.2016 Curs - Aplicatii Java 4

Page 5: Aplica ii JAVA - runceanu.roAsadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a clasei Container. Fiecare obiect de tip Container, sau o

[email protected]

1. Privire de ansamblu asupra interfetei grafice

Biblioteca de clase care oferaservicii grafice se numestejava.awt, AWT fiindprescurtarea de la Abstract Window Toolkit si estepachetul care care a suferitcele mai multe modificari întrecerea de la o versiune JDK la alta.

(*) http://way2java.com/awt-components/java-awt-components/

17.03.2016 Curs - Aplicatii Java 5

Page 6: Aplica ii JAVA - runceanu.roAsadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a clasei Container. Fiecare obiect de tip Container, sau o

[email protected]

1. Privire de ansamblu asupra interfetei grafice

In principiu, crearea unei aplicatii grafice presupune urmatoareleactivitati:1. Crearea unei suprafete de afisare (cum ar fi o fereastra) pe care

vor fi asezate obiectele grafice care servesc la comunicarea cu utilizatorul (butoane, controale de editare, texte, etc)

2. Crearea si asezarea obiectelor grafice pe suprafata de afisare înpozitiile corespunzatoare

3. Definirea unor actiuni care trebuie sa se execute în momentulcând utilizatorul interactioneaza cu obiectele grafice ale aplicatiei

4. "Ascultarea" evenimentelor generate de obiecte în momentulinteractiunii cu utilizatorul si executarea actiunilorcorespunzatoare asa cum au fost ele definite

17.03.2016 Curs - Aplicatii Java 6

Page 7: Aplica ii JAVA - runceanu.roAsadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a clasei Container. Fiecare obiect de tip Container, sau o

[email protected]

1. Privire de ansamblu asupra interfetei grafice

Majoritatea obiectelor grafice sunt subclase ale claseiComponent, clasa care defineste generic o componenta grafica care poate interactiona cu utilizatorul

Singura exceptie o constituie meniurile care provindin clasa MenuComponent

Printr-o componenta sau componenta graficaîntelegem orice obiect care are o reprezentaregrafica ce poate fi afisata pe ecran si care poateinteractiona cu utilizatorul

17.03.2016 Curs - Aplicatii Java 7

Page 8: Aplica ii JAVA - runceanu.roAsadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a clasei Container. Fiecare obiect de tip Container, sau o

[email protected]

1. Privire de ansamblu asupra interfetei grafice

Exemple de componente sunt: ferestre butoane bare de defilare, etc.

(*) https://pixelduke.wordpress.com/category/windows-8/page/2/(*) http://www.herongyang.com/Swing/JMenuBar-Menu-Item-Action-Listener-Test.html(*) http://www3.ntu.edu.sg/home/ehchua/programming/java/j4a_gui.html

17.03.2016 Curs - Aplicatii Java 8

Page 9: Aplica ii JAVA - runceanu.roAsadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a clasei Container. Fiecare obiect de tip Container, sau o

[email protected]

1. Privire de ansamblu asupra interfetei grafice

In general, toatecomponentele sunt defintede clase proprii ce se gasesc în pachetuljava.awt, clasaComponent fiindsuperclasa abstracta a tuturor acestor clase.

(*) http://way2java.com/awt-components/java-awt-components/

17.03.2016 Curs - Aplicatii Java 9

Page 10: Aplica ii JAVA - runceanu.roAsadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a clasei Container. Fiecare obiect de tip Container, sau o

[email protected]

1. Privire de ansamblu asupra interfetei grafice

Crearea obiectelor grafice nu realizeaza automat si afisarealor pe ecran.

Mai întâi ele trebuie asezate pe o suprafata de afisare, care poate fi o fereastra sau suprafata unui applet, si vor devenivizibile în momentul în care suprafata pe care sunt afisate va fi vizibila.

O astfel de suprafata pe care se aseaza obiectele graficereprezinta o instanta a unei clase obtinuta prin extensia claseiContainer; din acest motiv suprafetele de afisare se numesc sicontainere.

Clasa Container este o subclasa aparte a clasei Component, fiind la rândul ei superclasa tuturor suprafetelor de afisareJava (ferestre, applet-uri, etc).

17.03.2016 Curs - Aplicatii Java 10

Page 11: Aplica ii JAVA - runceanu.roAsadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a clasei Container. Fiecare obiect de tip Container, sau o

[email protected]

1. Privire de ansamblu asupra interfetei grafice

Interfata grafica serveste interactiunii cu utilizatorul. De cele mai multe ori programul trebuie sa faca o

anumita prelucrare în momentul în care utilizatorul a efectuat o actiune si, prin urmare, obiectele graficetrebuie sa genereze evenimente în functie de actiunea pe care au suferit-o (actiune transmisa de la tastatura, mouse, etc.).

Incepând cu versiunea 1.1 a limbajului Javaevenimentele se implementeaza ca obiecte instantaale clasei AWTEvent sau ale subclaselor ei.

17.03.2016 Curs - Aplicatii Java 11

Page 12: Aplica ii JAVA - runceanu.roAsadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a clasei Container. Fiecare obiect de tip Container, sau o

[email protected]

1. Privire de ansamblu asupra interfetei grafice

Un eveniment este produs de o actiune a utilizatoruluiasupra unui obiect grafic, deci evenimentele nu trebuie generate de programator.

In schimb, într-un program trebuie specificat codulcare se executa la aparitia unui eveniment.

Interceptarea evenimentelor se realizeaza prinintermediul unor clase de tip listener (ascultator, consumator de evenimente), clase care sunt definite înpachetul java.awt.event.

17.03.2016 Curs - Aplicatii Java 12

Page 13: Aplica ii JAVA - runceanu.roAsadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a clasei Container. Fiecare obiect de tip Container, sau o

[email protected]

5. Interfata grafica AWT

1. Privire de ansamblu asupra interfetei grafice2. Componente AWT3. Gestionari de pozitionare4. Gruparea componentelor (Clasa Panel)5. Tratarea evenimentelor6. Folosirea ferestrelor in AWT

1317.03.2016 Curs - Aplicatii Java

Page 14: Aplica ii JAVA - runceanu.roAsadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a clasei Container. Fiecare obiect de tip Container, sau o

[email protected]

2. Componente AWT

Prin componenta vom întelege în continuare oriceobiect care are o reprezentare grafica ce poate fi afisata pe ecran si care poate interactiona cu utilizatorul.

Exemple de componente sunt ferestrele, butoanele, bare de defilare, etc.

In general, toate componentele sunt definite de claseproprii ce se gasesc în pachetul java.awt, clasaComponent fiind superclasa abstracta a tuturoracestor clase.

17.03.2016 Curs - Aplicatii Java 14

Page 15: Aplica ii JAVA - runceanu.roAsadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a clasei Container. Fiecare obiect de tip Container, sau o

[email protected]

2. Componente AWT

Ierarhia acestor clase:

17.03.2016 Curs - Aplicatii Java 15

Page 16: Aplica ii JAVA - runceanu.roAsadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a clasei Container. Fiecare obiect de tip Container, sau o

[email protected]

2. Componente AWT

Din cauza unor diferente esentiale în implementarea meniurilor pe diferiteplatforme de operare acestea nu au putut fi integrate ca obiecte de tip Component.

Superclasa care descrie meniuri este MenuComponent iar ierarhia subclaselorsale este data în diagrama de mai jos:

Asadar, majoritatea obiectelor grafice sunt subclase ale clasei Component, clasacare defineste generic o component grafica care poate interactiona cu utilizatorul.

Singura exceptie o constituie meniurile care descind din clasa MenuComponent.

17.03.2016 Curs - Aplicatii Java 16

Page 17: Aplica ii JAVA - runceanu.roAsadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a clasei Container. Fiecare obiect de tip Container, sau o

[email protected]

2. Componente AWT

1. Suprafete de afisare (Clasa Container) Crearea obiectelor grafice nu realizeaza automat si

afisarea lor pe ecran. Mai întâi ele trebuie asezate pe o suprafata, care poate fi

o fereastra sau suprafata unui applet, si vor devenivizibile în momentul în care suprafata pe care sunt afisateva fi vizibila.

O astfel de suprafata pe care se aseaza obiectele graficese numeste suprafata de afisare sau container sireprezinta o instanta a unei clase obtinuta prin extensiasuperclasei Container.

17.03.2016 Curs - Aplicatii Java 17

Page 18: Aplica ii JAVA - runceanu.roAsadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a clasei Container. Fiecare obiect de tip Container, sau o

[email protected]

2. Componente AWT

O parte din ierarhia a careiradacina este Container este:

Asadar, un container este folosit pentru a adauga componente pesuprafata lui.

Componentele adaugate sunt memorate într-o lista iar pozitiile lordin aceasta lista vor defini ordinea de traversare "front-to-back" a acestora în cadrul containerului.

Daca nu este specificat nici un index la adaugarea unei componenteatunci ea va fi adaugata pe ultima pozitie a listei.

17.03.2016 Curs - Aplicatii Java 18

Page 19: Aplica ii JAVA - runceanu.roAsadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a clasei Container. Fiecare obiect de tip Container, sau o

[email protected]

2. Componente AWT

Exemplu: crearea unei ferestre ce contine doua butoane

import java.awt.*;public class TestAWT1 {public static void main(String args[]) {// se creeaza fereastra - un obiect de tip Frame

Frame f = new Frame("O fereastra");// se seteaza modul de dispunere a obiectelor pe suprafata ferestrei

f.setLayout(new FlowLayout());

17.03.2016 Curs - Aplicatii Java 19

Page 20: Aplica ii JAVA - runceanu.roAsadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a clasei Container. Fiecare obiect de tip Container, sau o

[email protected]

2. Componente AWT

// se creeaza cele doua butoane

Button b1 = new Button("OK");Button b2 = new Button("Cancel");// se adauga primul buton pe suprafata ferestrei

f.add(b1); f.pack();// se adauga al doilea buton pe suprafata ferestrei

f.add(b2); f.pack();// se afiseaza fereastra (devine vizibila)

f.show();}}

17.03.2016 Curs - Aplicatii Java 20

Page 21: Aplica ii JAVA - runceanu.roAsadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a clasei Container. Fiecare obiect de tip Container, sau o

[email protected]

2. Componente AWT

Fereastra afisata de acest program va arata astfel:

17.03.2016 Curs - Aplicatii Java 21

Page 22: Aplica ii JAVA - runceanu.roAsadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a clasei Container. Fiecare obiect de tip Container, sau o

[email protected]

2. Componente AWT

2. Adaugarea unei componente Clasa Container pune la dispozitie metoda add pentru

adaugarea unei componente pe o suprafata de afisare. O componenta nu poate apartine decât unui singur container,

ceea ce înseamna ca pentru a muta un obiect dintr-un container în altul trebuie sa-l eliminam mai întâi de pecontainerul initial.

Eliminarea unei componente de pe un container se face cu metoda remove.

Frame f = new Frame("O fereastra");Button b = new Button("OK");f.add(b); // se adauga butonul pe suprafata ferestreif.show();

17.03.2016 Curs - Aplicatii Java 22

Page 23: Aplica ii JAVA - runceanu.roAsadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a clasei Container. Fiecare obiect de tip Container, sau o

[email protected]

2. Componente AWT3. Gestionarea pozitionariiExemplu de program Java care afiseaza 5 butoane pe o fereastra:

17.03.2016 Curs - Aplicatii Java 23

import java.awt.*;public class TestLayout {public static void main(String args[]) {Frame f = new Frame("Grid Layout");f.setLayout(new GridLayout(3, 2)); //*Button b1 = new Button("Button 1");Button b2 = new Button("2");Button b3 = new Button("Button 3");

Button b4 = new Button("Long-Named Button 4");Button b5 = new Button("Button 5");f.add(b1); f.add(b2); f.add(b3); f.add(b4); f.add(b5);f.pack();f.show();}}

Page 24: Aplica ii JAVA - runceanu.roAsadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a clasei Container. Fiecare obiect de tip Container, sau o

[email protected]

2. Componente AWT

Se poate modifica linia marcata cu '*' ca mai jos, lasând neschimbat restul programului:

Frame f = new Frame("Flow Layout");f.setLayout(new FlowLayout()); Fereastra afisata dupa aceasta modificare va avea o

cu totul altfel de dispunere a componentelor sale:

17.03.2016 Curs - Aplicatii Java 24

Page 25: Aplica ii JAVA - runceanu.roAsadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a clasei Container. Fiecare obiect de tip Container, sau o

[email protected]

5. Interfata grafica AWT

1. Privire de ansamblu asupra interfetei grafice2. Componente AWT3. Gestionari de pozitionare4. Gruparea componentelor (Clasa Panel)5. Tratarea evenimentelor6. Folosirea ferestrelor in AWT

2517.03.2016 Curs - Aplicatii Java

Page 26: Aplica ii JAVA - runceanu.roAsadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a clasei Container. Fiecare obiect de tip Container, sau o

[email protected]

3. Gestionari de pozitionare

Un gestionar de pozitionare (layout manager) esteun obiect care controleaza dimensiunea si aranjarea(pozitia) componentelor unui container.

Asadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a claseiContainer.

Fiecare obiect de tip Container, sau o extensie a lui(Applet, Frame, Panel) are asociat un obiect care se ocupa cu dispunerea componentelor pe suprafata sa: gestionarul de pozitionare (layout manager).

17.03.2016 Curs - Aplicatii Java 26

Page 27: Aplica ii JAVA - runceanu.roAsadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a clasei Container. Fiecare obiect de tip Container, sau o

[email protected]

3. Gestionari de pozitionare

Toate clasele care instantiaza obiecte pentrugestionarea pozitionarii implementeaza interfataLayoutManager.

La instantierea unui container se creeaza implicit un gestionar de pozitionare asociat acestui container.

De exemplu pentru o fereastra (un obiect de tip Window sau o subclasa a sa) gestionarul implict estede tip BorderLayout, în timp ce pentru un container de tip Panel este o instanta a clasei FlowLayout.

17.03.2016 Curs - Aplicatii Java 27

Page 28: Aplica ii JAVA - runceanu.roAsadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a clasei Container. Fiecare obiect de tip Container, sau o

[email protected]

3. Gestionari de pozitionare

Folosirea gestionarilor de pozitionare Asa cum am vazut, orice container are un gestionar implicit de

pozitionare - un obiect care implemeneaza interfataLayoutManager, acesta fiindu-i atasat automat la crearea sa.

In cazul în care acesta nu corespunde necesitatilor, el poate fi schimbat cu usurinta.

Cei mai utilizati gestionari din pachetul java.awt sunt:1. FlowLayout2. BorderLayout3. GridLayout4. CardLayout5. GridBagLayout

17.03.2016 Curs - Aplicatii Java 28

Page 29: Aplica ii JAVA - runceanu.roAsadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a clasei Container. Fiecare obiect de tip Container, sau o

[email protected]

3. Gestionari de pozitionare

Atasarea explicita a unui gestionar de pozitionare la un container se face cu metoda setLayout a claseiContainer.

Metoda poate primi ca parametru orice instanta a uneiclase care implementeaza interfata LayoutManager.

Secventa de atasare a unui gestionar pentru un container este:

FlowLayout gestionar = new FlowLayout();container.setLayout(gestionar);sau, mai uzual:container.setLayout(new FlowLayout());

17.03.2016 Curs - Aplicatii Java 29

Page 30: Aplica ii JAVA - runceanu.roAsadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a clasei Container. Fiecare obiect de tip Container, sau o

[email protected]

3. Gestionari de pozitionare

Una din facilitatile cele mai utile oferite de gestionariide pozitionare este rearanjarea componentele unuicontainer atunci când acesta este redimesionat.

Pozitiile si dimensiunile componentelor nu sunt fixe, ele fiind ajustate automat de catre gestionar la fiecare redimensionare astfel încât sa ocupe cât mai"estetic" suprafata de afisare.

17.03.2016 Curs - Aplicatii Java 30

Page 31: Aplica ii JAVA - runceanu.roAsadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a clasei Container. Fiecare obiect de tip Container, sau o

[email protected]

3. Gestionari de pozitionare

Sunt însa situatii când dorim sa plasam componentele la anumite pozitii fixe iar acestea sa ramâna acolo chiardaca redimensionam containerul.

Folosind un gestionar de pozitionare aceasta pozitionareabsoluta a componentelor nu este posibila si deci trebuiecumva sa renuntam la gestionarea automata a containerul.

Acest lucru se realizeaza prin trimiterea argumentuluinull metodei setLayout:

// pozitionare absoluta a componentelor in containercontainer.setLayout(null);

17.03.2016 Curs - Aplicatii Java 31

Page 32: Aplica ii JAVA - runceanu.roAsadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a clasei Container. Fiecare obiect de tip Container, sau o

[email protected]

3. Gestionari de pozitionare

Folosind pozitionarea absoluta, nu va mai fi suficientsa adaugam cu metoda add componentele încontainer ci va trebui sa specificam pozitia sidimensiunea lor - acest lucru era facut automat de gestionarul de pozitionare.

Exemplu:

container.setLayout( null );Button b = new Button("Buton");b.setSize(10, 10); // se stabileste dimensiunea butonului

b.setLocation (0, 0); // se stabileste locatia in container-ul repstectiv

b.add();17.03.2016 Curs - Aplicatii Java 32

Page 33: Aplica ii JAVA - runceanu.roAsadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a clasei Container. Fiecare obiect de tip Container, sau o

[email protected]

5. Interfata grafica AWT

1. Privire de ansamblu asupra interfetei grafice2. Componente AWT3. Gestionari de pozitionare4. Gruparea componentelor (Clasa Panel)5. Tratarea evenimentelor6. Folosirea ferestrelor in AWT

3317.03.2016 Curs - Aplicatii Java

Page 34: Aplica ii JAVA - runceanu.roAsadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a clasei Container. Fiecare obiect de tip Container, sau o

[email protected]

4. Gruparea componentelor (Clasa Panel)

Plasarea componentelor direct pe suprafata de afisare poate deveni incomoda în cazul în care avemmulte obiecte grafice.

Din acest motiv se recomanda gruparea obiectelorgrafice înrudite ca functii astfel încât sa putem fi siguri ca, indiferent de gestionarul de pozitionare al suprafetei de afisare, ele se vor gasi împreuna.

Gruparea componentelor se face în panel-uri.

17.03.2016 Curs - Aplicatii Java 34

Page 35: Aplica ii JAVA - runceanu.roAsadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a clasei Container. Fiecare obiect de tip Container, sau o

[email protected]

4. Gruparea componentelor (Clasa Panel)

Un panel este cel mai simplu model de container. El nu are o reprezentare vizibila, rolul sau fiind de a oferi

o suprafata de afisare pentru componente grafice, inclusiv pentru alte panel-uri.

Clasa care instantiaza aceste obiecte este Panel, extensiea superclasei Container.

Pentru a aranja corespunzator componentele grupateîntr-un panel, acestuia i se poate specifica un gestionarde pozitionare anume, folosind metoda setLayout.

Gestionarul implicit pentru containerele de tip Panel esteFlowLayout.

17.03.2016 Curs - Aplicatii Java 35

Page 36: Aplica ii JAVA - runceanu.roAsadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a clasei Container. Fiecare obiect de tip Container, sau o

[email protected]

4. Gruparea componentelor (Clasa Panel)

Asadar, o aranjare eficienta a componentelor uneiferestre înseamna:1. gruparea componentelor "înfratite" (care nu trebuie

sa fie despartite de gestionarul de pozitionare al ferestrei) în panel-uri

2. aranjarea componentelor unui panel, prinspecificarea acestuia a unui gestionar de pozitionarecorespunzator

3. aranjarea panel-urilor pe suprafata ferestrei, prinspecificarea gestionarului de pozitionare al ferestrei

17.03.2016 Curs - Aplicatii Java 36

Page 37: Aplica ii JAVA - runceanu.roAsadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a clasei Container. Fiecare obiect de tip Container, sau o

[email protected]

4. Gruparea componentelor (Clasa Panel)Exempluimport java.awt.*;public class TestPanel {public static void main(String args[]) {

Frame f = new Frame("Panel");Panel panel = new Panel();panel.setLayout(new FlowLayout());panel.add(new Label("Text:"));panel.add(new TextField("", 20));panel.add(new Button("Reset"));f.add(panel, BorderLayout.NORTH);f.add(new Button("OK"), BorderLayout.EAST);f.add(new Button("Cancel"), BorderLayout.WEST);f.pack();f.show();}

}17.03.2016 Curs - Aplicatii Java 37

Page 38: Aplica ii JAVA - runceanu.roAsadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a clasei Container. Fiecare obiect de tip Container, sau o

[email protected]

5. Interfata grafica AWT

1. Privire de ansamblu asupra interfetei grafice2. Componente AWT3. Gestionari de pozitionare4. Gruparea componentelor (Clasa Panel)5. Tratarea evenimentelor6. Folosirea ferestrelor in AWT

3817.03.2016 Curs - Aplicatii Java

Page 39: Aplica ii JAVA - runceanu.roAsadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a clasei Container. Fiecare obiect de tip Container, sau o

[email protected]

5. Tratarea evenimentelor

Un eveniment este produs de o actiune a utilizatoruluiasupra unei componente grafice si reprezintamecanismul prin care utilizatorul comunica efectiv cu programul.

Exemple de evenimente sunt: apasarea unui butonmodificarea textului într-un control de editare închiderea, redimensionarea unei ferestre, etc. Componentele care genereaza anumite evenimente se mai numesc si surse de evenimente.17.03.2016 Curs - Aplicatii Java 39

Page 40: Aplica ii JAVA - runceanu.roAsadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a clasei Container. Fiecare obiect de tip Container, sau o

[email protected]

5. Tratarea evenimentelor

Interceptarea evenimentelor generate de componentele unui program se realizeaza prinintermediul unor clase de tip listener (ascultator, consumator de evenimente).

In Java, orice obiect poate "consuma" evenimentelegenerate de o anumita componenta grafica.

17.03.2016 Curs - Aplicatii Java 40

Utilizator(actiune)

Componenta (generare

eveniment)

Listener (interceptare eveniment)

Page 41: Aplica ii JAVA - runceanu.roAsadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a clasei Container. Fiecare obiect de tip Container, sau o

[email protected]

5. Tratarea evenimentelor

Asadar, pentru a scrie cod care sa se execute în momentulîn care utilizatorul interactioneaza cu o componentagrafica trebuie sa facem urmatoarele 2 lucruri:1. sa scriem o clasa de tip listener care sa "asculte"

evenimentele produse de acea componenta si în cadrulacestei clase sa implementam metode specifice pentrutratarea lor

2. sa comunicam componentei sursa ca respectiva clasa îi"asculta" evenimentele pe care le genereaza, cu altecuvinte sa înregistram acea clasa drept "consumator" al evenimentelor produse de componenta respectiva.

17.03.2016 Curs - Aplicatii Java 41

Page 42: Aplica ii JAVA - runceanu.roAsadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a clasei Container. Fiecare obiect de tip Container, sau o

[email protected]

5. Tratarea evenimentelor

Evenimentele sunt, ca orice altceva în Java, obiecte.

Clasele care descriu aceste obiecte se împart în mai multe

tipuri în functie de componenta care le genereaza, mai precis

în functie de actiunea utilizatorului asupra acesteia.

Pentru fiecare tip de eveniment exista o clasa care

instantiaza obiecte de acel tip (exemple): evenimentul generat de actionarea unui buton este implementat

prin clasa ActionEvent

evenimentul generat de modificarea unui text prin clasa TextEvent,

etc.

Toate aceste clase au ca superclasa comuna clasa AWTEvent.

17.03.2016 Curs - Aplicatii Java 42

Page 43: Aplica ii JAVA - runceanu.roAsadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a clasei Container. Fiecare obiect de tip Container, sau o

[email protected]

5. Tratarea evenimentelor

O clasa consumatoare de evenimente (listener) poatefi orice clasa care specifica în declaratia sa ca dorestesa asculte evenimente de un anumit tip.

Acest lucru se realizeaza prin implementarea uneiinterfete specifice fiecarui tip de eveniment.

17.03.2016 Curs - Aplicatii Java 43

Page 44: Aplica ii JAVA - runceanu.roAsadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a clasei Container. Fiecare obiect de tip Container, sau o

[email protected]

5. Tratarea evenimentelor

Astfel, pentru ascultarea evenimentelor de tip ActionEvent clasa respectiva trebuie sa implementezeinterfata ActionListener, pentru TextEvent interfatacare trebuie implementata este TextListener, etc.

Toate aceste interfete au suprainterfata comunaEventListener.

Exemple:class AscultaButoane implements ActionListener

class AscultaTexte implements TextListener17.03.2016 Curs - Aplicatii Java 44

Page 45: Aplica ii JAVA - runceanu.roAsadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a clasei Container. Fiecare obiect de tip Container, sau o

[email protected]

5. Tratarea evenimentelor

Intrucât o clasa poate implementa oricâte interfete eava putea sa asculte evenimente de mai multe tipuri:

class Ascultator implements ActionListener, TextListener

Vom vedea în continuare metodele fiecarei interfetepentru a sti ce trebuie sa implementeze o clasaconsumatoare de evenimente.

17.03.2016 Curs - Aplicatii Java 45

Page 46: Aplica ii JAVA - runceanu.roAsadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a clasei Container. Fiecare obiect de tip Container, sau o

[email protected]

5. Tratarea evenimentelor

Exemplu de tratare a evenimentelor

Inainte de a detalia aspectele prezentate mai sus, saconsideram un exemplu de tratare a evenimentelor.

Vom crea o fereastra care sa contina doua butoanecu numele "OK", repectiv "Cancel".

La apasarea fiecarui buton vom scrie pe bara titlu a ferestrei mesajul " Ati apasat butonul ...".

17.03.2016 Curs - Aplicatii Java 46

Page 47: Aplica ii JAVA - runceanu.roAsadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a clasei Container. Fiecare obiect de tip Container, sau o

[email protected]

5. Tratarea evenimentelor

Exemplu: Ascultarea evenimentelor de la doua butoane

import java.awt.*;import java.awt.event.*;class Fereastra extends Frame {

public Fereastra(String titlu) {super(titlu);

}public void initializare() {setLayout(new FlowLayout()); // se stabileste gestionarul

setSize(200, 100); // se dimensioneaza fereastra

17.03.2016 Curs - Aplicatii Java 47

Page 48: Aplica ii JAVA - runceanu.roAsadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a clasei Container. Fiecare obiect de tip Container, sau o

[email protected]

5. Tratarea evenimentelor

Button b1 = new Button("OK");add(b1); // se adauga primul buton

Button b2 = new Button("Cancel");add(b2); // se adauga al doilea buton

Ascultator listener = new Ascultator(this);b1.addActionListener(listener);b2.addActionListener(listener);

// ambele butoane sunt ascultate de obiectul "listener" instanta a clasei Ascultator, definita ulterior

}}

17.03.2016 Curs - Aplicatii Java 48

Page 49: Aplica ii JAVA - runceanu.roAsadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a clasei Container. Fiecare obiect de tip Container, sau o

[email protected]

5. Tratarea evenimentelorclass Ascultator implements ActionListener {private Fereastra f;public Ascultator (Fereastra f) {

this.f = f;}

// metoda interfetei ActionListenerpublic void actionPerformed(ActionEvent e) {String command = e.getActionCommand();// numele comenzii este numele butonului apasatSystem.out.println(e.toString());if (command.equals("OK")) f.setTitle("Ati apasat OK");else

if (command.equals("Cancel")) f.setTitle("Ati apasat Cancel");}

}17.03.2016 Curs - Aplicatii Java 49

Page 50: Aplica ii JAVA - runceanu.roAsadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a clasei Container. Fiecare obiect de tip Container, sau o

[email protected]

5. Tratarea evenimentelor

public class TestEvent { // fereastra principala

public static void main(String args[]) {Fereastra f = new Fereastra("ActionEvent");f.initializare();f.show();}

}

17.03.2016 Curs - Aplicatii Java 50

Page 51: Aplica ii JAVA - runceanu.roAsadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a clasei Container. Fiecare obiect de tip Container, sau o

[email protected]

5. Tratarea evenimentelor

Nu este obligatoriu sa definim clase speciale pentruascultarea evenimentelor.

In exemplul de mai sus am definit o clasa speciala"Ascultator" pentru a intercepta evenimenteleproduse de cele doua butoane si din acest motiv a trebuit sa trimitem ca parametru acestei claseinstanta la fereastra noastra.

17.03.2016 Curs - Aplicatii Java 51

Page 52: Aplica ii JAVA - runceanu.roAsadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a clasei Container. Fiecare obiect de tip Container, sau o

[email protected]

5. Tratarea evenimentelor

Mai corect ar fi fost sa folosim chiar clasa "Fereastra" pentru a-siasculta evenimentele produse de componentele sale:class Fereastra extends Frame implements ActionListener{

public Fereastra(String titlu) {super(titlu);

}public void initializare() {

. . .b1.addActionListener(this);b2.addActionListener(this);

//ambele butoane sunt ascultate chiar din clasa Fereastra//deci ascultatorul este instanta curenta: this}17.03.2016 Curs - Aplicatii Java 52

Page 53: Aplica ii JAVA - runceanu.roAsadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a clasei Container. Fiecare obiect de tip Container, sau o

[email protected]

5. Tratarea evenimentelor

public void actionPerformed(ActionEvent e) {String command = e.getActionCommand();

// numele comenzii este numele butonului apasatSystem.out.println(e.toString());if (command.equals("OK")) this.setTitle("Ati apasat OK");else

if (command.equals("Cancel")) this.setTitle("Ati apasatCancel");

}}. . .Asadar, orice clasa poate asculta evenimente de orice tip cu conditia sa implementeze interfetele specifice acelor evenimente.

17.03.2016 Curs - Aplicatii Java 53

Page 54: Aplica ii JAVA - runceanu.roAsadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a clasei Container. Fiecare obiect de tip Container, sau o

[email protected]

5. Tratarea evenimentelor

Tipuri de evenimente si componentele care le genereaza.

In tabelul de mai jos sunt prezentate în stânga tipurilede evenimente si interfetele iar în dreapta listacomponentelor ce pot genera evenimente de acel tip precum si o scurta explicatie despre motivul care le provoaca:

17.03.2016 Curs - Aplicatii Java 54

Page 55: Aplica ii JAVA - runceanu.roAsadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a clasei Container. Fiecare obiect de tip Container, sau o

[email protected]

5. Tratarea evenimentelor

17.03.2016 Curs - Aplicatii Java 55

Page 56: Aplica ii JAVA - runceanu.roAsadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a clasei Container. Fiecare obiect de tip Container, sau o

[email protected]

5. Tratarea evenimentelor

Evenimente suportatede o componenta

Urmatorul tabelprezinta o clasificare a evenimentelor înfunctie de componentele care le

suporta:

17.03.2016 Curs - Aplicatii Java 56

Page 57: Aplica ii JAVA - runceanu.roAsadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a clasei Container. Fiecare obiect de tip Container, sau o

[email protected]

5. Tratarea evenimentelor

Metodele interfetelor de tip

"listener"

Orice clasa care trateaza

evenimente trebuie sa

implementeze obligatoriu metodele

interfetelor corespunzatoare

evenimentelor pe care le trateaza.

Tabelul prezinta, pentru fiecare

interfata, metodele puse la

dispozitie si care trebuie

implementate de clasa ascultator.

17.03.2016 Curs - Aplicatii Java 57

Page 58: Aplica ii JAVA - runceanu.roAsadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a clasei Container. Fiecare obiect de tip Container, sau o

[email protected]

5. Tratarea evenimentelor

Folosirea adaptorilor si a claselor interne în tratareaevenimentelor Am vazut ca o clasa care trateaza evenimente de un

anumit tip trebuie sa implementeze interfatacorespunzatoare acelui tip.

Aceasta înseamna ca trebuie sa implementeze obligatoriutoate metodele definite de acea interfata, chiar daca nu specifica nici un cod pentru unele dintre ele.

Sunt însa situatii când acest lucru este suparator, mai ales atunci când nu ne intereseaza decât o singura metoda a interfetei.

17.03.2016 Curs - Aplicatii Java 58

Page 59: Aplica ii JAVA - runceanu.roAsadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a clasei Container. Fiecare obiect de tip Container, sau o

[email protected]

5. Tratarea evenimentelor

Un exemplu sugestiv este urmatorul: o fereastra care nu are specificat cod pentru tratarea evenimentelor sale nu poatefi închisa cu butonul standard marcat cu 'x' din coltuldreapta sus si nici cu combinatia de taste Alt+F4. Pentru a realiza acest lucru trebuie interceptat evenimentulde închidere a ferestrei în metoda windowClosing si apelataapoi metoda dispose de închidere a ferestrei, eventual urmata de iesirea din program, în cazul când este vorba de fereastra principala a aplicatiei. Aceasta înseamna ca trebuie sa implementam interfataWindowListener care are nu mai putin de sapte metode.

17.03.2016 Curs - Aplicatii Java 59

Page 60: Aplica ii JAVA - runceanu.roAsadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a clasei Container. Fiecare obiect de tip Container, sau o

[email protected]

5. Tratarea evenimentelor

// Crearea unei ferestre cu ascultarea evenimentelor sale// folosind implementarea directa a interfetei WindowListener

import java.awt.*;import java.awt.event.*;class Fereastra extends Frame implements WindowListener {

public Fereastra(String titlu) {super(titlu);this.addWindowListener(this);

}

17.03.2016 Curs - Aplicatii Java 60

Page 61: Aplica ii JAVA - runceanu.roAsadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a clasei Container. Fiecare obiect de tip Container, sau o

[email protected]

5. Tratarea evenimentelor

// metodele interfetei WindowListenerpublic void windowOpened(WindowEvent e) {}public void windowClosing(WindowEvent e) {

dispose(); // inchidere fereastraSystem.exit(0); // terminare program

}public void windowClosed(WindowEvent e) {}public void windowIconified(WindowEvent e) {}public void windowDeiconified(WindowEvent e) {}public void windowActivated(WindowEvent e) {}public void windowDeactivated(WindowEvent e) {}}

public class TestWindowListener {public static void main(String args[]) {

Fereastra f = new Fereastra("O fereastra");f.show();

} }17.03.2016 Curs - Aplicatii Java 61

Page 62: Aplica ii JAVA - runceanu.roAsadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a clasei Container. Fiecare obiect de tip Container, sau o

[email protected]

5. Tratarea evenimentelor

Observati ca trebuie sa implementam toatemetodele interfetei, chiar daca nu scriem nici un cod pentru ele.

Singura metoda care ne intereseaza estewindowClosing în care specificam ce trebuie facutatunci când utilizatorul doreste sa închida fereastra.

Pentru a evita scrierea inutila a acestor metodeexista o serie de clase care implementeaza interfetelede tip "listener" fara a specifica nici un cod pentrumetodele lor.

Aceste clase se numesc adaptori.17.03.2016 Curs - Aplicatii Java 62

Page 63: Aplica ii JAVA - runceanu.roAsadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a clasei Container. Fiecare obiect de tip Container, sau o

[email protected]

5. Tratarea evenimentelor

Folosirea adaptorilorUn adaptor este o clasa abstracta care implementeaza

o interfata de tip "listener".

Scopul unei astfel de clase este ca la crearea unui"ascultator" de evenimente, în loc sa implementa o anumita interfata si implicit toate metodele sale, saextindem adaptorul corespunzator interfetei respective (daca are!) si sa supradefinim doar metodele care ne intereseaza (cele în care vrem sa scriem o anumitasecventa de cod).

17.03.2016 Curs - Aplicatii Java 63

Page 64: Aplica ii JAVA - runceanu.roAsadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a clasei Container. Fiecare obiect de tip Container, sau o

[email protected]

5. Tratarea evenimentelorAdaptorul interfetei WindowListener este WindowAdapter iar folosirea acestuiaeste data în exemplul de mai jos:// Crearea unei ferestre cu ascultarea evenimentelor sale folosind extindereaclasei WindowAdapterimport java.awt.*;import java.awt.event.*;class Fereastra extends Frame {

public Fereastra(String titlu) {super(titlu);this.addWindowListener(new Ascultator());

}}class Ascultator extends WindowAdapter {// supradefinim metodele care ne intereseaza

public void windowClosing(WindowEvent e) {System.exit(0);

}} 17.03.2016 Curs - Aplicatii Java 64

Page 65: Aplica ii JAVA - runceanu.roAsadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a clasei Container. Fiecare obiect de tip Container, sau o

[email protected]

5. Tratarea evenimentelor

Avantajul clar al acestei modalitati de tratare a evenimentelor este reducerea coduluiprogramului, acesta devenind mult mai usorlizibil.

17.03.2016 Curs - Aplicatii Java 65

Page 66: Aplica ii JAVA - runceanu.roAsadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a clasei Container. Fiecare obiect de tip Container, sau o

[email protected]

5. Tratarea evenimentelor

Insa exista si doua dezavantaje majore:1. Dupa cum ati observat, fata de exemplul anterior clasa"Fereastra" nu poate extinde WindowAdapter deoareceea extinde deja clasa Frame si din acest motiv am construio noua clasa numita "Ascultator".Vom vedea însa ca acest dezavantaj poate fi eliminat prinfolosirea unei clase interne.2. Un alt dezavantaj este ca orice greseala de sintaxa îndeclararea unei metode a interfetei nu va produce o eroare de compilare dar nici nu va supradefini metodainterfetei ci, pur si simplu, va crea o metoda a claseirespective.

17.03.2016 Curs - Aplicatii Java 66

Page 67: Aplica ii JAVA - runceanu.roAsadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a clasei Container. Fiecare obiect de tip Container, sau o

[email protected]

5. Tratarea evenimentelor

class Ascultator extends WindowAdapter {// in loc de windowClosing scriem WindowClosing// nu supradefinim vreo metoda a clasei WindowAdapter// nu da nici o eroare// nu face nimic !public void WindowClosing(WindowEvent e) {

System.exit(0);}

}

17.03.2016 Curs - Aplicatii Java 67

Page 68: Aplica ii JAVA - runceanu.roAsadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a clasei Container. Fiecare obiect de tip Container, sau o

[email protected]

5. Tratarea evenimentelor

In tabelul de mai jos sunt datitoti adaptorii interfetelor de tip "listener" - se observa ca o interfata XXXListener are un adaptor de tipul XXXAdapter. Interfetele care nu au un adaptor sunt cele care definesc o singura metoda siprin urmare crearea unei claseadaptor nu îsi are rostul.

17.03.2016 Curs - Aplicatii Java 68

Page 69: Aplica ii JAVA - runceanu.roAsadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a clasei Container. Fiecare obiect de tip Container, sau o

[email protected]

5. Tratarea evenimentelor

Folosirea claselor interne (anonime)

Stim ca o clasa interna este o clasa declarata încadrul altei clase iar clasele anonime sunt acele claseinterne folosite doar pentru instantierea unui singurobiect de acel tip.

Un exemplu tipic de folosire a lor este instantiereaadaptorilor direct în corpul unei clase care continecomponente ale caror evenimente trebuieinterceptate.

17.03.2016 Curs - Aplicatii Java 69

Page 70: Aplica ii JAVA - runceanu.roAsadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a clasei Container. Fiecare obiect de tip Container, sau o

[email protected]

5. Tratarea evenimentelor

Clasa "Fereastra" din exemplul anterior poate fi scrisa astfel:class Fereastra extends Frame {

public Fereastra(String titlu) {super(titlu);

this.addWindowListener (new WindowAdapter() {//corpul clasei anonimepublic void windowClosing(WindowEvent e) {

System.exit(0); }});

}}Se observa cum codul programului a fost redus substantial prinfolosirea unui adaptor si a unei clase anonime.

17.03.2016 Curs - Aplicatii Java 70

Page 71: Aplica ii JAVA - runceanu.roAsadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a clasei Container. Fiecare obiect de tip Container, sau o

[email protected]

5. Interfata grafica AWT

1. Privire de ansamblu asupra interfetei grafice2. Componente AWT3. Gestionari de pozitionare4. Gruparea componentelor (Clasa Panel)5. Tratarea evenimentelor6. Folosirea ferestrelor in AWT

7117.03.2016 Curs - Aplicatii Java

Page 72: Aplica ii JAVA - runceanu.roAsadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a clasei Container. Fiecare obiect de tip Container, sau o

[email protected]

6. Folosirea ferestrelor in AWT

Dupa cum am vazut suprafetele de afisare ale componentelorgrafice (containerele) sunt extensii ale clasei Container.

O categorie aparte a acestor containere o reprezintaferestrele.

Spre deosebire de un applet care îsi poate plasacomponentele direct pe suprafata de afisare a browser-ului încare ruleaza, o aplicatie independenta are nevoie de propriileferestre pe care sa faca afisarea componentelor sale grafice.

Pentru dezvoltarea aplicatiilor care folosesc grafica se vorfolosi clasele Window si subclasele sale directe Frame siDialog.

17.03.2016 Curs - Aplicatii Java 72

Page 73: Aplica ii JAVA - runceanu.roAsadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a clasei Container. Fiecare obiect de tip Container, sau o

[email protected]

6. Folosirea ferestrelor in AWT

1. Clasa Window

Clasa Window este rar utilizata în mod direct. Ea permite crearea unor ferestre top-level care nu au

chenar si nici bara de meniuri. Pentru a crea ferestre mai complexe se utilizeaza

clasele Frame si Dialog.

(*) http://stackoverflow.com/questions/8976874/show-two-dialogs-on-top-of-each-other-using-java-swing(*) http://www3.ntu.edu.sg/home/ehchua/programming/java/j4a_gui.html

17.03.2016 Curs - Aplicatii Java 73

Page 74: Aplica ii JAVA - runceanu.roAsadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a clasei Container. Fiecare obiect de tip Container, sau o

[email protected]

6. Folosirea ferestrelor in AWT

Metodele mai importante ale clasei Window (mostenite de toatesubclasele sale) sunt date în tabelul de mai jos:

17.03.2016 Curs - Aplicatii Java 74

Page 75: Aplica ii JAVA - runceanu.roAsadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a clasei Container. Fiecare obiect de tip Container, sau o

[email protected]

6. Folosirea ferestrelor in AWT2. Clasa Frame

Este subclasa directa a clasei Window si este folositapentru crearea de ferestre independente sifunctionale, eventual continând bare de meniuri.

Orice aplicatie grafica independenta trebuie sa aibacel putin o fereastra, numita si fereastra principala, care va fi afisata la pornirea programului.

17.03.2016 Curs - Aplicatii Java 75

Page 76: Aplica ii JAVA - runceanu.roAsadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a clasei Container. Fiecare obiect de tip Container, sau o

[email protected]

6. Folosirea ferestrelor in AWT

Constructorii clasei Frame sunt:

1. Frame () - Construieste o fereastra, fara titlu, initial invizibila.

2. Frame(String title) - Construieste o fereastra, cu titlul specificat, initial invizibila.

17.03.2016 Curs - Aplicatii Java 76

Page 77: Aplica ii JAVA - runceanu.roAsadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a clasei Container. Fiecare obiect de tip Container, sau o

[email protected]

6. Folosirea ferestrelor in AWT

Asadar, o fereastra nou creata este invizibila. Pentru a fi facuta vizibila se va apela metoda show definitaîn superclasa Window. Exemplu:import java.awt.*;public class TestFrame {

public static void main(String args[]) {Frame f = new Frame("Fereastra exemplu");f.show();

}}

17.03.2016 Curs - Aplicatii Java 77

Page 78: Aplica ii JAVA - runceanu.roAsadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a clasei Container. Fiecare obiect de tip Container, sau o

[email protected]

6. Folosirea ferestrelor in AWT

Crearea ferestrelor prin instantierea obiectelor de tip Frame este mai putinuzuala. De obicei, ferestrele unui program vor fi definite în clase separate care extindclasa Frame, ca în exemplul de mai jos:

import java.awt.*;class Fereastra extends Frame{// constructorul ferestrei

public Fereastra(String titlu) {super(titlu);

}void initializare() {

. . .}}

17.03.2016 Curs - Aplicatii Java 78

public class TestFrame {public static void main(String args[]) {

Fereastra f = new Fereastra("Fereastra exemplu");f.initializare();f.show();}

}

Page 79: Aplica ii JAVA - runceanu.roAsadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a clasei Container. Fiecare obiect de tip Container, sau o

[email protected]

6. Folosirea ferestrelor in AWT

Gestionarul de pozitionare implicit al clasei Window este BorderLayout. Din acest motiv, în momentul în care fereastra este creata dar nici o

componenta grafica nu este pusa pe suprafata ei, suprafata de afisare a ferestrei va fi nula.

Acelasi efect îl vom obtine daca o redimenionam si apelam apoimetoda pack care determina dimeniunea suprafetei de afisare înfunctie de componentele grafice afisate pe ea.

Se observa de asemenea ca butonul de închidere a ferestrei nu estefunctional.

Interceptarea evenimentelor se face prin implementarea interfeteiWindowListener si prin adaugarea în lista ascultatorilor ferestrei(uzual) chiar a obiectului care implementeaza fereastra sau prinfolosirea unor adaptori si clase anonime.

17.03.2016 Curs - Aplicatii Java 79

Page 80: Aplica ii JAVA - runceanu.roAsadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a clasei Container. Fiecare obiect de tip Container, sau o

[email protected]

6. Folosirea ferestrelor in AWT

Metodele mai folosite ale clasei Frame sunt:

17.03.2016 Curs - Aplicatii Java 80

Page 81: Aplica ii JAVA - runceanu.roAsadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a clasei Container. Fiecare obiect de tip Container, sau o

[email protected]

6. Folosirea ferestrelor in AWT

3. Clasa DialogToate interfetele grafice ofera un tip special de ferestre destinate preluarii datelor de la utilizator. Acestea se numesc ferestre de dialog sau casete de dialog si sunt

implementate prin intermediul clasei Dialog, subclasa directa a clasei Window.

Diferenta majora între ferestrele de dialog si ferestrele normale (obiecte de tip Frame) consta în faptul ca o fereastra de dialog este dependenta de o alta fereastra (normala sau tot fereastra dialog), numita si fereastra parinte.

17.03.2016 Curs - Aplicatii Java 81

Page 82: Aplica ii JAVA - runceanu.roAsadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a clasei Container. Fiecare obiect de tip Container, sau o

[email protected]

6. Folosirea ferestrelor in AWT

Cu alte cuvinte, ferestrele de dialog nu au o existenta de sine statatoare.

Când fereastra parinte este distrusa sunt distruse siferestrele sale de dialog, când este minimizataferestrele sale de dialog sunt facute invizibile iar cândeste maximizata acestea sunt aduse la starea în care se gaseau în momentul minimizarii ferestrei parinte.

17.03.2016 Curs - Aplicatii Java 82

Page 83: Aplica ii JAVA - runceanu.roAsadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a clasei Container. Fiecare obiect de tip Container, sau o

[email protected]

6. Folosirea ferestrelor in AWT

Ferestrele de dialog pot fi de doua tipuri:

1. modale: care blocheaza accesul la fereastra parinteîn momentul deschiderii lor - de exemplu, ferestrede introducere a unor date, de alegere a unui fisierîn vederea deschideriii, de selectare a unei optiuni, mesaje de avertizare, etc;

2. nemodale: care nu blocheaza fluxul de intrare catrefereastra parinte - de exemplu, ferestrele de cautarea unui cuvânt într-un fisier.

17.03.2016 Curs - Aplicatii Java 83

Page 84: Aplica ii JAVA - runceanu.roAsadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a clasei Container. Fiecare obiect de tip Container, sau o

[email protected]

6. Folosirea ferestrelor in AWT

Implicit o fereastra de dialog este nemodala si invizibila.Constructorii clasei Dialog sunt:Dialog(Frame parinte)Dialog(Frame parinte, String titlu)Dialog(Frame parinte, String titlu, boolean modala)Dialog(Frame parinte, boolean modala)Dialog(Dialog parinte)Dialog(Dialog parinte, String titlu)Dialog(Dialog parinte, String titlu, boolean modala)Unde: "parinte" reprezina o instanta ferestrei parinte, "titlu" reprezinta titlul ferestrei iar prin argumentul "modala" specificam daca fereastra de

dialog creata va fi modala (true) sau nemodala (false - valoarea implicita).

17.03.2016 Curs - Aplicatii Java 84

Page 85: Aplica ii JAVA - runceanu.roAsadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a clasei Container. Fiecare obiect de tip Container, sau o

[email protected]

6. Folosirea ferestrelor in AWT

Pe lânga metodele mostenite de la superclasa Window clasa Dialog mai contine metodele:

Crearea unei ferestre de dialog este relativ simpla si se realizeaza prin crearea unei clase care sa extinda clasa Dialog.

Mai complicat este însa modul în care se implementeazacomunicarea între fereastra de dialog si fereastra parinte, pentru ca aceasta din urma sa poata folosi datele introduse(sau optiunea specificata) în caseta de dialog.

17.03.2016 Curs - Aplicatii Java 85

Page 86: Aplica ii JAVA - runceanu.roAsadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a clasei Container. Fiecare obiect de tip Container, sau o

[email protected]

6. Folosirea ferestrelor in AWT

Exista doua abordari generale:

1. obiectul care reprezinta dialogul poate sa capteze evenimentele de la componentele de pe suprafata sa si sa seteze valorile unor variabile ale ferestrei parinte în momentul în care dialogul este încheiat

2. obiectul care creeaza dialogul (fereastra parinte) sa se înregistreze ca ascultator al evenimentelor de la butoanele care determina încheierea dialogului, iar fereastra de dialog sa ofere metode publice prin care datele introduse sa fie preluate din exterior.

17.03.2016 Curs - Aplicatii Java 86

Page 87: Aplica ii JAVA - runceanu.roAsadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a clasei Container. Fiecare obiect de tip Container, sau o

[email protected]

6. Folosirea ferestrelor in AWT

Exemplu: sa se creeze o fereastra de dialog modala pentru introducerea unui sir de caractere. Fereastra principala a aplicatiei va fi parintele casetei

de dialog, va primi sirul de caractere introdus si îsi va modifica titlul ca fiind sirul primit.

Deschiderea ferestrei de dialog se va face la apasarea unui buton al ferestrei principale numit "Schimba titlul".

Dialogul va mai avea doua butoane OK si Cancel pentru terminarea sa cu confirmare, respectiv renuntare.

17.03.2016 Curs - Aplicatii Java 87

Page 88: Aplica ii JAVA - runceanu.roAsadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a clasei Container. Fiecare obiect de tip Container, sau o

[email protected]

6. Folosirea ferestrelor in AWT

Cele doua ferestre vor arata astfel:

17.03.2016 Curs - Aplicatii Java 88

Page 89: Aplica ii JAVA - runceanu.roAsadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a clasei Container. Fiecare obiect de tip Container, sau o

[email protected]

6. Folosirea ferestrelor in AWT

import java.awt.*;import java.awt.event.*;

// Fereastra principala a aplicatieiclass FerPrinc extends Frame implements ActionListener{

public FerPrinc(String titlu) {super(titlu);

this.addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {

System.exit(0);}

});}17.03.2016 Curs - Aplicatii Java 89

Page 90: Aplica ii JAVA - runceanu.roAsadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a clasei Container. Fiecare obiect de tip Container, sau o

[email protected]

6. Folosirea ferestrelor in AWT

public void initializare() {setLayout(new FlowLayout());setSize(300, 100);Button b = new Button("Schimba titlul");add(b);b.addActionListener(this);

}//metoda interfetei ActionListenerpublic void actionPerformed(ActionEvent e) {

FerDialog d = new FerDialog(this, "Titlu", true);// se verifica inchiderea ferestrei modale de dialogif (d.raspuns == null) return;setTitle(d.raspuns);}

}

17.03.2016 Curs - Aplicatii Java 90

Page 91: Aplica ii JAVA - runceanu.roAsadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a clasei Container. Fiecare obiect de tip Container, sau o

[email protected]

6. Folosirea ferestrelor in AWT

// fereastra de dialogclass FerDialog extends Dialog implements ActionListener {

public String raspuns = null;private TextField text;public FerDialog(Frame parinte, String titlu, boolean

modala) {super(parinte, titlu, modala);

this.addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {

raspuns = null;dispose();

}});

17.03.2016 Curs - Aplicatii Java 91

Page 92: Aplica ii JAVA - runceanu.roAsadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a clasei Container. Fiecare obiect de tip Container, sau o

[email protected]

6. Folosirea ferestrelor in AWT

setLayout(new FlowLayout());Button ok, cancel;ok = new Button("OK");cancel = new Button("Cancel");text = new TextField("", 50);add(cancel);add(text);add(ok);pack();ok.addActionListener(this);cancel.addActionListener(this);show();

}

17.03.2016 Curs - Aplicatii Java 92

Page 93: Aplica ii JAVA - runceanu.roAsadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a clasei Container. Fiecare obiect de tip Container, sau o

[email protected]

6. Folosirea ferestrelor in AWT

// metoda interfetei ActionListenerpublic void actionPerformed(ActionEvent e) {// se verifica ce buton a fost apasat

String buton = e.getActionCommand();if (buton.equals("OK")) raspuns = text.getText();else

if (buton.equals("Cancel")) raspuns = null;dispose();}

}

17.03.2016 Curs - Aplicatii Java 93

Page 94: Aplica ii JAVA - runceanu.roAsadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a clasei Container. Fiecare obiect de tip Container, sau o

[email protected]

6. Folosirea ferestrelor in AWT

// clasa principalapublic class TestDialog {

public static void main(String args[]) {FerPrinc f = new FerPrinc("Fereastra

principala");f.initializare();f.show();

}}

17.03.2016 Curs - Aplicatii Java 94

Page 95: Aplica ii JAVA - runceanu.roAsadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a clasei Container. Fiecare obiect de tip Container, sau o

[email protected]

Referinte

Curs practic de Java, Cristian Frasinaru – capitolulInterfata grafica cu utilizatorul

http://docs.oracle.com/javase/6/docs/technotes/guides/awt/

http://www.tutorialspoint.com//awk/index.htm

http://archive.oreilly.com/oreillyschool/courses/java3/archive/java3.2/java306.html

17.03.2016 Curs - Aplicatii Java 95

Page 96: Aplica ii JAVA - runceanu.roAsadar, modul de aranjare a componentelor pe o suprafata de afisare nu este o caracteristica a clasei Container. Fiecare obiect de tip Container, sau o

[email protected]

Întrebări?

17.03.2016 Curs - Aplicatii Java 96