Gestione degli eventi.


Java Sun

Earthweb
(ex Gamelan)

Jars

Java Boutique

Java World

PIP






 JSem: 4.1

   L'interazione tra l'utente e un programma (o un'applet) avviene tramite il click di un pulsante, movimenti del mouse, compilazioni di campi testo, ecc... In Java, queste azioni costituiscono degli eventi e la gestione degli eventi permette di realizzare questa interattività.
   Java ha due gestioni degli eventi: quella "vecchia" (della versione 1.0) e quella "nuova" (versione 1.1 e superiori). Queste due gestioni sono assai diverse, la "vecchia" gestione è deprecata, ma viene conservata per motivi di compatibilità. Si raccomanda di usare solo la versione "nuova" (quella "vecchia" potrebbe non essere contemplata dalle versioni future di Java); nel seguito tratteremo solo la gestione "nuova".

   Un componente AWT genera un evento (per es. un bottone quando premuto genera un evento); questo componente è il compoente sorgente dell'evento.
La classe del sorgente definisce questi eventi tramite un'interfaccia EventTypeListener dove EventType è il tipo di evento (per es. ActionEvent). (Vedremo che non tutti i componenti possono generare un dato tipo di eventi.)
Il componente sorgente ha dei metodi per registrarsi presso i listeners (per es. la classe Button possiede il metodo addActionListener(ActionListener l), osservare che il parametro è un'interfaccia ActionListener).
Ogni interfaccia listener ha uno o più metodi per gestire il corrispondente tipo di eventi (per es. public void actionPerformed(ActionEvent e)). Questi metodi hanno come parametro un oggetto di una corrispondente classe di eventi (ActionEvent, MouseEvent, KeyEvent, ecc...).
Ogni classe interessata in un tipo particolare di evento (per es. ActionEvent) deve implementare l'interfaccia listener corrispondente (per es. ActionListener).
Inoltre affinchè tutto ciò funzioni, bisogna importare il pacchetto java.awt.event.

   Riassumendo:
  • Bisogna intanto importare il pacchetto java.awt.event
  • Bisogna implementare l'interfaccia listener corrispondente al tipo di evento che si vuole gestire
  • Compatibilmente al tipo di evento prescelto, bisogna scegliere il componente che genererà l'evento e registrarlo (con un metodo della sua classe) presso l'interfaccia listener
  • Bisogna definire tutti i metodi dell'interfaccia listener.


  • Per esempio nel caso di un ActionEvent in un'applet, il codice tipico sarà della forma:
    
    import java.applet.*;
    import java.awt.*;
    import java.awt.event.*;
    
    public class Esempio extends Applet implements ActionListener{ 
    /*implementazione dell'interfaccia ActionListener; la classe
    Esempio dovrà definire il metodo actionPerformed della
    interfaccia ActionListener*/
    .................
    Button bt = new Button("Premi!");
    ..............
    public void init(){
    ............
    bt.addActionListener(this);
    /*il metodo addActionListener(ActionListener l)
    della classe Button permette a bt di registrarsi
    presso l'interfaccia ActionListener dell'applet; 
    this si riferisce all'interfaccia implementata dalla 
    classe Esempio; cioè, praticamente, all'applet.*/
    ...............
    	}
    .......
    public void actionPerformed(ActionEvent e){
    /*questo è l'unico metodo dell'interfaccia
    ActionListener; il codice di questo metodo descrive 
    quello che succedde quando il pulsante bt viene
    premuto (risposta all'evento)*/
    	}
    .............

    Osserviamo che il parametro del metodo actionPerformed è un oggetto della classe ActionEvent, la quale deriva dalla classe java.awt.AWTEvent, quest'ultima classe eredita da java.util.EventObject il metodo getSource() che ritorna l'oggetto (cioè un'istanza della classe Object) che ha generato l'evento. Praticamente tutte le classi predefinite di eventi hanno, in modo analogo, il metodo getSource(), questo metodo è molto utile nel caso ci siano più componenti registrati presso il listener.




     next		content		previous