DESPRE LIMBAJUL DE PROGRAMARE JAVA Balzs Katalin Trgu
DESPRE LIMBAJUL DE PROGRAMARE JAVA Balázs Katalin Tîrgu Mureș, 23. mai 2019
2. Interfețe grafice și tratarea evenimentelor a. Pachetul java. awt b. Tratarea evenimentelor c. Exerciții
a. Pachetul java. awt Un pachet de instrumente grafice, independent de platformă: Abstract Window Toolkit Alte pachete de instrumente grafice: SWING, SWT Interfața grafică: Ø cuprinde componentele grafice (widgets) Ø funcționează pe bază de evenimente Câteva componente grafice (controale) uzuale:
Interfața grafică (GUI): componente AWT componente native (peer) nivel intermediar (Toolkit) Modul de funcționare AWT: awt. Button() Toolkit Native add. Notify() create. Button () Button (peer object)
Componente AWT Componenta grafică Clasa din pachetul AWT Ierarhia parțială a claselor din pachetul AWT
Aranjarea componentelor: • se realizează în cadrul containerelor • cu ajutorul unui layout manager • container • diverse tipuri de implementări ale interfeței Layout. Manager: obiect Layout. Manager Ø Flow. Layout – plasarea componentelor se face în ordinea de la sânga la dreapta și de sus în jos Ø Border. Layout – containerul este împărțit în 5 regiuni: nord (north), sud (south), est (east), vest (west), centru (center) Ø Grid. Layout – componentele vor fi așezate într-o matrice de celule de dimensiuni egale Ø Grid. Bag. Layout – componentele vor fi plasate matriceal, o componentă poate fi așezată pe mai multe celule Ø Card. Layout – containerul este tratat ca un pachet de cărți
Exemplu: crearea unei ferestre cu 2 butoane și o etichetă import java. awt. Frame; import java. awt. Button; import java. awt. Label; import java. awt. Border. Layout; public class Example. Frame extends Frame { private Button buttons []; private Label label; public Example. Frame() { this. set. Title (“Un exemplu”); buttons = new Button [2]; buttons [0] = new Button (“Buton 1”); this. add (buttons[0] , Border. Layout. NORTH); buttons [1] = new Button (“Buton 2”); this. add (buttons[1] , Border. Layout. SOUTH); label = new Label (“Eticheta”); this. add (label , Border. Layout. CENTER); } public static main ( String[] args) { Example. Frame f = new Example. Frame (); f. set. Bounds ( 50, 200, 150); f. set. Visible (true); } } // derivat din clasa Frame // titlul ferestrei // crearea butoanelor // și adăugarea lor în container, unul în sus // celălalt în jos // crearea etichetei // așezarea ei în partea de mijloc // setarea dimensiunii ferestrei // setarea vizibilității ferestrei
b. Tratarea evenimentelor (event handling) Modelul de proiectare Observer = modelul observator-observat Obiectul observat (observable): • gestionează o listă de obiecte observator (listener) • anunță observatorul despre apariția unor schimbări de stare (evenimente) Evenimente (events): • sunt instanțe ale claselor eveniment • dispun de o sursă (source) • au unul sau mai multe receptoare (receptors) Obiectul observator (observer) : • sunt implementări ale interfeței Listener
Un exemplu de tratare a evenimentelor: activarea unui buton Butonul: este sursa evenimentului Button b = new Button(“OK”); Evenimentul: este de tip Action. Event, trebuie implementată interfața Action. Listener Metoda necesară înregistrării observatorului: public void add. Action. Listener(Action. Listener listener) Metoda necesară ștergerii observatorului : public void remove. Action. Listener (Action. Listener listener) Obiectul observat: implementează metoda action. Performed class Receptor implements Action. Listener { public void action. Performed (Action. Event e) { //codul ce va fi rulat la apariția evenimentului… } } Înregistrarea receptorului: b. add. Action. Listener (new Receptor ());
Evenimente AWT Clasa părinte a claselor eveniment: clasa de bază abstractă AWTEvent din pachetul java. awt este derivată din clasa Event. Object a pachetului java. util Câteva interfețe listener: • Component. Listener – urmărește modificarea proprietăților referitoare la aspectul componentelor • Focus. Listener • Key. Listener – urmărește evenimentele legate de tastatură • Mouse. Listener • Mouse. Motion. Listener – urmărește mișcarea mouse-ului – urmărește evenimentele legate de focusare – urmărește operațiile efectuate cu mouse-ul
Evenimente AWT generale Evenimentul Interfața listener Metoda Component. Event Component. Listener component. Resized component. Moved component. Shown component. Hidden Focus. Event Focus. Listener focus. Gained focus. Lost Key. Listener key. Typed key. Pressed key. Released Mouse. Event Mouse. Listener mouse. Clicked mouse. Pressed mouse. Released mouse. Entered mouse. Exited Mouse. Event Mouse. Motion. Listener mouse. Dragged mouse. Moved Container. Event Container. Listener component. Added component. Removed Key. Event
Evenimente legate de anumite tipuri de componente AWT Evenimentul Componenta Interfața listener Metoda Action. Event Button Text. Field List Menu. Item Action. Listener action. Performed Item. Event List Checkbox Choice Checkbox. Menu. Item. Listener item. State. Changed Adjustment. Event Scrollbar Scroll. Pane Adjustment. Listener adjustment. Value. Changed Text. Event Text. Field Text. Area Text. Listener text. Value. Changed Window. Listener window. Opened window. Closing window. Closed window. Activated window. Deactivated window. Iconified window. Deiconified Window. Event Frame Dialog
c. Exerciții Modificați fereastra realizată anterior în așa fel, încât în momentul acționării unui buton, pe etichetă să apară numele butonului corespunzător activat. Scrieți secvența de cod, care să permită închiderea ferestrei. Rezolvați, ca în momentul acționării primului buton, pe eticheta lui să apară conținutul Primul, iar la acționarea celui de al doilea buton să apară textul Al doilea.
Indicații de rezolvare 1. Completăm clasa cu metoda action. Performed care implementează interfața Action. Listener: public void action. Performed(Action. Event e) { label. set. Text(e. get. Action. Command()); } 2. // implementăm metoda // pe etichetă apare numele butonului activat Asociem butoanelor câte un listener: buttons[0]. add. Action. Listener(this); buttons[1]. add. Action. Listener(this); 2. Pentru închiderea ferestrei putem utiliza clasa Windows. Adapter corespunzătoare interfeței Windows. Listener. add. Window. Listener (new Window. Adapter() { public void window. Closing(Window. Event e) { System. exit(0); } }); // înregistrarea observatorului // clasă fără nume // derivată din Window. Adapter
Bibliografie: • Simon Károly: A Java programozás alapjai • Sedgewick R. , Wayne K. - Introduction to Programming in Java, 2 nd edition – 2017 • http: //www. ntu. edu. sg/home/ehchua/programming/java/j 4 a_gui. html
- Slides: 15