La gestion des événements

Accueil

Définition

Un gestionnaire d'événements est une classe interne qui définit les actions à effectuer
lorsqu§un événement survient sur un composant :

Il existe quantité de gestionnaires d§événements.
Ils permettent de créer une interface particulièrement réactive.
Notre but n’est pas de les étudier tous, mais d'en comprendre la philosophie.

Au cours du labo du 28/01/2013, nous avons repris l’interface de la semaine précédente,
que nous avons enrichi d’événements.
Voici le code source :

De la fonction main, qui crée la fenêtre principale. Source
De la fenêtre principale, qui inclut le ControlPanel et le ColorPanel. Source
Du ControlPanel, qui contient les classes des gestionnaires d’événements. Source
Du ColorPanel, qui est contrôlé par le ControlPanel. Source
De la liste déroulante qui permet de choisir parmi quelques villes. Source

 

Dans tous les cas, la philosophie reste identique, il faut :

  1. Créer une classe interne privée qui implements le gestionnaire d’événements souhaité
  2. Lui ajouter les méthodes manquantes Add unimplemented methods (Eclipse le fait pour vous)
  3. Déclarer, en tête de classe principale, une instance de ladite classe private Gestionnaire monGestionnaire = new Gestionnaire();
  4. Ajouter, à chaque composant écouté, l’écouteur ainsi créé : monBouton.addActionListener(monGestionnaire);

Chaque gestionnaire d’événements joue son rôle:

ActionListener

C’est le principal, il réagit lorsque le bouton, la case à cocher ou le bouton radio est cliqué.
Il réagit aussi lorsque la touche d’entrée est actionnée sur un champ texte (JTextField).

CaretListener

Il réagit à chaque frappe clavier d'un JTextField.
Utile par exemple pour afficher le nombre de caractères frappés ou restant à frapper sur un total permis (160 pour un SMS par exemple)

FocusListener

Il réagit lorsque le focus arrive ou quitte un composant.
Le focus est matérialisé par un curseur qui peut prendre diverses formes (pointillé sur un JButton, curseur clignotant dans un JTextField, …)

Cet écouteur implémente deux méthodes :

  1. FocusGained, lorsque le composant reçoit le focus
  2. FocusLost, lorsque le composant perd le focus

On s'en est servi pour changer la couleur de fond d’un JTextField.
Plus sérieusement, il peut servir à vérifier si le contenu du JTextField obéit bien à certaines règles (IBAN, numéro de TVA, e-mail, …) de validité lorsqu’il perd le focus.

MouseListener

Ecoute la souris: Clic, bouton enfoncé, bouton relâché, lorsque la souris entre ou sort du composant.

MouseWheelListener

Il réagit lorsque l’utilisateur pose la souris sur le composant écouté et fait rouler la molette (bouton central)

Utile pour incrémenter ou décrémenter une valeur sans utiliser le clavier.

Et encore bien d’autres …

Un composant peut être écouté par plusieurs gestionnaires d’événements.

C’est ainsi que nous avons posé quatre gestionnaires d'événements sur notre JTextField :

  1. Un ActionListener, qui réagit lorsqu'on valide avec enter
  2. Un CaretListener, qui réagit à chaque frappe de touche, pour les compter
  3. Un FocusListener, qui réagit lorsque le focus entre ou sort du champ texte
  4. Un MouseWheelListener, qui réagit lorsqu'on fait tourner la molette sur le champ texte

A l’inverse, un même écouteur d'événément peut écouter plusieurs composants.

Dans ce cas, il doit les distinguer par

if (arg0.getSource() == monComposant)
{
 Faire ceci;
}
else if (arg0.getSource() == monAutreComposant)
{
 Faire autre chose;
}

Faute de quoi il amalgamera tous les événements identiques de tous les composants qu’il écoute,
et y réagira par les mêmes instructions.