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:
Wert | Beschreibung |
BUTTON_PRESSED | Die Nachricht wurde von einer Schaltfläche ausgelöst. |
ITEM_SELECTED | Ein List - oder ComboBox -Eintrag wurde ausgewählt. |
VALUE_CHANGED | Ein numerischer Wert wurde geändert (z.B. bei einem Slider ). |
STATE_CHANGED | Der 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.