Quando un utilizzatore aziona un componente viene creato un oggetto Event. Il sistema di cattura degli eventi dellawt e passa levento stesso alla gerarchia Component, dando a ciascun componente la possibilita di reagire allevento.
Ogni componente puo reagire allevento in uno dei seguenti modi:
Ogni evento risulta nella creazione di un oggetto Event e contiene le seguenti informazioni:
La classe component definisce molti metodi per la cattura di eventi che si possono sovrascrivere, ad esclusione del metodo generale HandleEvent().
elenco dei metodi:
action() (Event.ACTION_EVENT)
mouseEnter() (Event.MOUSE_ENTER)
mouseExit() (Event.MOUSE_EXIT)
mouseMove() (Event.MOUSE_MOVE)
mouseDown() (Event.MOUSE_DOWN)
mouseDrag() (Event.MOUSE_DRAG)
mouseUp() (Event.MOUSE_Up)
keyDown() (Event.KEY_PRESS o Event.KEY_ACTION)
keyUp() (Event.KEY_RELEASE o Event.KEY_ACTION_RELEASE)
gotFocus() (Event.GOT_FOCUS)
lostFocus() (Event.LOST_FOCUS)
handleEvent() (tutti i tipi di eventi)
Il metodo action() e un metodo speciale (solo per i controlli di base: button, checkbox, choice, list, menuitem, textfield) generato per esempio dalla pressione di un tasto che permette di reagire ad un azione dellutilizzatore senza preoccuparsi degli eventi di basso livello che causano levento (come il tasto premuto o il click del mouse)
Esempio: |
//: TestEvent.java import java.awt.*; import java.awt.event.*; // Per la gestione degli eventi public class TestEvent extends Frame { //Definizione dei componenti dell'interfaccia grafica Button b = new Button("Beep"); public TestEvent() { //definizione della GUI add(b); } public boolean action(Event evt, Object arg) { if(evt.target.equals(b)) System.out.println("Button b premuto"); } public static void main(String args[]) { Frame f = new TestEvent(); f.setTitle("Titolo della finestra"); f.setSize(100,100); f.setVisible(true); } } |
Nella nuova gestione degli eventi, essi sono generati da oggetti sources(sorgenti), e 1 o piu Listeners possono avere notifica di particolari eventi (da determinati sources). Ogni classe puo implementare un gestore di eventi e sara composta da queste parti essenziali:
Public class MyClass implements ActionListener {
SomeComponent.addActionListener(istanceOfMyClass);
Publiv void actionPerformed(ActionEvent e);
. Codice che reagisce allazione
Esempio: |
//: ButtonEvent.javaimport java.awt.*; import java.awt.event.*; // Per la gestione degli eventi public class ButtonEvent extends Frame { //Definizione dei componenti dell'interfaccia grafica Button b = new Button("Beep"); public ButtonEvent() { //Definizione del listener b.addActionListener(new BL()); //definizione della GUI add(b); } public class BL implements ActionListener { public void actionPerformed(ActionEvent e) { System.out.println("button premuto"); } } static class WL extends WindowAdapter { public void windowClosing(WindowEvent e) { System.exit(0); } } public static void main(String args[]) { Frame f = new ButtonEvent(); f.setTitle("Titolo della finestra"); f.setSize(100,100); f.setVisible(true); } } |
Nellesempio ButtonEvent.java il Button b viene creato, aggiunto alla classe listener BL e visualizzato. La classe BL contiene il codice da eseguire in seguito alla pressione "b".
Il Button b puo essere aggiunto anche ad altre eventuali classi listener.
La classe BL puo essere definita listener non solo del Button b ma anche di altri oggetti contemporaneamente.
Elenco degli eventi gestiti dallAWT 1.1
Evento | Listener | Add | Remove |
ActionEvent | ActionListener | addActionListener() | removeActionListener() |
Button
List
TextField
MenuItem
Metodi:
actionPerformed(ActionEvent)
Breve commento:
Quando si verifica uin evento action un messaggio viene inviato a tutti i listeners registrati.
Metodi: linterfaccia ActionListener contiene 1 metodo: void actionPerformed(ActionEvent)
La classe ActionEvent definisce 2 metodi:
getActionCommand = fornesce la label del componente
getModifiers = per rileavre i tasti premuti (es. ActionEvent.SHIFT_MASK, CTRL_MASK, META_MASK e ALT_MASK).
Es. ActionEvent.getModifiers() & ActionEvent.SHIFT_MASK
Evento | Listener | Add | Remove |
AdjustmentEvent | AdjustmentListener | addAdjustmentListener() | removeAdjustmentListener() |
Scrollbar
Metodi:
adjustmentValueChanged(AdjustmentEvent)
Breve commento:
Gli eventi adjustment notificano i cambiamenti dei componenti che implementano linterfaccia adjustable.(essi hanno un valore intero e generano tale evento quando cambia tale valore es. scroll bar e scroll panel.
Eventi:
TRACK trascinamento
UNIT INCREMENT
UNIT DECREMENT
BLOCK INCREMENT
BLOCK DECREMENT
Metodi: void adjustment ValueChanged (AdjustmentEvent) = notifica che il valore del componente è cambiato.
Evento | Listener | Add | Remove |
ComponentEvent | ComponentListener | addComponentListener() | removeComponentListener() |
Component
Button, Canvas, Chechbox, Choice, Container, Panel, Applet, ScrollPane, Window, Dialog, FileDialog, Frame, Label, List, Scrollbar, TextArea, TextField
Metodi:
componentHidden(ComponentEvent)
componentShown(ComponentEvent)
componentMoved(ComponentEvent)
componentResized(ComponentEvent)
Adapter
ComponentAdapter
Breve commento:
Un evento component è generato quando un oggetto omponents è nascosto, reso visibile, spostato o ridiminsionato.
Metodi: linterfaccia ComponentListener e la corrispondente ComponentAdapter contengono 4 metodi :
void componentHidden(ComponentEvent)
void componentMoved(ComponentEvent)
void componentResized(ComponentEvent)
void componentShown(ComponentEvent)
La classe ComponentEvent ha un solo metodo getComponent() che restituisce il componente che ha generato levento
Evento | Listener | Add | Remove |
ContainerEvent | ContainerListener | add ContainerListener() | remove ContainerListener() |
Container
Panel, Applet, ScrollPane, Window, Dialog, FileDialog, Frame
Metodi:
componentAdded(ContainerEvent)
componentRemoved(ContainerEvent)
Adapter
ComponentAdapter
Breve commento:
Eventi container sono generati dopo che un componente è aggiunto o tolto da un container.
Metodi: getChild() = restituisce il componente, getContainer() = restituisce il container
Evento | Listener | Add | Remove |
FocusEvent | FocusListener | add FocusListener() | remove FocusListener() |
Component
Button, Canvas, Chechbox, Choice, Container, Panel, Applet, ScrollPane, Window, Dialog, FileDialog, Frame, Label, List, Scrollbar, TextArea, TextField
Metodi:
focusGained(FocusEvent)
focusLost(FocusEvent)
Adapter
FocusAdapter
Breve commento:
Eventi Focus sono generati quando un componente riceve o perde il fuoco.
Metodi: Linterfaccia FucusListener e la corrispondente FocusAdapter contengono 2 metodi:
void focusGained(FocusEvent);
void focusLost(FocusEvent);
La classe FocusEvent definisce 1 metodo: isTemporary che rotorna true se loggetto ha perso il fuoco perché lo ha perso la sua windows.
Evento | Listener | Add | Remove |
KeyEvent | KeyListener | add KeyListener() | remove KeyListener() |
Component
Button, Canvas, Chechbox, Choice, Container, Panel, Applet, ScrollPane, Window, Dialog, FileDialog, Frame, Label, List, Scrollbar, TextArea, TextField
Metodi:
KeyPressed(KeyEvent)
KeyReleased(KeyEvent)
KeyTyped(KeyEvent)
Adapter
KeyAdapter
Breve commento:
Eventi Key sono generati da componenti che hanno il focus in seguito alla digitazione di tasti.
Metodi: linterfaccia KeyListener e la corrisp. classe KeyAdapter contengono 3 metodi:
void keyTyped(KeyEvent)
void keyPressed(KeyEvent)
void keyReleased(KeyEvent)
La classe KeyEvent definisce i seguenti metodi:
int getKeyChar()
void setKeyChar(char)
int getKeyCode() KeyCode = costanti per tasti comuni(VK_A = A, VK_ESCAPE = ESC)
int setKeyCode(int)
void setModifiers(int)
La classe KeyEvent estende InputEvent che estende ComponentEvent.
ComponentEvent fornisce quindi il metodo getComponent().
InputEvent definisce i seguenti metodi:
int getWhwn()
boolean isAltDown()
boolean isControlDown()
boolean isMetaDown()
boolean isShiftDown()
int getModifiers()
Evento | Listener | Add | Remove |
MouseEvent | MouseListener | add MouseListener() | remove MouseListener() |
Component
Button, Canvas, Chechbox, Choice, Container, Panel, Applet, ScrollPane, Window, Dialog, FileDialog, Frame, Label, List, Scrollbar, TextArea, TextField Label, List, Scrollbar
Metodi:
mouseClicked(MouseEvent)
mouseEntered(MouseEvent)
mouseExited(MouseEvent)
mousePressed(MouseEvent)
mouseReleased(MouseEvent)
Adapter
MouseAdapter
Breve commento:
Sono generati dallinterazione del mouse con i componenti.
Metodi: linterfaccia MouseListener e la corrisp. classe MouseAdapter contengono 3 metodi:
void mouseClicked(MouseEvent)
void mouseEntered(MouseEvent)
void mouseExited(MouseEvent)
void mousePressed(MouseEvent)
void mouseReleased(MouseEvent)
La classe MouseEvent oltre ad estendere InputEvent e ComponentEvent (vedi sopra) definisce i seguenti metodi:
int getClickCount()
int getX()
int getY()
point getPoint()
Evento | Listener | Add | Remove |
MouseEvent | MouseMotionListener | add MouseMotionListener() | remove MouseMotionListener() |
Component
Button, Canvas, Chechbox, Choice, Container, Panel, Applet, ScrollPane, Window, Dialog, FileDialog, Frame, Label, List, Scrollbar, TextArea, TextField
Metodi:
mouseDragged(MouseEvent)
mouseMoved(MouseEvent)
Adapter
MouseMotionAdapter
Breve commento:
Sono generati dallo spostamento del cursore sullo schermo.
Metodi: linterfaccia MouseMotionListener e la corrisp. classe MouseMotionAdapter contengono 2 metodi:
void mouseDragged(MouseEvent)
void mouseMoved(MouseEvent)
Evento | Listener | Add | Remove |
WindowEvent | WindowListener | add WindowListener() | remove WindowListener() |
Window
Dialog, FileDialog, Frame
Metodi:
windowOpened(WindowEvent)
windowClosing(WindowEvent)
windowClosed(WindowEvent)
windowActivated(WindowEvent)
windowDeactivated(WindowEvent)
windowIconified(WindowEvent)
windowDeiconified(WindowEvent)
Adapter
WindowAdapter
Breve commento:
Eventi window sono generati quando una windows viene aperta, chiusa, modificata, deiconificata, attivata o deattivata.
Metodi: linterfaccia W.Listener e la classe W.Adapter contengono 7 metodi:
void windowOpened(WindowEvent)
void windowClosed(WindowEvent)
void windowIconified(WindowEvent)
void windowDeiconified(WindowEvent)
void windowActivated(WindowEvent)
void windowDeactivated(WindowEvent)
La classe WindowEvent definisce il metodo getWindow che ritorna la window che ha generato levento.
Evento | Listener | Add | Remove |
ItemEvent | ItemListener | add ItemListener() | remove ItemListener() |
Checkbox, CheckboxMenuItem, Choice, List
Metodi:
itemStateChanged(ItemEvent)
Breve commento:
Eventi Item sono generati da componenti che implementano linterfaccia ItemSelectable come check box, check menu, choice e list.
Metodi: void itemStateChanged(ItemEvent) = notifica che lo stato dellitem è cambiato.
La classe ItemEvent definisce i seguenti metodi:
Object getItem()
ItemSelectable getItemSelectable() = ritorna il componente che ha generato levento.
Int getStateChange() = ritorna il nuovo valore dellitem (SELECTED o DESELECTED).
Evento | Listener | Add | Remove |
TextEvent | TextListener | add TextListener() | remove TextListener() |
TextComponent
TextArea
TextField
Metodi:
textValueChanged(TextEvent)
Breve commento:
Eventi text sono generati quando cambia il testo in un componente testo.
Metodi: void textValueChanged(TextEvent)
La classe TextEvent non ha particolari metodi escluso getSource che eredita da EventObject.
Classi adapter e Inner
Escluso ActionListener la maggior parte delle interfacce listener dellAWT contengono più di un metodo: es. MuoseListener contiene 5 metodi (mousePressed, mouseReleased, mouseEntered, mouseExited e mouseClicked). Una classe che implementa la MouseListeners deve implementare anche tutti e 5 i suoi metodi (che possono avere anche un corpo vuoto). Per evitare questo lAWT fornisce una classe adapters per ogni interfaccia listener, (es, MouseAdapter) che implementa una versione vuota di tutti i suoi metodi.
Es.
MyClass extends MouseAdapter {
..
someObject.addMouseListener(this);
.
public void mouseClicked (MouseEvent e) {
implementazione dellEventHandle
}
}
Poiché java non permette lereditarietà multipla (es. un applet non può ereditare la classe applet e la classe MouseEvent) si può definire una classe inner (una classe dentro una sottoclasse) che estende la classe MouseAdapter
Es.
MyClass extends Applet{
.
SomeObject.addMouseListener(new MyAdapter());
.
static class WL extends WindowAdapter {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
}
}
Per le interfacce listener che possiedono piu di un metodo, viene fornito un "adapter" che fornisce un metodo di default per ciascun metodo dellinterfaccia.
Ereditando ladapter sara cosi sufficente sovrascrivere solo il metodo che bisogna cambiare.
Esempio: |
//: ButtonEvent.java import java.awt.*; import java.awt.event.*; // Per la gestione degli eventi public class ButtonEvent extends Frame { //Definizione dei componenti dell'interfaccia grafica Button b = new Button("Beep"); public ButtonEvent() { //Definizione del listener b.addActionListener(new BL()); //definizione della GUI add(b); } public class BL implements ActionListener { public void actionPerformed(ActionEvent e) { System.out.println("button premuto"); } } static class WL extends WindowAdapter { public void windowClosing(WindowEvent e) { System.exit(0); } } public static void main(String args[]) { Frame f = new ButtonEvent(); f.setTitle("Titolo della finestra"); f.setSize(100,100); f.setVisible(true); } } |