Events aan een onderdeel toevoegen

U kunt een event aan een component toevoegen in de view Ontwerp of de view Java-beans van de Visual Editor.

Ga als volgt te werk om een event aan een onderdeel toe te voegen:
  1. Klik met de rechtermuisknop op het onderdeel in de view Java-beans of Ontwerp.
  2. Klik op Events in het voorgrondmenu. In het voorgrondmenu worden de preferente events voor het onderdeel afgebeeld. Voer een van de volgende handelingen uit:
    • Klik op een van de preferente events voor het onderdeel. De event wordt aan het onderdeel toegevoegd. De preferente events voor een JFrame zijn bijvoorbeeld windowClosed (venster gesloten) en windowOpened (venster geopend).
    • Klik op Events toevoegen om het venster Events toevoegen te openen.
  3. Als u het venster Events toevoegen hebt geopend, ziet u een keuzelijst met gecategoriseerde events. Selecteer de event die u wilt toevoegen en klik vervolgens op Voltooien.
    • In het dialoogvenster Event toevoegen worden alle beschikbare events voor het onderdeel afgebeeld in een boomstructuur. Op het eerste niveau worden de eventlisteners afgebeeld, en onder de eventlisteners bevinden zich de mogelijke callbacks die door de event kunnen worden geïnitieerd.
      Dialoogvenster Events toevoegen
    • In dit dialoogvenster kunt u opgeven of u een nieuwe listener wilt maken of een bestaande listener wilt gebruiken. Bij het openen van het dialoogvenster worden de bestaande listeners geanalyseerd. Als een listener opnieuw kan worden gebruikt, wordt deze gemarkeerd met een ander pictogram. Voor bestaande listeners die fungeren als uitbreiding voor een adapterklasse, wordt het pictogram Event aanwezig - klasse gebruikt. Anders wordt het pictogram Event aanwezig gebruikt. Binnen de listener worden bestaande events afgebeeld met een groene pijl Groene pijl, en beschikbare events met een onvolledige pijl Onvolledige pijl.
    • U kunt opgeven of u de bestaande listener wilt gebruiken of een nieuwe listener wilt maken. Wanneer u een nieuwe listener maakt, kunt u kiezen of u hiermee de adapterklasse wilt uitbreiden of alleen de listenerinterface wilt implementeren. Als een optie niet van toepassing is, is het desbetreffende keuzerondje niet beschikbaar. Als er bijvoorbeeld geen bestaande listener is of als u een bestaande listener hebt geselecteerd maar de geselecteerde event is al gebruikt, is Bestaande listener gebruiken niet beschikbaar. Als er geen beschikbare adapterklasse voor een nieuwe listener is, is het keuzerondje uitbreiding: ADAPTERKLASSENNAAM niet beschikbaar.
    • Als u propertyChange (eigenschap wijzigen) selecteert in het dialoogvenster Event toevoegen, beschikt u over een aantal aanvullende opties voor de reagerende methode. Er kan een nieuwe listener worden gemaakt die aan de Java-bean kan worden toegevoegd met behulp van de methode addPropertyChange(PropertyChangeListener listener). In dat geval wordt de generieke reagerende methode propertyChange(PropertyChangeEvent event) van de listener gebruikt voor alle property-events. Voor sommige Java-beans (zoals Swing-componenten) wordt de methode met twee argumenten addPropertyChange(String propertyName, PropertyChangeListener listener) beschikbaar gesteld en standaard geselecteerd voor gebruik door de nieuwe listener.

      Dialoogvenster Event toevoegen

      Een listener die wordt toegevoegd met behulp van de methode met twee argumenten, geldt specifiek voor een bepaalde eigenschap en kan dus niet opnieuw worden gebruikt voor een andere eigenschap. Een listener die wordt toegevoegd met behulp van de methode met één argument, bevat een if-instructie waarmee de naam van de eigenschap wordt gecontroleerd voordat de logica voor elke property-methode wordt uitgevoerd, zoals u kunt zien in het volgende voorbeeld:

      javaBean.addPropertyChangeListener(new java.beans.PropertyChangeListener() {  
          public void propertyChange(java.beans.PropertyChangeEvent e) {                        
                   if ((e.getPropertyName().equals("font"))) {              
                         System.out.println("propertyChange(font)");         
                   }     
                }  
          });

      Hiermee wordt een PropertyChangeListener toegevoegd, waarbij een methode met één argument wordt gebruikt voor meer dan een eigenschap (door meerdere if{}-blokken te gebruiken). 

Wanneer u een event toevoegt en als een bestaande listener kan worden gebruikt, wordt de reagerende methode er aan toegevoegd. Anders wordt een nieuwe listener gemaakt. Om een bestaande listener te gebruiken, moet deze een anonieme binnenklasse zijn van de Java-bean waarmee de listenerinterface wordt geïmplementeerd. De listener moet een leeg corpus voor de reagerende methode hebben, of fungeren als uitbreiding voor de adapterklasse. Bovendien mag er geen bestaande methode zijn voor de event-callback die wordt toegevoegd.  Voor een eigenschap wordt een bestaande PropertyChangeListener opnieuw gebruikt als deze wordt toegevoegd aan de Java-bean via de methode met één argument: addPropertyChange(PropertyChangeListener listener). Als deze nog geen code bevat, wordt de nodige verwerkingscode aan de eigenschap toegevoegd.

Als er geen bestaande listener beschikbaar is waaraan de reagerende methode kan worden toegevoegd, wordt een nieuwe listener gemaakt. De listener wordt dan een anonieme binnenklasse, en als er een adapterklasse voor de event is gedefinieerd, wordt de listener een uitbreiding hiervan. In alle andere gevallen wordt de listenerinterface geïmplementeerd. Nadat de event is toegevoegd wordt een stubmethode met //TODO-commentaar (TODO = actiepunt) gemaakt. De stubmethode is een indicator van de broncode die wordt uitgevoerd wanneer de event zich voordoet. U dient deze te wijzigen om het door u gewenste gedrag te verkrijgen. Het //TODO-commentaar wordt weergegeven in het venster Taken. Onvolledige methoden worden gemarkeerd zodat u deze later kunt terugvinden en het //TODO-commentaar weer kunt verwijderen nadat de callback-logica geschreven is.

In het vorige voorbeeld zag u dat de methode windowOpened al bestaat. Als dit een listener is die fungeert als uitbreiding voor de adapter, wordt dezelfde listener opnieuw gebruikt omdat deze nog geen methode windowClosed bevat. De methode windowClosed(WindowEvent e) wordt toegevoegd en de methodestub en het //TODO-commentaar worden toegevoegd zoals in het onderstaande voorbeeld:

this.addWindowListener(new java.awt.event.WindowAdapter() {       
        public void windowClosed(java.awt.event.WindowEvent e) {  
         System.out.println("windowClosed()"); // TODO Auto-generated stub windowClosed()       
              }       
        public void windowOpened(java.awt.event.WindowEvent e) {          
             callExistingWindowOpenedLogic();      
            }  
});

In de expertmodus kunnen events nog steeds aan de Java-bean worden toegevoegd volgens de eerder beschreven methode, maar ze kunnen ook worden toegevoegd aan een listener in de structuur met Java-beans. In het menu Events worden alle reagerende methoden voor events van de listener afgebeeld, alsmede alle events die al gebruikt of uitgeschakeld zijn.

WindowClosed toevoegen

Voor een PropertyChangeListener worden in het voorgrondmenu alle bijbehorende eigenschappen van de Java-bean afgebeeld. De eigenschappen die al door de PropertyChangeListener worden gebruikt, zijn gedeactiveerd.

listener voor eigenschappenwijzigingen

Een listener die wordt toegevoegd met behulp van de methode met één argument, bevat een if-instructie waarmee de naam van de eigenschap wordt gecontroleerd voordat de logica voor elke reagerende methode wordt uitgevoerd, zoals u kunt zien in het volgende voorbeeld:

javaBean.addPropertyChangeListener(new java.beans.PropertyChangeListener() {  
    public void propertyChange(java.beans.PropertyChangeEvent e) {                        
             if ((e.getPropertyName().equals("font"))) {              
                   System.out.println("propertyChange(font)");         
             }     
          }  
    });

Hiermee wordt een PropertyChangeListener toegevoegd, waarbij een methode met één argument wordt gebruikt voor meer dan een eigenschap (door meerdere if{}-blokken te gebruiken). Bij het toevoegen van de tweede en daaropvolgende reagerende methoden worden nieuwe if{}-blokken toegevoegd.

Als de propertyChangeListener wordt toegevoegd aan de Java-bean met behulp van de methode met twee argumenten, addPropertyChangeListener(String propertyName, PropertyChangeListener listener), geldt deze specifiek voor een bepaalde eigenschap en kan deze niet nogmaals worden gebruikt voor een andere eigenschap. In dat geval worden alle lagere menuopties van het vervolgmenu Events gedeactiveerd.

Verwante concepten
Events, listeners, and adapter classes
De view Java-beans
Verwante taken
Events voor een component bekijken
Events verwijderen uit een component
Bron van een event bekijken

(C) Copyright IBM Corporation 1999, 2004. Alle rechten voorbehouden.