Evenimente
Aplicatiile cu interfata grafica sunt aplicatii orientate pe evenimente. Evenimentele reprezinta componente de baza ale aplicatiilor cu interfata grafica. O astfel de aplicatie prezinta un comportament specific pentru diferitele tipuri de evenimente care sunt generate pe parcursul executiei sale.
Evenimentele sunt generate de utilizatorul care intra in contact cu interfata grafica a unei aplicatii. Deci, evenimentele apar ca urmare a actiunii utilizatorului asupra diferitelor componente grafice ale interfetei si reprezinta o modalitate prin care utilizatorul comunica cu aplicatia. Exemple de evenimente sunt: apasarea unui buton, selectarea unui articol dintr-o lista, marcarea unui buton radio, modificarea continutului dintr-un camp de tip text, inchiderea unei ferestre.
Pentru o aplicatie Java cu interfata grafica comunicarea prin intermediul evenimentelor implica prezenta urmatoarelor componente:
• sursa de evenimente: reprezinta un obiect grafic care isi modifica starea si care genereaza in acest fel evenimente;
• obiectul de tip eveniment: este un obiect (definit prin intermediul clasei EventObject) care include toate informatiile corespunzatoare unui eveniment si care identifica sursa evenimentului; fiecare eveniment poate fi identificat prin intermediul unui id returnat de catre metoda getID() din clasa AWTEvent;
• interceptor de evenimente: reprezinta un obiect care este anuntat cu privire la producerea unor evenimente; acesta receptioneaza si trateaza evenimente.
Manipularea evenimentelor in Java este foarte puternica si flexibila. De exemplu, o aplicatie poate introduce un interceptor pentru fiecare sursa de evenimente sau un singur interceptor pentru toate evenimentele generate de sursele de evenimente.
Urmatorul exemplu prezinta o aplicatie cu interfata grafica care urmareste evenimentele generate prin actionarea a doua butoane.
package ro.virtualcampus.ev; | |
import java.awt.*; | |
import java.awt.event.*; | |
import javax.swing.*; | |
public class TestEvent extends JFrame implements ActionListener { | |
private static final long serialVersionUID = 1L; | |
private JButton buton1, buton2; | |
private JLabel text; | |
public TestEvent() { | |
super("TestEvent"); | |
setLayout(new FlowLayout()); | |
setLocation(100, 100); | |
buton1 = new JButton("Buton 1"); | |
buton2 = new JButton("Buton 2"); | |
text = new JLabel("Apasa un buton !"); | |
getContentPane().add(buton1); | |
getContentPane().add(buton2); | |
getContentPane().add(text); | |
buton1.addActionListener(this); | |
buton2.addActionListener(this); | |
} | |
public void actionPerformed(ActionEvent e) { | |
text.setText(e.getActionCommand()); | |
} | |
public static void main(String args[]) { | |
TestEvent app = new TestEvent(); | |
app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); | |
app.pack(); | |
app.setVisible(true); | |
} | |
} |
Tipuri de evenimente
Varful ierarhiei de clase care permite lucrul cu evenimente este reprezentat de clasa EventObject din pachetul java.util, din care este derivata clasa AWTEvent din pachetul java.awt. Clasa AWTEvent reprezinta varful ierarhiei de clase care descriu evenimentele generate prin actionarea unor componente grafice.
Pentru fiecare tip de eveniment exista o clasa in pachetul java.awt.event care instantiaza obiecte de acel tip. Astfel, evenimentul generat de actionarea unui buton este descris de clasa ActionEvent, in timp ce evenimentul generat de modificarea unui text pentru un camp de tip text este descris de clasa TextEvent. Denumirile claselor derivate din AWTEvent respecta urmatorul sablon <Type>Event.
Clasa | Semnificatie |
---|---|
ActionEvent | instantiata la actionarea unui element de control |
AdjustmentEvent | instantiata la modificarea unei valori intre doua limite |
ComponentEvent | instantiata cand o componenta grafica este repozitionata, redimensionata, ascunsa sau afisata |
ItemEvent | instantiata cand este selectat un articol dintr-o lista sau un buton de marcare (modificare stare) |
TextEvent | instantiata la modificarea textului dintr-o componenta de editare a textului |
FocusEvent | instantiata la preluarea sau pierderea focusului de catre o componenta grafica |
InputEvent | clasa abstacta care reprezinta varful ierarhiei de clase pentru evenimente corespunzatoare componentelor de intrare |
WindowEvent | instantiata la minimizarea, maximizarea, inchiderea sau redimensionarea unei ferestre |
ContainerEvent | instantiata la modificarea continutului unui container (adaugarea sau stergerea unei componente grafice) |
KeyEvent | instantiata la apasarea, eliberarea unei taste, cand focus-ul este pe o anumita componenta |
MouseEvent | instantiata la apasarea, eliberarea mouse-ului pe o componenta, sau intrarea, iesirea mouse-ului de pe suprafata unei componente |
Evenimentele de tip ComponentEvent, FocusEvent, KeyEvent si MouseEvent pot fi generate de oricare din componentele grafice. De asemenea, toate componente de tip container pot genera evenimente de tip ContainerEvent. Toate aceste tipuri de evenimente sunt considerate evenimente de nivel scazut si se refera la apasarea unei taste, miscarea sau actionarea mouse-ului sau la operatii realizate asupra unei ferestre.
Componenta | Evenimente suportate |
---|---|
Button | ActionEvent, FocusEvent, KeyEvent, MouseEvent, ComponentEvent |
CheckBox | ItemEvent, FocusEvent, KeyEvent, MouseEvent, ComponentEvent |
Choice | ItemEvent, FocusEvent, KeyEvent, MouseEvent, ComponentEvent |
Component | FocusEvent, KeyEvent, MouseEvent, ComponentEvent |
Container | ContainerEvent, FocusEvent, KeyEvent, MouseEvent, ComponentEvent |
Dialog | ContainerEvent, WindowEvent, FocusEvent, KeyEvent, MouseEvent, ComponentEvent |
Frame | ContainerEvent, WindowEvent, FocusEvent, KeyEvent, MouseEvent, ComponentEvent |
Label | FocusEvent, KeyEvent, MouseEvent, ComponentEvent |
List | ActionEvent, FocusEvent, KeyEvent, MouseEvent, ItemEvent, ComponentEvent |
Panel | ContainerEvent, FocusEvent, KeyEvent, MouseEvent, ComponentEvent |
ScrollPane | ContainerEvent, FocusEvent, KeyEvent, MouseEvent, ComponentEvent |
TextArea | TextEvent, FocusEvent, KeyEvent, MouseEvent, ComponentEvent |
TextComponent | TextEvent, FocusEvent, KeyEvent, MouseEvent, ComponentEvent |
TextField | ActionEvent, TextEvent, FocusEvent, KeyEvent, MouseEvent, ComponentEvent |
Window | ContainerEvent, WindowEvent, FocusEvent, KeyEvent, MouseEvent, ComponentEvent |
Interceptoare de evenimente
Pentru ca un eveniment sa poata declansa diverse actiuni din partea unei aplicatii cu interfata grafica, aceasta din urma trebuie sa detecteze evenimentul si sa specifice o actiune care se executa la aparitia lui.
Interceptarea evenimentelor generate de componentele unei aplicatii cu interfata grafica se realizeaza prin intermediul unor clase care poarta numele de interceptori de evenimente.
Un obiect de tip interceptor trebuie sa fie atasat (inregistrat) la o sursa de evenimente, pentru a putea primi obiectele eveniment transmise de aceasta. In momentul inregistrarii unui interceptor la o sursa de evenimente, aceasta adauga referinta primita la o lista. Dupa inregistrare, interceptorul asteapta declansarea unui eveniment.
Daca unui interceptor ii este livrat un obiect eveniment, acesta analizeaza evenimentul si stabileste desfasurarea unei actiuni corespunzatoare. Un obiect de tip interceptor trebuie sa includa metode pentru gestionarea evenimentelor pe care le asculta. Corpul unei astfel de metode defineste modul in care obiectul interceptor raspunde la aparitia unui eveniment.
Tipuri de interceptoare de evenimente
O clasa consumatoare de evenimente (interceptor de evenimente) este o clasa care specifica in declaratia sa tipurile de evenimente pe care le urmareste. Acest lucru se realizeaza prin implementarea unei interfete pentru fiecare tip de eveniment urmarit.
Orice clasa care trateaza evenimente trebuie sa implementeze toate metodele interfetelor corespunzatoare evenimentelor pe care le trateaza. O clasa poate sa implementeze oricate astfel de interfete.
Fiecare interceptor de evenimente trateaza anumite tipuri de evenimente. Pentru urmarirea evenimentelor de tip ActionEvent o clasa de tip interceptor trebuie sa implementeze interfata ActionListener, iar pentru urmarirea evenimentelor de tip TextEvent trebuie sa implementeze interfata TextListener.
Tip eveniment | Tip interfata | Metode interfata |
---|---|---|
ActionEvent | ActionListener | actionPerformed(ActionEvent) |
AdjustmentEvent | AdjustmentListener | adjustmentValueChanged(AdjustmentEvent) |
ComponentEvent | ComponentListener | componentHidden(ComponentEvent) componentShown(ComponentEvent) componentMoved(ComponentEvent) componentResized(ComponentEvent) |
ContainerEvent | ContainerListener | componentAdded(ContainerEvent) componentRemoved(ContainerEvent) |
FocusEvent | FocusListener | focusGained(FocusEvent) focusLost(FocusEvent) |
KeyEvent | KeyEvent | keyPressed(KeyEvent) keyReleased(KeyEvent) keyTyped(KeyEvent) |
MouseEvent | MouseListener | mouseClicked(MouseEvent) mouseEntered(MouseEvent) mouseExited(MouseEvent) mousePressed(MouseEvent) mouseReleased(MouseEvent) |
WindowEvent | WindowListener | windowOpened(WindowEvent) windowClosing(WindowEvent) windowClosed(WindowEvent) windowActivated(WindowEvent) windowDeactivated(WindowEvent) windowIconified(WindowEvent) windowDeiconified(WindowEvent) |
ItemEvent | ItemListener | itemStateChanged(ItemEvent) |
TextEvent | TextListener | textValueChanged(TextEvent) |
Interfetele de tip listener au la baza superinterfata EventListener din pachetul java.util. Denumirile interfetelor derivate din EventListener respecta urmatorul sablon <Type>Listener.
Componenta | Interfete de tip listener |
---|---|
Button | ActionListener, FocusListener, KeyListener, MouseListener, ComponentListener |
CheckBox | ItemListener, FocusListener, KeyListener, MouseListener, ComponentListener |
Choice | ItemListener, FocusListener, KeyListener, MouseListener, ComponentListener |
Component | FocusListener, KeyListener, MouseListener, ComponentListener |
Container | ContainerListener, FocusListener, KeyListener, MouseListener, ComponentListener |
Dialog | ContainerListener, WindowListener, FocusListener, KeyListener, MouseListener, ComponentListener |
Frame | ContainerListener, WindowListener, FocusListener, KeyListener, MouseListener, ComponentListener |
Label | FocusListener, KeyListener, MouseListener, ComponentListener |
List | ActionListener, FocusListener, KeyListener, MouseListener, ItemListener, ComponentListener |
Panel | ContainerListener, FocusListener, KeyListener, MouseListener, ComponentListener |
ScrollPane | ContainerListener, FocusListener, KeyListener, MouseListener, ComponentListener |
TextArea | TextListener, FocusListener, KeyListener, MouseListener, ComponentListener |
TextComponent | TextListener, FocusListener, KeyListener, MouseListener, ComponentListener |
TextField | ActionListener, TextListener, FocusListener, KeyListener, MouseListener, ComponentListener |
Window | ContainerListener, WindowListener, FocusListener, KeyListener, MouseListener, ComponentListener |
Tabelul precedent indica tipurile de interfete de tip listener corespunzatoare componentele de baza ale unei interfete grafice.