Eventi e listener Raffaella Brighi, a.a. 2005/06 Corso di Laboratorio II. A.A. 2005-06 CdL Operatore Informatico Giuridico. Eventi e listener Un evento è un oggetto che rappresenta il verificarsi di un’azione dell’utente o del sistema(es click del mouse o click su un tasto della tastiera oppure eventi temporizzati ecc.). La libreria standard di Java contengono delle classi che rappresentano gli eventi che più spesso occorre gestire. Un listener (ascoltatore=ricevitore di eventi) è un oggetto che riceve una notifica quando si verifica un evento. Eventi e listener (ascoltatori) sono elementi fondamentali per la GUI perché consentono di intercettare l’interazione con l’utente. Eventi del mouse mouse mouse mouse mouse mouse pressed released clicked entered exited mouse moved mouse dragged Classe MouseEvent Point getPoint(): restituisce la posizione dell’evento del mouse int getX(): restituisce la coord x dell’evento del mouse int getY(): restituisce la coord y dell’evento del mouse int getClickCount(): restituisce il numero dei click consecutivi associati all’evento Oggetti listener Un listener è un oggetto che aspetta che si verifichi un evento e quando ciò accade compie un azione in risposta. Per gestire un evento occorre: 1. 2. creare un oggetto listener per l’evento che interessa aggiungere il listener al componente che può generare l’evento L’interfaccia Listener Gli oggetti listener sono istanze di classi che implementano interfacce “listener” della libreria standard di Java. La libreria standard di Java contiene una serie di interfacce per ogni categoria di eventi: MouseListener, MouseMotionListener, KeyListener, ActionListener, ecc. Quando si verifica un evento il metodo l’oggetto che rappresenta l’evento invoca il metodo opportuno dell’interfaccia listener. Perché vengano eseguite istruzioni al verificarsi dell’evento occorre dunque creare un oggetto ricevitore che implementa l’interfaccia listener. Interfaccia ActionListener public interface ActionListener { void actionPerformed (ActionEvent event) } Esempio – Eventi di temporizzazione La classe Timer (javax.swing) genera una sequenza di eventi ad intervalli di tempo regolari (eventi di temporizzazione). Quando accade un evento di temporizzazione la classe Timer richiama il metodo actionPerformed dell’interfaccia ActionListener. Per gestire l’evento E di temporizzazione, cioè perché vengano eseguite istruzioni al verificarsi dell’evento, è necessario definire una classe che implementa l’interfaccia actionListener e scrivere il codice nel metodo actionPerfomed. import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class MioRicevitore implements ActionListener{ public MioRicevitore() { } public void actionPerformed (ActionEvent event){ // codice da eseguire al verificarsi dell’evento } } Il costruttore di Timer prende in input l’intervallo di tempo e l’oggetto ascoltatore. Codice per creare ed eseguire il timer ActionListener mylistener = new MioRicevitore(); Timer mytime = new Timer (1000, mylistener); mytime.start(); La classe MioRicevitore può essere impostata come classe interna. import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.Timer; import javax.swing.JOptionPane; public class tempotest { public static void main(String[] args) { // TODO code application logic here class MioRicevitore implements ActionListener{ public MioRicevitore() { } public void actionPerformed (ActionEvent event){ System.out.println ("Tempo!"); } } } } ActionListener mylistener = new MioRicevitore(); Timer mytime = new Timer (1000, mylistener); mytime.start(); JOptionPane.showMessageDialog(null, "Quit?"); System.exit (0); L’interfaccia MouseListener void mousePressed (MouseEvent evento): invocato quando viene premuto il pulsante del mouse void mouseReleased (MouseEvent evento): invocato quando il pulsante del mouse viene rilasciato void mouseClicked (MouseEvent evento): invocato quando il pulsante del mouse viene premuto e rilasciato nella stessa posizione void mouseEntered (MouseEvent evento): invocato quando il mouse passa sopra ad un componente grafico void mouseExited(MouseEvent evento): invocato quando il mouse esce da un componente grafico