US

Gérer les évènements

Voyons maintenant comment interagir avec l'utilisateur. Pour ce faire, on va devoir découvrir la programmation évènementielle. Jusqu'à présent, les programmes s'exécutaient de manière linéaire avec quelques exceptions dues aux instructions de contrôle de flux et aux appels de méthodes.

Maintenant, avec les interfaces graphiques, on rencontre la programmation évènementielle, c'est-à-dire que des bouts de code vont être exécutés suite à un certain évènement, par exemple, l'utilisateur clique sur un bouton, il enfonce une touche du clavier, ...

Programmation évènementielle

On a donc tout d'abord les évènements qui ont diverses formes : un clic de la souris, une touche du clavier enfoncée, sélection d'un élément d'une liste, fermeture de la fenêtre, ...

Chaque élément qui doit répondre à un évènement va devoir surveiller cet évènement, pour ce faire, l'élément va utiliser un listener, c'est-à-dire qu'il va mettre l'évènement sur écoute.

Enfin, une fois que l'évènement survient, il va falloir faire quelque chose, exécuter un bout de code, le bout de code à exécuter est appelé handler.

Programmation évènementielle
fig j10.19 Programmation évènementielle

La figure j10.19 montre un exemple de programmation évènementielle. On a un certain élément et trois handler (les méthodes close(), save() et update(). Ensuite, l'élément écoute certains évènements.

Lors d'un clic sur le bouton gauche de la souris, ou lors d'un clic sur la croix de la fenêtre, il faut exécuter l'handler close(), et lors de la frappe d'une touche du clavier, il faut exécuter l'handler update() et l'handler save().

Ceci nous permet de voir plusieurs choses : Un élément peut écouter plusieurs évènements, on peut associer un même handler à plusieurs évènements, un élément ne doit pas écouter tous les évènements possibles et enfin, on peut associer plusieurs handlers à un même évènement.

Les listeners

En Java, les différents évènements possibles sont rassemblés dans différentes interfaces qui se trouvent pour la plupart dans le package java.awt.event. Les évènements sont rassemblés en catégories. Pour commencer par le plus simple, on a l'interface ActionListener qui ne contient qu'un seul évènement, l'évènement actionPerformed.