JavaBeans-Ereignisse werden signalisiert, wenn ein Vorgang stattfindet, z.B. wenn eine Schaltfläche betätigt oder ein Fenster geschlossen wird. Der Visual Editor für Java zeigt Ereignisse in der Java-Beans-Sicht und ermöglicht Ihnen, Ereignisse hinzuzufügen oder zu entfernen.
Die Liste der definierten Ereignisse für eine Java-Bean wird in ihrer BeanInfo-Klasse beschrieben, die auch die allgemein verwendeten oder bevorzugten Ereignisse steuert.
Sie möchten vielleicht einer Java-Bean ein Ereignis hinzufügen, wenn Sie möchten, dass etwas geschieht, wenn die Java-Bean generiert wird, zum Beispiel die Aktualisierung einer Datenbank, wenn eine Taste betätigt wird. Die das Ereignis auslösende Java-Bean ist die Quelle und das Objekt, das zurückgerufen wird, wenn das Ereignis ausgelöst wird, wird als Listener-Funktion bezeichnet. Jede Java-Bean verfügt über eine Schnittstelle, die es ihr ermöglicht, die Listener-Funktion für jedes Ereignis zu benachrichtigen und Methoden zum Hinzufügen und Löschen von Listener-Funktionen.
So gibt es, wenn die verursachende Java-Bean eine Methode XXX hat, eine Listener-Funktionsschnittstelle XXXListener und zwei Methoden. Es ist wichtig, dass die XXXListener-Funktion die java.util.EventListener erweitert. Wenn dies nicht der Fall ist und wenn keine spezifische BeanInfo zur Verfügung gestellt wird, wird das Ereignis nicht ermittelt.
Die Methoden bei der XXListener-Funktionsschnittstelle selbst hängen von der Semantik des Ereignisses ab, aber die Konvention ist, dass deren Signatur void <eventOccurenceMethodName>(<EventStateObjectType>evt); ist. Es ist wichtig, dass die XXXListener-Funktion die java.util.EventObject erweitert. Wenn dies nicht der Fall ist und wenn keine spezifische BeanInfo zur Verfügung gestellt wird, wird das Ereignis nicht ermittelt.
Ein Beispiel für ein Ereignis ist die Java-Bean java.awt.Component, die Ereignisse auslöst, wenn die Maus darüber bewegt wird. Die Listener-Funktionsschnittstelle 'java.awt.event.MouseMotionListener' beinhaltet die beiden folgenden Methoden:
Um eine Maus-Listener-Funktion hinzuzufügen, hat java.awt.Component die beiden folgenden Methoden:
Die zweite Ereignisdarstellung wird durch eine Java-Bean generiert, wenn sich ein Eigenschaftswert ändert. Ein Beispiel dafür ist die Eigenschaft 'aktiviert' bei javax.swing.JButton. Eine Eigenschaft, die ein Ereignis startet, wenn sich ihr Wert ändert, wird als gebundene Eigenschaft bezeichnet. Anstelle einer separaten Listener-Funktionsschnittstelle für jede gebundene Eigenschaft gibt es eine allgemeine Listener-Funktionsschnittstelle java.beans.PropertyChangeListener, die über eine einzelne Callback-Methode voidpropertyCanged(PropertyChangeEvent evt); verfügt. Das Argument PropertyChangeEvent hat drei Methoden, die durch den Empfänger der Methode abgefragt werden können:
String getPropertyName() | Der Name der Eigenschaft, die bei der Java-Bean, die den Start des Ereignisses verursacht hat, geändert wurde |
Object getNewValue() | Der neue Wert der Eigenschaft |
Object getOldValue() | Der Wert der Eigenschaft bevor er geändert wurde |
Um das Interesse an Eigenschaftsänderungen in einer Java-Bean zu registrieren, gibt es zwei Methoden: void addPropertyChangeListener(PropertyChangeListener listener); void addPropertyChangeListener(String propertyName, PropertyChangeListener listener);
Die erste dieser Methoden ist immer bei einer Java-Bean, die über gebundene Eigenschaften verfügt, vorhanden. Die zweite jedoch ist optional und hängt von der Darstellung der Ereignisregistrierung ab, die vom Autor der Java-Bean verwendet wurde. So verwenden zum Beispiel AWT-Komponenten die erste Darstellung der Ereignisänderungsregistrierung, während Swing-Komponenten beide Darstellungen verwenden.
Zur Verwendung eines Ereignisses gibt es drei Objekte:
Üblicherweise sind die letzten beiden kombiniert, so dass die Klasse, die die Logik ausführt, entweder die Listener-Funktionsschnittstelle direkt implementiert oder eine untergeordnete Klasse verwendet. Die Darstellungen der Codes, die der Visual Editor für Java erkennt und generiert, werden im Abschnitt 'Ereigniscodegenerierung' behandelt.
Viele Listener-Funktionen haben mehr als eine Callback-Methode. Ein Beispiel ist die Funktion java.awt.FocusListener, die zwei Methoden hat; focusGained(java.awt.FocusEvent event) und focusLost(java.awt.FocusEvent event). Bei der Erstellung einer Listener-Funktionsklasse, die eine Schnittstelle implementiert, von der der Java-Compiler verlangt, dass alle Schnittstellenmethoden implementiert werden, resultiert dies oft darin, dass viele leere Methode erstellt werden, um diese Erfordernis zu erfüllen, und nur eine oder einige der Methoden tatsächlich einen Code enthalten. Dies wird im folgenden gezeigt, wo eine FocusListener-Funktion zur Ausführung einer Logik verwendet wird, wenn eine Java-Bean fokussiert wird. Es muss jedoch eine leere Methode 'focusLost' zur Verfügung gestellt werden.
javaBean.addFocusListener(new java.awt.event.FocusListener() { Â Â Â public void focusGained(java.awt.event.FocusEvent e) { Â Â Â Â Â Â Â doFocusGainedCode(); Â Â Â } Â Â Â Â Â Â Â public void focusLost(java.awt.event.FocusEvent e) { Â Â Â } });
Um zu vermeiden, dass es viele leere Listener-Funktionsmethoden für viele Listener-Funktionen gibt, werden Adapterklassen vorgesehen. Diese implementieren die Listener-Funktionsschnittstelle und stellen die Nullbefehlimplementierung ihrer Methoden zur Verfügung. Der Vorteil ist, dass die Listener-Funktion diese erweitern und sich nur auf ausgewählte Methoden spezialisieren kann, ohne standardmäßige Implementierungen für den Rest zur Verfügung stellen zu müssen (diese werden vom Adapter übernommen).
javaBean.addFocusListener(new java.awt.event.FocusAdapter() { Â Â Â public void focusGained(java.awt.event.FocusEvent e) { Â Â Â Â Â Â Â doFocusGainedCode(); Â Â Â } });
Der Visual Editor ist in der Lage, Adapterklassen zu erkennen und damit zu arbeiten. Im Abschnitt BeanInfo Events wird beschrieben, wie Sie dem Visual Editor Adapterklassen für Ihre eigenen Ereignisse zuordnen können.
Übergeordnetes Thema: Verarbeitung von Ereignissen mit dem Visual Editor