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ückgabewert | 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: 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.