 |
TP JavaBeans Visibles
|
 |
|
Voici le but de la manoeuvre :
À la fin du TP, vous allez pouvoir...
-
créer des JavaBeans qui réagissent aux événements
AWT
-
créer des JavaBeans à partir de zéro qui réagissent
aux autres JavaBeans, et pour ce faire vous créerez
-
votre propre listener interface
-
vos événements à vous
Premier exercice
Il s'agit de spécialiser java.awt.Button.
Travail à effectuer :
-
Votre classe ToggleButton doit à la fois
-
extends java.awt.Button
pour l'héritage
-
implements java.awt.event.ActionListener
pour récupérer les événements quand
vous cliquerez dessus. Ceci implique nécessairement (voir ActionListener)...
-
...que ToggleButton fournisse la méthode
public void actionPerformed(ActionEvent ae) {
// code de la méthode
}
Pour l'instant la méthode peut se contenter d'imprimer un message
informatif sur la console.
-
Elle aura
-
un constructeur sans arguments (obligatoire pour un JavaBean !)
public ToggleButton() {
this("Toggle");
}
qui fait appel à
-
un deuxième constructeur qui accepte comme argument la chaîne
de caractères qui apparaîtra comme label du bouton. Ce constructeur
enregistre le bouton comme étant intéressé par des
clicks souris
public ToggleButton(String str) {
super(str);
addActionListener(this);
}
Au fait, d'où vient la méthode addActionListener
?
Deuxième exercice
Il s'agit de déposer ToggleButton dans le BeanBox
Travail à effectuer :
-
Compilez ToggleButton.java
-
Créer le fichier d'
archive java .jar . N'oubliez pas le fichier manifeste pour
indiquer qu'il s'agit d'un JavaBean.
-
Chargez-le dans le ToolBox, et ensuite dans le BeanBox.
-
Testez-le, on ne sait jamais...
Troisième exercice
Il s'agit de créer votre propre listener interface.
Travail à effectuer :
-
Allons-y...
public interface ButtonListener extends java.util.EventListener {
public void toggleString(ButtonEvent be);
}
Faut-il autre chose ?
Quatrième exercice
Il s'agit de créer votre propre type d'événement.
Travail à effectuer :
-
Idem
public class ButtonEvent extends java.util.EventObject {
public ButtonEvent(Object src) {
super(src);
}
}
Cinquième exercice
Votre ToggleBean communiquera avec d'autres JavaBeans en leur
balançant des événements quand on lui clique dessus.
Pour indiquer qu'il est intéressé par un tel click, un bean
doit s'inscrire auprès du ToggleBean, donc celui-ci a besoin
de gérer les intéressés. Pour ce faire, il lui faut
la variable et les deux méthodes que nous allons définir..
Travail à effectuer :
-
Une variable Vector listeners qui servira pour stocker les prétendents
import java.util.Vector;
public class ToggleButton {
private Vector listeners = new Vector();
// les constructeurs
// les méthodes
}
Voir Vector
pour en savoir plus.
-
Une méthode pour ajouter les intéressés
public void addButtonListener(ButtonListener bl) {
System.out.println("registering " + bl);
listeners.addElement(bl);
}
-
Une méthode pour en enlever
public void removeButtonListener(ButtonListener bl) {
System.out.println("removing " + bl);
listeners.removeElement(bl);
}
Les noms addXxxListener et removeXxxListener
sont obligatoires pour indiquer au BeanBox (ou tout autre outil)
que ToggleButton est capable de déclencher des événements
de type XxxEvent. Ceci est un design
pattern.
Sixième exercice
Les écouteurs se sont inscrits, il ne reste qu'à déclencher
l'événement.
Travail à effectuer :
-
Il faut refaire la méthode actionPerformed pour déclencher
un ButtonEvent quand ToggleButton est poussé
public void actionPerformed(ActionEvent ae) {
System.out.println("button pushed");
ButtonEvent be = new ButtonEvent(this);
for (int i=0; i<listeners.size(); i++) {
((ButtonListener)listeners.elementAt(i)).toggleString(be);
}
}
Et voilà, ToggleButton est fini. Ouf !
Septième exercice
Il s'agit de créer le JavaBean dérivé de Label qui
réagira aux événements de type ButtonEvent.
Ça sera archi-simple, chaque fois qu'il reçoit un événement,
le bean récepteur change le label affiché.
Travail à effectuer :
-
Cette classe, pourquoi pas DumDee, doit à la fois
public void toggleString(ButtonEvent be) {
// code de la méthode
}
-
Voici une ébauche de ce bean
public class DumDee extends java.awt.Label implements ButtonListener {
private boolean even;
public DumDee() {
super("Tweedledum");
}
public void toggleString(ButtonEvent be) {
if (even) {
setText("Tweedledum");
even = false;
} else {
setText("Tweedledee");
even = true;
}
System.out.println("toggling to " + even);
}
}
Huitième exercice
Il s'agit de déposer DumDee dans le BeanBox
Travail à effectuer :
-
Compilez DumDee.java
-
Créer le fichier d'
archive java .jar pour contenir les objet d'intérêt
: vos JavaBeans, l'écouteur, l'événement. N'oubliez
pas le fichier manifeste pour indiquer qu'il s'agit de JavaBeans (il faut
une ligne vide entre les spécifications de beans).
-
Chargez les beans dans le ToolBox, et ensuite dans le BeanBox.
-
Reliez le ToggleBean au DumDee et testez-les, on ne sait
jamais...
Le Code
...and for what it's worth: © 1994-9X Peter Sander, Michel Buffa
(except stuff belonging to others of course)
sander@essi.fr
http://www.essi.fr/~sander
buffa@essi.fr
http://www.essi.fr/~buffa