Des événements Beans Java sont signalés lorsqu'une activité se produit, par exemple lorsque l'utilisateur clique sur un bouton ou ferme une fenêtre. Visual Editor for Java affiche les événements dans la vue Beans Java ; vous pouvez utiliser cette vue pour ajouter ou supprimer des événements.
La liste des événements définis pour un bean Java est décrite dans sa classe BeanInfo, qui contrôle les événements couramment utilisés ou sélectionnés.
Vous pouvez être amené à ajouter un événement à un bean Java si vous souhaitez qu'un processus soit déclenché lors de la génération du bean, par exemple la mise à jour d'une base de données lorsque l'utilisateur clique sur un bouton. Le bean Java générant l'événement correspond à l'élément source et l'objet qui est rappelé lors de la génération représente le module d'écoute. Chaque bean Java possède une interface qui permet de notifier chaque événement aux modules d'écoute, ainsi que les méthodes à utiliser pour ajouter et supprimer les modules d'écoute.
En règle générale, si le bean Java source possède une méthode XXX, il existe une interface de module d'écoute, XXXListener et deux méthodes. Il est nécessaire que XXXListener étende java.util.EventListener. Dans le cas contraire, l'événement n'est pas détecté sauf si un élément BeanInfo spécifique est fourni.
Les méthodes de l'interface XXXListener dépendent de la sémantique de l'événement ; toutefois, par convention, leur signature correspond à void <eventOccurenceMethodName>(<EventStateObjectType> evt);. Il est important que XXXListener étende java.util.EventObject. Dans le cas contraire, l'événement n'est pas détecté sauf si un élément BeanInfo spécifique est fourni.
Un exemple d'événement est java.awt.Component, qui génère des événements lorsque le pointeur de la souris est déplacé. L'interface du module d'écoute, java.awt.event.MouseMotionListener, implémente les deux méthodes suivantes :
Pour ajouter un module d'écoute de la souris, java.awt.Component dispose des deux méthodes suivantes :
Le second type d'événement est généré par un bean Java lorsque la valeur d'une propriété est modifiée. La propriété 'enabled' de javax.swing.JButton en est un exemple. Une propriété qui déclenche un événement lorsque la valeur associée est modifiée représente une propriété liée. Au lieu d'utiliser une interface de module d'écoute distincte pour chaque propriété liée, il existe une interface de module d'écoute générique java.beans.PropertyChangeListener qui dispose d'une méthode de rappel unique void propertyCanged(PropertyChangeEvent evt); L'argument PropertyChangeEvent dispose de trois méthodes qui peuvent être interrogées par le récepteur de la méthode :
String getPropertyName() | Nom de la propriété modifiée dans le bean Java et qui est l'origine du déclenchement de l'événement. |
Objet getNewValue() | Nouvelle valeur de la propriété |
Objet getOldValue() | Valeur de la propriété avant sa modification |
Pour enregistrer les modifications apportées aux propriétés d'un bean Java, deux méthodes sont disponibles : void addPropertyChangeListener(PropertyChangeListener listener); void addPropertyChangeListener(String propertyName, PropertyChangeListener listener);
La première méthode est toujours utilisée avec un bean Java dont les propriétés sont liées. Toutefois, la seconde méthode est facultative et dépend du style d'enregistrement de l'événement utilisé par l'auteur du bean Java. Par exemple, les composants AWT utilisent le premier style d'enregistrement pour les modifications d'une propriété alors que les composants Swing utilisent les deux styles.
Pour utiliser un événement, vous disposez de trois objets :
En règle générale, les deux derniers objets sont associés afin que la classe qui exécute la logique implémente directement l'interface du module d'écoute ou utilise une classe interne. Les styles de code que l'éditeur visuel reconnaît et génère sont présentés dans la section Génération d'un code d'événement.
De nombreuses interfaces de modules d'écoute possèdent plusieurs méthodes de rappel. Par exemple, java.awt.FocusListener dispose de deux méthodes : focusGained(java.awt.FocusEvent event) et focusLost(java.awt.FocusEvent event). Lorsque vous créez une classe de module d'écoute implémentant l'interface, le compilateur requiert l'implémentation de toutes les méthodes de l'interface, ce qui entraîne souvent la création de nombreuses méthodes vides alors qu'une seule ou qu'une partie de ses méthodes contient réellement du code. L'instruction suivante présente un élément FocusListener utilisé pour établir une logique lorsqu'un bean Java est activé. Toutefois, une méthode vide focusLost doit être fournie.
javaBean.addFocusListener(new java.awt.event.FocusListener() { public void focusGained(java.awt.event.FocusEvent e) { doFocusGainedCode(); } public void focusLost(java.awt.event.FocusEvent e) { } });
Pour éviter d'avoir trop de méthodes de module d'écoute vides, des classes adaptateurs sont fournies. Elles implémentent l'interface du module d'écoute et fournissent une implémentation vide "no-op" des méthodes associées. L'avantage est que le module d'écoute peut étendre ces méthodes spécifiques sans avoir à assurer l'implémentation par défaut pour les méthodes restantes (elles sont héritées de l'adaptateur).
javaBean.addFocusListener(new java.awt.event.FocusAdapter() { public void focusGained(java.awt.event.FocusEvent e) { doFocusGainedCode(); } });
L'éditeur visuel est capable de reconnaître et d'utiliser les classes adaptateurs ; la section Evénements BeanInfo explique comment associer des classes adaptateurs de vos propres événements à l'éditeur visuel.
Rubrique parent : Gestion des événements avec l'éditeur visuel