Gestion des événements en Java
1
Les Graphic Events (événements
graphiques)
1. Interaction de l'utilisateur
(clic de souris)
Un événement est un objet créé
lorsqu'une action particulière est
effectué sur un objet source.
b : Bouton
2. création
new d'un évènement
event : Événement
●
source=b
2
●
action=b.getCommand()
Les Objets Event
• Un objet événement encapsule une information spécifique à une instance
d'événement
• exemple : un événement représentant un clic souris contient la
position du pointeur souris
• Les différents types d'événements sont représentés par des classes
différentes :
• ActionEvent, MouseEvent …
• → Toute classe d'événement est sous classe de la classe
java.util.EventObject
3
Hiérarchie des Events
→
→Une
Unepartie
partiede
delalahiérarchie
hiérarchiedes
desévénements
événementsAWT
AWT
4
Les Listeners (écouteurs)
s te n er1) listener1 : Écouteur
iste n e r( l i
d d ActionL
b. a
b : Bouton b.addActi
onListene
r(listener2
)
b. a listener2 : Écouteur
dd
Ac
tio nL
i s te
ne
r(li
s te n
er3
Un écouteur est un objet )
réagissant aux évènements d'un
listener3 : Écouteur
objet source. Pour qu'un objet
puisse écouter un objet source, il
doit s'enregistrer auprès de celui- 5
ci
Récepteur d'événement ou Listener
• Un récepteur d'événements est un objet qui doit être prévenu ("notified")
par la source lorsque certains événements se produisent
• les notifications d'événements se font en invoquant des méthodes de
l'objet qui écoute, un événement étant transmis en paramètre
• → Pour chaque classe d'événements une interface spécifique
définit les méthodes à appeler pour notifier les événements de
cette classe
exemple : interface ActionListener pour les ActionEvent
Toute classe désirant recevoir des notifications d'un événement donné
devra implémenter cette interface.
●
un récepteur d’ActionEvent doit implémenter l'interface ActionListener
6
Interface d'écoute des événements
• Toutes les interfaces d’écoute d'événements héritent de
java.util.EventListener
• Par convention toutes les interfaces des récepteurs
d'événements ont des noms de la forme
<EventType>Listener
• exemple : les événements de AWT et les interfaces
correspondantes pour les récepteurs
7
Méthodes des Interfaces d'écoute
• Une interface d’écoute d'événements peut
contenir un nombre quelconque de méthodes,
chacune correspondant à un événement
différent
8
Propagation des événements
1. Interaction de l'utilisateur 3. propagation de l'évènement
(clic de souris)
)
e d ( event listener1 : Écouteur
io n Perform
1 .a c t
er
listen
b : Bouton listener
2.action
Perform
e d(event
list ) listener2 : Écouteur
e ne
r3 .
ac
t i on
2. création Pe
rfo
rm
new d'un évènement ed
(ev
e n t)
event : Événement listener3 : Écouteur
●
source=b
9
●
action=b.getCommand()
Enregistrement des Listener
• Une source d'événements propose des
méthodes d'enregistrement dont la signature
a la forme suivante :
• public void add<ListenerType>(<ListenerType> listener)
A tout moment un objet récepteur d'événements peut annuler sa demande de
Notification: une source d'événements pour une interface d'écoute d'événements
propose aussi des méthodes d'annulation de notification dont la signature a la forme
suivante : 10
● public void remove<ListenerType>(<ListenerType> listener)
Exemple : MouseMotionListener
11
Gestion des événements en résumé
→ identifier l’objet à l’origine des événements (souvent un composant)
• identifier le type de l ’événement que l ’on veut intercepter pour cela : lister
dans sa classe toutes les méthodes de type addXXXListener
• créer une classe qui implémente l’interface associée à l’événement que l’on
veut gérer
• celle du composant (ou du conteneur du composant) à l’origine de l
’événement ("facilité" d ’implémentation)
• une classe indépendante qui détermine la frontière entre l ’interface
graphique (émission des événements) et ce qui représente la logique
de l ’application (traitement des événements). Une bonne séparation
permet de faciliter l’évolution du logiciel.
• Implémenter dans cette classe la (les) méthode(s) associées à l’événement.
• L’événement passé en paramètre contient des informations qui
peuvent être utiles (position du curseur, état du clavier, objet
source de l’événement).
12
Des adaptateurs aux classes internes
• Le modèle événementiel de JAVA 1.1 peut rapidement devenir
difficile à gérer
– si un Listener est à l'écoute d'un grand nombre sources,
– si un objet est à l'écoute d'événements issus de plusieurs
sources du même type (le récepteur ne peut implémenter
qu'une seule fois l'interface réceptrice)
• → Cela peut conduire à du code difficile à lire et/ou difficile à
écrire
• Une solution consiste à introduire un objet "médiateur"
entre la source d'événements et le récepteur d'événements
• son role : adapter la source aux besoins spécifiques d'où
le nom d'adaptateur d'événements
13
Exemple
→ Problème ca fait beaucoup de nouvelles petites classes et le code est dispersé, et 14
plus difficile à lire …
Utilisation des classe anonymes
comme adapteurs
Alors que faire ?
Classe anonyme adaptateur
d’événements pour le JButton
15