ActionEvents verarbeiten

Die Klasse ActionEvent enthält drei Datenfelder, die der Anwendung eine nähere Zuordnung ermöglichen: type, command and source.

  • int type: Dieses Datenfeld enthält den Typen des ActionEvents. Tabelle 1 listet die möglichen Werte auf:

WertBeschreibung
BUTTON_PRESSEDDie Nachricht wurde von einer Schaltfläche ausgelöst.
ITEM_SELECTEDEin List- oder ComboBox-Eintrag wurde ausgewählt.
VALUE_CHANGEDEin numerischer Wert wurde geändert (z.B. bei einem Slider).
STATE_CHANGEDDer Zustand eines RadioButtons oder einer CheckBox wurde geändert.
Tabelle 1: Mögliche Werte des Datenfeldes jcontrol.ui.wombat.event.ActionEvent.type

  • String command: Über den command-String können UI-Komponenten einem ActionEvent Informationen mit auf den Weg geben, die vom Empfänger ausgelesen und verwertet werden können. Um welche Information es sich handelt, ist Komponenten-abhängig. Bei Buttons wird beispielsweise die Beschriftung übermittelt. Beachten Sie aber, dass das command auch null sein kann.
  • ActionProducer source: Dieses Datenfeld enthält eine Referenz auf das Objekt, welches das ActionEvent ausgelöst wird.

Im unten dargestellten Ausschnitt des Beispiel-Programms werden zwei Techniken demonstriert, wie die Quelle eines ActionEvents ermittelt werden kann. Zunächst prüft die Methode onActionEvent, ob das empfangene Ereignis von einem Button ausgelöst wurde (event.type). Dann soll entschieden werden, ob der linke oder der rechte Button gedrückt wurde. Der linke Button wird dabei mit Hilfe von event.command anhand seiner Beschriftung identifiziert, der rechte dagegen durch einen Aufruf von event.source. Letztere Technik erscheint zwar zunächst eleganter, setzt aber voraus, dass eine Referenz auf den Button als Instanzvariable der Klasse zur Verfügung steht. Dies ist evt. nicht der Fall, wenn der ActionListener von einer separaten Klasse implementiert wird.

    ...
    53       public void onActionEvent(ActionEvent event) {
    54       // check whether this is a BUTTON_PRESSED event
    55       if (event.type == ActionEvent.BUTTON_PRESSED) {
    56     
    57         // recognize event's source by using getActionCommand()
    58         if ( "Left Button".equals(event.command))
    59           label.setText("You pressed the left button!");
    60       
    61         // recognize event's source by using getSource()
    62         if (event.source == button_right)
    63           label.setText("The right button was hit!");
    64         }
    65       }
    ...

Welche Arten von ActionEvents durch die verschiedenen Komponenten von JControl/Wombat generiert werden, ist in der jeweiligen API-Dokumentation beschrieben. Allen UI-Komponenten gemein ist allerdings, dass sie die Methode setActionListener(ActionListener listener) bereitstellen. So kann ein Anwendungsprogramm durch den Benutzer ausgelöste Ereignisse individuell behandeln und selbst festlegen, auf welche es reagieren möchte und welche ignoriert werden sollen.