Gestion des événements (en Java 1.1 et suivant)

L'événement : objet de la classe Event

Lorsque l'utilisateur a manipulé un composant graphique (par exemple appui sur un bouton poussoir), l'interprèteur construit un objet contenant des renseignements du moment de cette manipulation. Un tel objet est appelé un événement.
Il existe plusieurs sortes d'événement comme les ActionEvent. Ces classes dérivent de la classe Event. Lorsqu'on repère un événement par une référence evt, on peut connaître le composant graphique qui a été manipulé par l'utilisateur par le code :
evt.getSource();

Programmation par délégation

Pour traiter un  événement, il faut avoir associé un objet au composant graphique. Cet autre objet "délégué" au travail de traitement des évenements est dit "à l'écoute" des actions sur le composant graphique et est appellé un "listener". Cette technique de programmation est dite programmation par délégation.

Pour créer un listener un des moyens est d'écrire :
new MaClasseListener();

MaClasseListener est une classe créée par le programmeur (vous-même !!).
Cette classe doit être une classe qui implémente une interface spécifique du composant graphique.
On doit donc avoir un code comme :
class MaClasseListener implements <typeEvenement>Listener
Par exemple :
class MaClasseListener implements ActionListener

Ceci oblige la classe a donné un code aux méthodes déclarées dans <typeEvenement>Listener.
Sinon il y a une erreur à la compilation : c'est le but et la raison même de la notion d'interface (pas d'interface graphique !!) de Java.
Ces méthodes seront lancées lors d'une certaine action de l'utilisateur sur le composant graphique ce qui explique la nécessité de donner une tel code et la volonté de Java de vérifier au moment de la compilation, qu'un tel code a été donné.

L'association (composantGraphique, listener) est effectué à l'aide d'une méthode
add<typeEvenement>Listener(<typeEvenement>Listener)
 


Exemple pour un bouton poussoir

Faire afficher "Coucou" lorsque l'utilisateur clique sur le bouton poussoir.
Une solution est :

import java.awt.*;
import java.awt.event.*;
•••
Button bt = new Button("Mon Bouton");
EcouteurBouton ecouteur = new EcouteurBouton();
bt.addActionListener(ecouteur);
•••
class EcouteurBouton implements ActionListener {
  public void actionPerformed(ActionEvent e) {
    System.out.println("Coucou");
  }
}

Remarques syntaxiques

1°) Les interfaces <typeEvenement>Listener sont définies dans le paquetage java.awt.event et il est donc conseillé d'écrire :
import java.awt.event.*;
en en-tête des fichiers .java.
2°) Très souvent les classes auditeurs sont définies à "l'intérieur" de la classe de l'interface graphique. Ce sont des classes internes. L'intérêt majeur est d'accéder facilement dans ces classes internes aux composants graphiques définis dans la classe englobante.