Listener reagieren auf Benutzer |
Ein Frame mit Button samt Listener-Objekten stellt sich also folgendermassen dar:
Abbildung: GUI
Die roten Linien bedeuten die Registrierung des Listener-Objekts (blau) bei dem btr. grafischen Element, die grünen Linien zeigen den Listener in Aktion:
Jede Aktion des Benutzers, etwa ein Mausklick, erzeugt aus Sicht von Java ein Ereignis (auf der Abb. in gelb). Dieses wird als ein Objekt namens e aus der Klasse WindowEvent bzw ActionEvent an das zuständige Listener-Objekt weitergereicht (Es spielt keine Rolle, dass beide Male der Name e verwendet wird; die Ereignisse treten zu verschiedenen Zeitpunkten auf und der Name steht jeweils wie unbenutzt zur Verfügung). Das Listener-Objekt startet dann seine Methode
public void windowClosing( WindowEvent e )
{
System.exit(0);
}
oder
public void actionPerformed( ActionEvent e )
{
System.out.print( "ok-Button geklickt" );
}
wie im vorletzten Kapitel ausgeführt. Das Objekt mit Namen e enthält dabei nähere Angaben über das Ereignis und könnte in den o.g. Methoden noch ausgewertet werden, Beispiel folgt.
Also: Listener-Objekte können auf Ereignisse reagieren, und zwar:
Es folgen nun einige wichtige Arten von Listener-Klassen:
Der WindowAdapter gehört dem ganzen Frame und wird mittels der Methode
addWindowListener()
beim Frame registriert. Wie man dem Handbuch entnehmen kann, definiert die Klasse WindowAdapter insgesamt 6 Methoden, die man in einer abgeleiteten Klasse überschreiben kann, um am Fenster bestimmte Reaktionen auf Mausaktionen hervorzurufen. Im folgenden Beispiel sind 2 Methoden überschrieben und damit definiert worden, nämlich windowClosing() und windowIconified()
Beispiel WindowAdapter
Übung:
Man definiere auch für die restliche 4 Methoden irgendwelche schönen Aktionen.
ActionListener implementieren das interface ActionListener und müssen daher die Methode actionPerformed( ActionEvent e ) definieren. Wenn diese Methode aufgerufen wird, dann wird auch jedesmal automatisch ein Objekt e aus der Klasse ActionEvent erzeugt und der Methode actionPerformed als Parameter übergeben. Diese Objekt kann man auswerten und damit näheren Aufschluss über die Art der stattgefundenen Aktion erhalten. Wie man im Handbuch bei der Klasse ActionEvent nachlesen kann, verfügt die Klasse über eine Methode getActionCommand() Mit dieser Methode bekommt man die Beschriftung des Buttons, der gerade geklickt worden ist; daher kann eine ActionListener-Klasse für alle Buttons definiert werden (nicht eine eigene für jeden Button), in deren actionPerformed()-Methode eine Fallunterscheidung nach der Beschriftung des geklickten Buttons vorgenommen wird.
Beispiel ActionListener
Übung:
Testen!
Tastatur-Eingaben werden von einem KeyListener entgegengenommen. Im folgenden Demo kann man die Buttons mit der Return-Taste auslösen. Beispiel KeyListener
Übung:
Die Buttons sollen mit "rot", "gelb", "grün" beschriftet werden und sich entsprechend verhalten.