Händelser, lyssnare och adapterklasser

JavaBean-händelser signaleras när en aktivitet utförs, till exempel när en knapp trycks ned eller ett fönster stängs. I den visuella redigeraren för Java visas händelser i vyn Java-bönor och du kan använda vyn till att lägga till och ta bort händelser.

Listan med definierade händelser för en JavaBean beskrivs i motsvarande BeanInfo-klass som också kontrollerar vanliga eller rekommenderade händelser.

Det kan hända att du vill lägga till en händelse till en JavaBean om du vill att något ska hända när JavaBean genereras, till exempel en databasuppdatering när en knapp trycks ned. Den Java-böna som orsakar händelsen är källan och det objekt som anropas när händelsen inträffar kallaslyssnare. Varje JavaBean har ett gränssnitt där du kan meddela lyssnarna om händelserna och metoder för att lägga till och ta bort lyssnare.

Vanligen är det så att om käll-JavaBean har en metod XXX finns det ett lyssnargränssnitt, XXXListener, och två metoder. Det är viktigt att XXXListener utökar java.util.EventListener. Om det inte gör det och om inte en viss BeanInfo tillhandahålls upptäcks inte händelsen.

Metoderna för XXXListener-gränssnittet beror på händelsens semantik men konventionen är att de har signaturen void <eventOccurenceMethodName>(<EventStateObjectType> evt);. Det är viktigt att XXXListener utökar java.util.EventObject. Om det inte gör det och om inte en viss BeanInfo tillhandahålls upptäcks inte händelsen.

Ett exempel på en händelse är JavaBean java.awt.Component som orsakar händelser när musen placeras på den. Lyssnargränssnittet, java.awt.event.MouseMotionListener, implementerar följande två metoder:

Om du vill lägga till en muslyssnare har java.awt.Component följande två metoder:

Det andra formatet för händelser genereras av en JavaBean när ett egenskapsvärde ändras. Ett exempel på det är egenskapen 'enabled' för javax.swing.JButton. En egenskap som orsakar en händelse när värdet för den ändras kallas en bunden egenskap. I stället för att ha ett separat lyssnargränssnitt för varje bunden egenskap finns det ett allmänt lyssnargränssnitt, java.beans.PropertyChangeListener, som har en enda metod för återanrop, void propertyCanged(PropertyChangeEvent evt);. Argumentet PropertyChangeEvent har tre metoder som mottagaren av metoden kan fråga:

String getPropertyName() Namnet på den egenskap som ändrades för den JavaBean som orsakade händelsen
Object getNewValue() Det nya värdet för egenskapen
Object getOldValue() Värdet för egenskapen innan den ändrades

Det finns två metoder för att registrera intresse av egenskapsändringar för en JavaBean: void addPropertyChangeListener(PropertyChangeListener listener); void addPropertyChangeListener(String propertyName, PropertyChangeListener listener);

Den första av de här metoderna finns alltid för en JavaBean som har bundna egenskaper. Den andra är valfri och beror på det format för händelseregistrering som används av författaren till JavaBean. Till exempel används det första formatet för ändringsregistrering för egenskaper för AWT-komponenter och båda formaten för Swing-komponenter.

Om du vill använda en händelse finns det tre objekt:

  1. Den JavaBean som orsakar händelsen (källan)
  2. Den klass som tar emot en avisering från källan (lyssnaren)
  3. Den klass som implementerar den logik som inträffar när lyssnaren återanropas.

De sista två kombineras vanligen så att den klass som utför logiken antingen implementerar lyssnargränssnittet direkt eller använder en inre klass. De format för kod som den visuella redigeraren för Java känner igen och genererar behandlas i avsnittet om händelsekodgenerering.

Adapterklasser

Många lyssnargränssnitt har fler än en metod för återanrop. Ett exempel är java.awt.FocusListener som har två metoder; focusGained(java.awt.FocusEvent event) och focusLost(java.awt.FocusEvent event). När du skapar en lyssnarklass där gränssnittet implementeras insisterar Java-kompilatorn att alla gränssnittsmetoder implementeras vilket ofta resulterar i att många tomma metoder skapas för att tillgodose kraven för lyssnarklassen när i själva verket endast en eller några få av metoderna för den innehåller kod. I följande sats visas en FocusListener som används till att utföra logik när fokus ställs på en Java-böna. En tom focusLost måste tillhandahållas.

javaBean.addFocusListener(new java.awt.event.FocusListener() {      
    public void focusGained(java.awt.event.FocusEvent e) {          
        doFocusGainedCode();      
     }          
        public void focusLost(java.awt.event.FocusEvent e) {      
     }  
});

I syfte att undvika många tomma lyssnarmetoder för många lyssnare tillhandahålls adapterklasser. Där implementeras lyssnargränssnittet och tom no-op-implementering för metoderna tillhandahålls. Fördelen är att lyssnaren kan utöka dem och endast specialisera valda metoder utan att behöva tillhandahålla standardimplementering av de övriga (de ärvs från adaptern).

javaBean.addFocusListener(new java.awt.event.FocusAdapter() {     
     public void focusGained(java.awt.event.FocusEvent e) {          
         doFocusGainedCode();      
         }  
   });
Närliggande uppgifter
Visa händelser för en komponent
Lägga till händelser till en komponent
Ta bort händelser från en komponent
Visa källkoden för en händelse

(C) Copyright IBM Corporation 1999, 2004. All Rights Reserved.