Eventi e listener per i componenti grafici Raffaella Brighi, a.a. 2005/06 Corso di Laboratorio II. A.A. 2005-06 CdL Operatore Informatico Giuridico. Eventi e listener Eventi e listener (ascoltatori) sono elementi fondamentali per la GUI perché consentono di intercettare l interazione con l utente. Un evento è un oggetto che rappresenta il verificarsi di un azione dell utente (es click del mouse o click su un tasto della tastiera). La libreria standard di Java contengono delle classi che rappresentano gli eventi che più spesso occorre gestire.
Eventi del mouse mouse pressed mouse released mouse clicked mouse entered mouse 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. creare un oggetto listener per l evento che interessa 2. aggiungere il listener al componente grafico 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 scatena un evento il metodo appropriato dell ascoltatore viene invocato automaticamente.
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 Componenti che possono generare eventi I componenti che possono generare eventi hanno metodi che possono essere invocati per aggiungere un ascoltatore del tipo appropriato. Le applet, ad esempio, hanno il metodo addmouselistener che consente di aggiungere all applet stessa un oggetto che implementa l interfaccia MouseListener. Quando si invoca tale metodo si stabilisce un collegamento tra il componente grafico che genera l evento e l ascoltatore per gestirlo.
Creazione di una classe listener (che implementa l interfaccia mouselistener) per la classe MyClass. MyClass rappresenta un generico componete grafico che genera l evento «interfaccia» MouseListener +mouseclicked() +mousepressed() +mousereleased() +mouseentered() +mouseexited() MouseEvent +getpoint() +getx() +gety() +getclickcount() Esempio applicato ad una classe applet Codice della applet (vuota) che istanzia nel metodo init l oggetto listener e lo collega. Viene passato al listener un riferimento all oggetto su cui devono essere catturati gli eventi import java.awt.*; import java.applet.applet; public class TheApplet extends java.applet.applet { /** Initialization method that will be called after the applet is loaded * into the browser. */ public void init() { // istanzio l'oggetto MouseListener per la mia applet TheAppletMouseListener myappletmouselistener = new TheAppletMouseListener (this); addmouselistener(myappletmouselistener); public void paint(graphics pag){
Codice del listener per l applet TheApplet. Il costruttore riceve un riferimento alla applet. La classe implementa tutti i metodi dell interfaccia. import java.awt.*; import java.awt.event.*; public class TheAppletMouseListener implements MouseListener{ private TheApplet myapplet; /** Creates a new instance of MyAppletMouseListener */ public TheAppletMouseListener(TheApplet app) { myapplet=app; public void mouseclicked(mouseevent e) { public void mouseentered(mouseevent e) { public void mouseexited(mouseevent e) { public void mousepressed(mouseevent e) { public void mousereleased(mouseevent e) { Esempio: scrivere sulla finestra della applet l evento del mouse che si è scatenato. import java.awt.*; import java.applet.applet; public class TheApplet extends java.applet.applet { private String descrevento = "CIAOOOOO"; /** Initialization method that will be called after the applet is loaded * into the browser. */ public void init() { // istanzio l'oggetto MouseListener per la mia applet TheAppletMouseListener myappletmouselistener = new TheAppletMouseListener (this); addmouselistener(myappletmouselistener); public void paint(graphics pag){ pag.drawstring(descrevento, 10, 50); public void setdescrevento(string str){ descrevento=str;
import java.awt.*; import java.awt.event.*; public class TheAppletMouseListener implements MouseListener{ private TheApplet myapplet; /** Creates a new instance of MyAppletMouseListener */ public TheAppletMouseListener(TheApplet app) { myapplet=app; public void mouseclicked(mouseevent e) { myapplet.setdescrevento("mouseclicked"); public void mouseentered(mouseevent e) { myapplet.setdescrevento("mouseentered"); public void mouseexited(mouseevent e) { myapplet.setdescrevento("mouseexited"); public void mousepressed(mouseevent e) { myapplet.setdescrevento("mousepressed"); public void mousereleased(mouseevent e) { myapplet.setdescrevento("mousereleased"); Esercizio Scrivere una applet che al click del mouse disegni un cerchio nel punto in cui si è cliccato.