ActionEvents verarbeiten

Zur Verarbeitung der empfangenen Nachrichten stellt die Klasse ActionEvent drei Methoden zur Verfügung: getType(), getActionCommand() und getSource().

  • int getType(): Diese Methode gibt den Typ des ActionEvents als int zurück. In Tabelle 1 sind die möglichen Rückgabewerte aufgelistet:

RückgabewertBeschreibung
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: Rückgabewerte der Methode jcontrol.ui.vole.event.ActionEvent.getType()

  • String getActionCommand(): Über das ActionCommand können UI-Komponenten einem ActionEvent Informationen mit auf den Weg geben. Vom Empfänger können diese mit Hilfe der getActionCommand()-Methode wieder ausgelesen werden. Um welche Information es sich handelt, ist Komponenten-abhängig. Bei Buttons wird beispielsweise die Beschriftung übermittelt. Beachten Sie aber, dass das ActionCommand auch null sein kann.
  • Component getSource(): Mit Hilfe der getSource()-Methode kann die Quelle eines ActionEvents erfragt werden. Der Rückgabewert ist ein Zeiger auf ein Component.

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.getType()). Dann soll entschieden werden, ob der linke oder der rechte Button gedrückt wurde. Der linke Button wird dabei mit Hilfe von event.getActionCommand anhand seiner Beschriftung identifiziert, der rechte dagegen durch einen Aufruf von event.getSource(). Letztere Technik erscheint zwar zunächst eleganter, setzt aber voraus, dass ein Zeiger 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.

    ...
    49       public void onActionEvent(ActionEvent event) {
    50         // check whether this is a BUTTON_PRESSED event
    51         if (event.getType() == ActionEvent.BUTTON_PRESSED) {
    52           
    53           // recognize event's source by using getActionCommand()
    54           if (event.getActionCommand().equals("Left Button"))
    55             label.setLabel("You pressed the left button!", true);
    56             
    57           // recognize event's source by using getSource()
    58           if (event.getSource() == button_right)
    59             label.setLabel("The right button was hit!", true);
    60         }
    61       }
    ...

Welche Arten von ActionEvents durch die verschiedenen Komponenten von JControl/Vole 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.

Wenn Sie weitere Beispiele für die Behandlung von UI-Nachrichten betrachten wollen, sei an dieser Stelle auf die umfangreich dokumentierten Beispielprogramme in der Rubrik Examples & Demos verwiesen.