par exemple, quelque chose qu'il faut toujours faire en créant une application est de fournir un
WindowListener au JFrame de manière à pouvoir appeler System.exit() pour sortir de l'application lorsqu'on
reçoit l'événement windowClosing(). Mais comme WindowListener est une interface, il faut implémenter
chacune de ses méthodes même si elles ne font rien. Cela peut être ennuyeux.
Pour résoudre le problème, certaines (mais pas toutes) des interfaces listener qui ont plus d'une méthode
possèdent des adaptateurs [adapters], dont vous pouvez voir les noms dans le tableau ci-dessus. Chaque
adaptateur fournit des méthodes vides par défaut pour chacune des méthodes de l'interface. Ensuite il suffit
d'hériter de cet adaptateur et de redéfinir uniquement les méthodes qu'on doit modifier. Par exemple, le
WindowListener qu'on utilisera normalement ressemble à ceci (souvenez-vous qu'il a été encapsulé dans la
classe Console de com.bruceeckel.swing) :
class MyWindowListener extends WindowAdapter {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
}
Le seul but des adaptateurs est de faciliter la création des classes listener.
Il y a cependant un désavantage lié aux adaptateurs, sous la forme d'un piège. Supposons qu'on écrive un
WindowAdapter comme celui ci-dessus :
class MyWindowListener extends WindowAdapter {
public void WindowClosing(WindowEvent e) {
System.exit(0);
}
}
Ceci ne marche pas, mais il nous rendra fous à comprendre pourquoi, car tout va compiler et s'exécuter
correctement, sauf que la fermeture de la fenêtre ne fera pas sortir du programme. Voyez-vous le problème ? Il
est situé dans le nom de la méthode : WindowClosing() au lieu de windowClosing(). Une simple erreur de
majuscule se traduit par l'ajout d'une méthode nouvelle. Ce n'est cependant pas cette méthode qui est appelée
lorsque la fenêtre est fermée, de sorte qu'on n'obtient pas le résultat attendu. En dépit de cet inconvénient, une
interface garantit que les méthodes sont correctement implémentées.
Surveiller plusieurs événements
Pour nous prouver que ces événements sont bien déclenchés, et en tant qu'expérience intéressante, créons une
applet qui surveille les autres comportement d'un JButton, autres que le simple fait qu'il soit appuyé ou pas. Cet
exemple montre également comment hériter de notre propre objet bouton, car c'est ce qui est utilisé comme
cible de tous les événements intéressants. Pour cela, il suffit d'hériter de JButton [69].
La classe MyButton est une classe interne de TrackEvent, de sorte que MyButton peut aller dans la fenêtre
parent et manipuler ses champs textes, ce qu'il faut pour pouvoir écrire une information d'état dans les champs
du parent. Bien sûr ceci est une solution limitée, puisque MyButton peut être utilisée uniquement avec
TrackEvent. Ce genre de code est parfois appelé "fortement couplé" :
5 of 18 7/6/01 9:55 AM
file:///D|/Daniel/TIJ2FR/All/Chapter13c.htm