New Aplica ii JAVA - Runceanu · 2007. 9. 5. · Aplicații JAVA Universitatea “Constantin...

93
Aplica ț ii JAVA Universitatea Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie şi Mediu Lect.dr . Adrian Runceanu

Transcript of New Aplica ii JAVA - Runceanu · 2007. 9. 5. · Aplicații JAVA Universitatea “Constantin...

Page 1: New Aplica ii JAVA - Runceanu · 2007. 9. 5. · Aplicații JAVA Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie

Aplicații JAVA

Universitatea “Constantin Brâncuşi” din Târgu-JiuFacultatea de Inginerie

Departamentul de Automatică, Energie şi Mediu

Lect.dr. Adrian Runceanu

Page 2: New Aplica ii JAVA - Runceanu · 2007. 9. 5. · Aplicații JAVA Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie

[email protected]

Curs 8

Interfata grafica AWT

22.04.2015 Curs - Aplicatii Java 2

Page 3: New Aplica ii JAVA - Runceanu · 2007. 9. 5. · Aplicații JAVA Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie

[email protected]

8. 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

322.04.2015 Curs - Aplicatii Java

Page 4: New Aplica ii JAVA - Runceanu · 2007. 9. 5. · Aplicații JAVA Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie

[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.

22.04.2015 Curs - Aplicatii Java 4

Page 5: New Aplica ii JAVA - Runceanu · 2007. 9. 5. · Aplicații JAVA Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie

[email protected]

1. Privire de ansamblu asupra interfetei grafice

Biblioteca de clase care ofera servicii grafice se numeste java.awt, AWT fiind prescurtarea de la Abstract Window Toolkit si este pachetul care care a suferit cele mai multe modificari în trecerea de la o versiune JDK la alta.

22.04.2015 Curs - Aplicatii Java 5

Page 6: New Aplica ii JAVA - Runceanu · 2007. 9. 5. · Aplicații JAVA Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie

[email protected]

1. Privire de ansamblu asupra interfetei grafice

In principiu, crearea unei aplicatii grafice presupune urmatoareleactivitati: 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);

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

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

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

22.04.2015 Curs - Aplicatii Java 6

Page 7: New Aplica ii JAVA - Runceanu · 2007. 9. 5. · Aplicații JAVA Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie

[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 descinddin 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

22.04.2015 Curs - Aplicatii Java 7

Page 8: New Aplica ii JAVA - Runceanu · 2007. 9. 5. · Aplicații JAVA Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie

[email protected]

1. Privire de ansamblu asupra interfetei grafice

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

In general, toate componentele sunt definte de claseproprii ce se gasesc în pachetul java.awt, clasaComponent fiind superclasa abstracta a tuturor acestorclase.

22.04.2015 Curs - Aplicatii Java 8

Page 9: New Aplica ii JAVA - Runceanu · 2007. 9. 5. · Aplicații JAVA Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie

[email protected]

1. Privire de ansamblu asupra interfetei grafice

Crearea obiectelor grafice nu realizeaza automat si afisarea lorpe 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).

22.04.2015 Curs - Aplicatii Java 9

Page 10: New Aplica ii JAVA - Runceanu · 2007. 9. 5. · Aplicații JAVA Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie

[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.

22.04.2015 Curs - Aplicatii Java 10

Page 11: New Aplica ii JAVA - Runceanu · 2007. 9. 5. · Aplicații JAVA Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie

[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.

22.04.2015 Curs - Aplicatii Java 11

Page 12: New Aplica ii JAVA - Runceanu · 2007. 9. 5. · Aplicații JAVA Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie

[email protected]

8. 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

1222.04.2015 Curs - Aplicatii Java

Page 13: New Aplica ii JAVA - Runceanu · 2007. 9. 5. · Aplicații JAVA Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie

[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 definte de claseproprii ce se gasesc în pachetul java.awt, clasaComponent fiind superclasa abstracta a tuturoracestor clase.

22.04.2015 Curs - Aplicatii Java 13

Page 14: New Aplica ii JAVA - Runceanu · 2007. 9. 5. · Aplicații JAVA Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie

[email protected]

2. Componente AWT

Ierarhia acestor clase:

22.04.2015 Curs - Aplicatii Java 14

Page 15: New Aplica ii JAVA - Runceanu · 2007. 9. 5. · Aplicații JAVA Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie

[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.

22.04.2015 Curs - Aplicatii Java 15

Page 16: New Aplica ii JAVA - Runceanu · 2007. 9. 5. · Aplicații JAVA Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie

[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.

22.04.2015 Curs - Aplicatii Java 16

Page 17: New Aplica ii JAVA - Runceanu · 2007. 9. 5. · Aplicații JAVA Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie

[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.

22.04.2015 Curs - Aplicatii Java 17

Page 18: New Aplica ii JAVA - Runceanu · 2007. 9. 5. · Aplicații JAVA Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie

[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());

22.04.2015 Curs - Aplicatii Java 18

Page 19: New Aplica ii JAVA - Runceanu · 2007. 9. 5. · Aplicații JAVA Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie

[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();}}

22.04.2015 Curs - Aplicatii Java 19

Page 20: New Aplica ii JAVA - Runceanu · 2007. 9. 5. · Aplicații JAVA Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie

[email protected]

2. Componente AWT

Fereastra afisata de acest program va arata astfel:

22.04.2015 Curs - Aplicatii Java 20

Page 21: New Aplica ii JAVA - Runceanu · 2007. 9. 5. · Aplicații JAVA Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie

[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();

22.04.2015 Curs - Aplicatii Java 21

Page 22: New Aplica ii JAVA - Runceanu · 2007. 9. 5. · Aplicații JAVA Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie

[email protected]

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

22.04.2015 Curs - Aplicatii Java 22

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 23: New Aplica ii JAVA - Runceanu · 2007. 9. 5. · Aplicații JAVA Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie

[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:

22.04.2015 Curs - Aplicatii Java 23

Page 24: New Aplica ii JAVA - Runceanu · 2007. 9. 5. · Aplicații JAVA Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie

[email protected]

8. 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

2422.04.2015 Curs - Aplicatii Java

Page 25: New Aplica ii JAVA - Runceanu · 2007. 9. 5. · Aplicații JAVA Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie

[email protected]

3. Gestionari de pozitionare

Un gestionar de pozitionare (layout manager) este un

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 clasei

Container.

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.

22.04.2015 Curs - Aplicatii Java 25

Page 26: New Aplica ii JAVA - Runceanu · 2007. 9. 5. · Aplicații JAVA Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie

[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.

22.04.2015 Curs - Aplicatii Java 26

Page 27: New Aplica ii JAVA - Runceanu · 2007. 9. 5. · Aplicații JAVA Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie

[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

22.04.2015 Curs - Aplicatii Java 27

Page 28: New Aplica ii JAVA - Runceanu · 2007. 9. 5. · Aplicații JAVA Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie

[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());

22.04.2015 Curs - Aplicatii Java 28

Page 29: New Aplica ii JAVA - Runceanu · 2007. 9. 5. · Aplicații JAVA Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie

[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.

22.04.2015 Curs - Aplicatii Java 29

Page 30: New Aplica ii JAVA - Runceanu · 2007. 9. 5. · Aplicații JAVA Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie

[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);

22.04.2015 Curs - Aplicatii Java 30

Page 31: New Aplica ii JAVA - Runceanu · 2007. 9. 5. · Aplicații JAVA Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie

[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.

container.setLayout( null );Button b = new Button("Buton");b.setSize(10, 10);b.setLocation (0, 0);b.add();

22.04.2015 Curs - Aplicatii Java 31

Page 32: New Aplica ii JAVA - Runceanu · 2007. 9. 5. · Aplicații JAVA Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie

[email protected]

8. 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

3222.04.2015 Curs - Aplicatii Java

Page 33: New Aplica ii JAVA - Runceanu · 2007. 9. 5. · Aplicații JAVA Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie

[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.

22.04.2015 Curs - Aplicatii Java 33

Page 34: New Aplica ii JAVA - Runceanu · 2007. 9. 5. · Aplicații JAVA Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie

[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.

22.04.2015 Curs - Aplicatii Java 34

Page 35: New Aplica ii JAVA - Runceanu · 2007. 9. 5. · Aplicații JAVA Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie

[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 pozitionare corespunzator

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

22.04.2015 Curs - Aplicatii Java 35

Page 36: New Aplica ii JAVA - Runceanu · 2007. 9. 5. · Aplicații JAVA Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie

[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();}

}22.04.2015 Curs - Aplicatii Java 36

Page 37: New Aplica ii JAVA - Runceanu · 2007. 9. 5. · Aplicații JAVA Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie

[email protected]

8. 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

3722.04.2015 Curs - Aplicatii Java

Page 38: New Aplica ii JAVA - Runceanu · 2007. 9. 5. · Aplicații JAVA Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie

[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.

22.04.2015 Curs - Aplicatii Java 38

Page 39: New Aplica ii JAVA - Runceanu · 2007. 9. 5. · Aplicații JAVA Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie

[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.

22.04.2015 Curs - Aplicatii Java 39

Utilizator(actiune)

Componenta (generare eveniment)

Listener (interceptare eveniment)

Page 40: New Aplica ii JAVA - Runceanu · 2007. 9. 5. · Aplicații JAVA Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie

[email protected]

5. Tratarea evenimentelor

Asadar, pentru a scrie cod care sa se execute în momentulîn care utilizatorul interactioneaza cu o componenta graficatrebuie sa facem urmatoarele 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.

22.04.2015 Curs - Aplicatii Java 40

Page 41: New Aplica ii JAVA - Runceanu · 2007. 9. 5. · Aplicații JAVA Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie

[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; de exemplu: evenimentul generat de actionarea unui buton este

implementat prin clasa ActionEvent,

cel generat de modificarea unui text prin clasa TextEvent, etc.

Toate aceste clase au ca superclasa comuna clasa

AWTEvent.22.04.2015 Curs - Aplicatii Java 41

Page 42: New Aplica ii JAVA - Runceanu · 2007. 9. 5. · Aplicații JAVA Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie

[email protected]

5. Tratarea evenimentelor

O clasa consumatoare de evenimente (listener) poate fi orice clasa care specifica în declaratia sa ca doreste saasculte evenimente de un anumit tip.

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

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

Toate aceste interfete au suprainterfata comunaEventListener.

22.04.2015 Curs - Aplicatii Java 42

Page 43: New Aplica ii JAVA - Runceanu · 2007. 9. 5. · Aplicații JAVA Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie

[email protected]

5. Tratarea evenimentelor

class AscultaButoane implements ActionListenerclass AscultaTexte implements TextListener Intrucât o clasa poate implementa oricâte interfete

ea va putea sa asculte evenimente de mai multetipuri:

class Ascultator implements ActionListener, TextListener Vom vedea în continuare metodele fiecarei interfete

pentru a sti ce trebuie sa implementeze o clasaconsumatoare de evenimente.

22.04.2015 Curs - Aplicatii Java 43

Page 44: New Aplica ii JAVA - Runceanu · 2007. 9. 5. · Aplicații JAVA Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie

[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 ...".

22.04.2015 Curs - Aplicatii Java 44

Page 45: New Aplica ii JAVA - Runceanu · 2007. 9. 5. · Aplicații JAVA Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie

[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 gestionarulsetSize(200, 100); // se dimensioneaza fereastra

22.04.2015 Curs - Aplicatii Java 45

Page 46: New Aplica ii JAVA - Runceanu · 2007. 9. 5. · Aplicații JAVA Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie

[email protected]

5. Tratarea evenimentelor

Button b1 = new Button("OK");add(b1); // se adauga primul butonButton b2 = new Button("Cancel");add(b2); // se adauga al doilea butonAscultator listener = new Ascultator(this);b1.addActionListener(listener);b2.addActionListener(listener);

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

}}

22.04.2015 Curs - Aplicatii Java 46

Page 47: New Aplica ii JAVA - Runceanu · 2007. 9. 5. · Aplicații JAVA Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie

[email protected]

5. Tratarea evenimentelor

class 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");}

}

22.04.2015 Curs - Aplicatii Java 47

Page 48: New Aplica ii JAVA - Runceanu · 2007. 9. 5. · Aplicații JAVA Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie

[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();}

}

22.04.2015 Curs - Aplicatii Java 48

Page 49: New Aplica ii JAVA - Runceanu · 2007. 9. 5. · Aplicații JAVA Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie

[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.

22.04.2015 Curs - Aplicatii Java 49

Page 50: New Aplica ii JAVA - Runceanu · 2007. 9. 5. · Aplicații JAVA Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie

[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}22.04.2015 Curs - Aplicatii Java 50

Page 51: New Aplica ii JAVA - Runceanu · 2007. 9. 5. · Aplicații JAVA Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie

[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.22.04.2015 Curs - Aplicatii Java 51

Page 52: New Aplica ii JAVA - Runceanu · 2007. 9. 5. · Aplicații JAVA Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie

[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:

22.04.2015 Curs - Aplicatii Java 52

Page 53: New Aplica ii JAVA - Runceanu · 2007. 9. 5. · Aplicații JAVA Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie

[email protected]

5. Tratarea evenimentelor

22.04.2015 Curs - Aplicatii Java 53

Page 54: New Aplica ii JAVA - Runceanu · 2007. 9. 5. · Aplicații JAVA Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie

[email protected]

5. Tratarea evenimentelor

Evenimente suportatede o componenta

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

suporta:

22.04.2015 Curs - Aplicatii Java 54

Page 55: New Aplica ii JAVA - Runceanu · 2007. 9. 5. · Aplicații JAVA Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie

[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.

22.04.2015 Curs - Aplicatii Java 55

Page 56: New Aplica ii JAVA - Runceanu · 2007. 9. 5. · Aplicații JAVA Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie

[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.

22.04.2015 Curs - Aplicatii Java 56

Page 57: New Aplica ii JAVA - Runceanu · 2007. 9. 5. · Aplicații JAVA Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie

[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.

22.04.2015 Curs - Aplicatii Java 57

Page 58: New Aplica ii JAVA - Runceanu · 2007. 9. 5. · Aplicații JAVA Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie

[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);

}

22.04.2015 Curs - Aplicatii Java 58

Page 59: New Aplica ii JAVA - Runceanu · 2007. 9. 5. · Aplicații JAVA Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie

[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();}}

22.04.2015 Curs - Aplicatii Java 59

Page 60: New Aplica ii JAVA - Runceanu · 2007. 9. 5. · Aplicații JAVA Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie

[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.22.04.2015 Curs - Aplicatii Java 60

Page 61: New Aplica ii JAVA - Runceanu · 2007. 9. 5. · Aplicații JAVA Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie

[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 interfeteirespective (daca are!) si sa supradefinim doarmetodele care ne intereseaza (cele în care vrem sascriem o anumita secventa de cod).

22.04.2015 Curs - Aplicatii Java 61

Page 62: New Aplica ii JAVA - Runceanu · 2007. 9. 5. · Aplicații JAVA Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie

[email protected]

5. Tratarea evenimentelor

Adaptorul interfetei WindowListener este WindowAdapter iar folosirea acestuia estedata în exemplul de mai jos:// Crearea unei ferestre cu ascultarea evenimentelor sale folosind extinderea claseiWindowAdapterimport 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);

}}22.04.2015 Curs - Aplicatii Java 62

Page 63: New Aplica ii JAVA - Runceanu · 2007. 9. 5. · Aplicații JAVA Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie

[email protected]

5. Tratarea evenimentelor

Avantajul clar al acestei modalitati de tratare a evenimentelor este reducerea codului programului, acesta devenind mult mai usor lizibil. Insa exista si doua dezavantaje majore:1. Dupa cum ati observat, fata de exemplul anterior clasa "Fereastra" nu poate extinde WindowAdapterdeoarece ea extinde deja clasa Frame si din acest motivam construi o noua clasa numita "Ascultator".Vom vedea însa ca acest dezavantaj poate fi eliminatprin folosirea unei clase interne.

22.04.2015 Curs - Aplicatii Java 63

Page 64: New Aplica ii JAVA - Runceanu · 2007. 9. 5. · Aplicații JAVA Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie

[email protected]

5. Tratarea evenimentelor

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.

22.04.2015 Curs - Aplicatii Java 64

Page 65: New Aplica ii JAVA - Runceanu · 2007. 9. 5. · Aplicații JAVA Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie

[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);}}

22.04.2015 Curs - Aplicatii Java 65

Page 66: New Aplica ii JAVA - Runceanu · 2007. 9. 5. · Aplicații JAVA Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie

[email protected]

5. Tratarea evenimentelor

In tabelul de mai jos sunt datitoti adaptorii interfetele de tip "listener" - se oberva 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.

22.04.2015 Curs - Aplicatii Java 66

Page 67: New Aplica ii JAVA - Runceanu · 2007. 9. 5. · Aplicații JAVA Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie

[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.

22.04.2015 Curs - Aplicatii Java 67

Page 68: New Aplica ii JAVA - Runceanu · 2007. 9. 5. · Aplicații JAVA Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie

[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.

22.04.2015 Curs - Aplicatii Java 68

Page 69: New Aplica ii JAVA - Runceanu · 2007. 9. 5. · Aplicații JAVA Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie

[email protected]

8. 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

6922.04.2015 Curs - Aplicatii Java

Page 70: New Aplica ii JAVA - Runceanu · 2007. 9. 5. · Aplicații JAVA Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie

[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.

22.04.2015 Curs - Aplicatii Java 70

Page 71: New Aplica ii JAVA - Runceanu · 2007. 9. 5. · Aplicații JAVA Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie

[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 utilizeazaclasele Frame si Dialog.

22.04.2015 Curs - Aplicatii Java 71

Page 72: New Aplica ii JAVA - Runceanu · 2007. 9. 5. · Aplicații JAVA Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie

[email protected]

6. Folosirea ferestrelor in AWT

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

22.04.2015 Curs - Aplicatii Java 72

Page 73: New Aplica ii JAVA - Runceanu · 2007. 9. 5. · Aplicații JAVA Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie

[email protected]

6. Folosirea ferestrelor in AWT

2. 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.

22.04.2015 Curs - Aplicatii Java 73

Page 74: New Aplica ii JAVA - Runceanu · 2007. 9. 5. · Aplicații JAVA Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie

[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.

22.04.2015 Curs - Aplicatii Java 74

Page 75: New Aplica ii JAVA - Runceanu · 2007. 9. 5. · Aplicații JAVA Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie

[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();

}}

22.04.2015 Curs - Aplicatii Java 75

Page 76: New Aplica ii JAVA - Runceanu · 2007. 9. 5. · Aplicații JAVA Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie

[email protected]

6. Folosirea ferestrelor in AWT

Crearea ferestrelor prin instantierea obiectelor de tip Frame este mai putin

uzuala.

De obicei, ferestrele unui program vor fi definite în clase separate care extind

clasa Frame, ca în exemplul de mai jos:

import java.awt.*;

class Fereastra extends Frame{// constructorul ferestrei

public Fereastra(String titlu) {

super(titlu);

}

void initializare() {

. . .

}

}22.04.2015 Curs - Aplicatii Java 76

public class TestFrame {

public static void main(String args[]) {

Fereastra f = new

Fereastra("Fereastra exemplu");

f.initializare();

f.show();

}

}

Page 77: New Aplica ii JAVA - Runceanu · 2007. 9. 5. · Aplicații JAVA Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie

[email protected]

6. Folosirea ferestrelor in AWT

Gestionarul de pozitionare implicit al clasei Window esteBorderLayout. 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 feretrei 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.

22.04.2015 Curs - Aplicatii Java 77

Page 78: New Aplica ii JAVA - Runceanu · 2007. 9. 5. · Aplicații JAVA Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie

[email protected]

6. Folosirea ferestrelor in AWT

Metodele mai folosite ale clasei Frame sunt:

22.04.2015 Curs - Aplicatii Java 78

Page 79: New Aplica ii JAVA - Runceanu · 2007. 9. 5. · Aplicații JAVA Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie

[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.

22.04.2015 Curs - Aplicatii Java 79

Page 80: New Aplica ii JAVA - Runceanu · 2007. 9. 5. · Aplicații JAVA Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie

[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.

22.04.2015 Curs - Aplicatii Java 80

Page 81: New Aplica ii JAVA - Runceanu · 2007. 9. 5. · Aplicații JAVA Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie

[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.

22.04.2015 Curs - Aplicatii Java 81

Page 82: New Aplica ii JAVA - Runceanu · 2007. 9. 5. · Aplicații JAVA Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie

[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).22.04.2015 Curs - Aplicatii Java 82

Page 83: New Aplica ii JAVA - Runceanu · 2007. 9. 5. · Aplicații JAVA Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie

[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 realizeazaprin 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 (sauoptiunea specificata) în caseta de dialog.

22.04.2015 Curs - Aplicatii Java 83

Page 84: New Aplica ii JAVA - Runceanu · 2007. 9. 5. · Aplicații JAVA Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie

[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 sa seteze valorile unor variabile ale ferestrei parinte în momentul în care dialogul este încheiat sau2. obiectul care creeaza dialogul (fereastra parinte) sa se înregistreze ca ascultator al evenimentelor de labutoanele care determina încheierea dialogului, iar fereastra de dialog sa ofere metode publice prin care datele introduse sa fie preluate din exterior.

22.04.2015 Curs - Aplicatii Java 84

Page 85: New Aplica ii JAVA - Runceanu · 2007. 9. 5. · Aplicații JAVA Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie

[email protected]

6. Folosirea ferestrelor in AWT

Sa cream, de exemplu, 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.

22.04.2015 Curs - Aplicatii Java 85

Page 86: New Aplica ii JAVA - Runceanu · 2007. 9. 5. · Aplicații JAVA Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie

[email protected]

6. Folosirea ferestrelor in AWT

Cele doua ferestre vor arata astfel:

22.04.2015 Curs - Aplicatii Java 86

Page 87: New Aplica ii JAVA - Runceanu · 2007. 9. 5. · Aplicații JAVA Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie

[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);}});}

22.04.2015 Curs - Aplicatii Java 87

Page 88: New Aplica ii JAVA - Runceanu · 2007. 9. 5. · Aplicații JAVA Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie

[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);}

}

22.04.2015 Curs - Aplicatii Java 88

Page 89: New Aplica ii JAVA - Runceanu · 2007. 9. 5. · Aplicații JAVA Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie

[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();

}});

22.04.2015 Curs - Aplicatii Java 89

Page 90: New Aplica ii JAVA - Runceanu · 2007. 9. 5. · Aplicații JAVA Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie

[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();

}

22.04.2015 Curs - Aplicatii Java 90

Page 91: New Aplica ii JAVA - Runceanu · 2007. 9. 5. · Aplicații JAVA Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie

[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();}

}

22.04.2015 Curs - Aplicatii Java 91

Page 92: New Aplica ii JAVA - Runceanu · 2007. 9. 5. · Aplicații JAVA Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie

[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();

}}

22.04.2015 Curs - Aplicatii Java 92

Page 93: New Aplica ii JAVA - Runceanu · 2007. 9. 5. · Aplicații JAVA Universitatea “Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie

[email protected]

Întrebări?

22.04.2015 Curs - Aplicatii Java 93