Event-Handling

Werbung
Event-Handling
Ohne Event-Handling (deutsch: Ereignisbehandlung) nutzt das Programm wenig. Man kann
zwar die Buttons anklicken doch es geschieht nichts. Und auch wenn das Fenster geschlossen
wird, läuft das Programm noch weiter.
Der Mechanismus zur Ereignisbehandlung im Zusammenhang mit den Grapphical User
Interfaces beruht auf dem Listener-Prinzip. Ein Listener horcht nach eingehenden Nachrichten
(zum Beispiel einem Klick) von Buttons oder JButtons (denen er zugewiesen wurde) und
stellt Methoden zur Verfügung, die beim Eintreffen einer bestimmten Nachricht ausgeführt
werden.
In der zweiten Version wird daher dem linken JButton ein Listener listener der Klasse
GUIListener zugeordnet ( ...addActionListener(listener)). Dieser Listener kann man
als eine Art Unterklasse der Klasse ActionListener der Java-Bibliothek
java.awt.event.* mit der Methode actionPerformed(ActionEvent...).
(Strenggenommen ist ein ActionListener ein Interface und man sagt, der GUIListener
implementiert das Interface.)
Wenn ein JButton angeklickt wird, erzeugt und schickt er ein ActionEvent an seinen
Listener. Der Listener wird horchen, ob der JButton angeklickt wird und
gegebenenfalls seine Methode actionPerformed(...) ausführen. (Natürlich muss dazu das
Objekt listener der Klasse GUIListener vor der Zuweisung zu der Schaltfläche erzeugt
werden.)
Bei der Methode actionPerformed(ActionEvent ae) wird in ae automatisch gespeichert,
welches Event aufgetreten ist. Dies hat Vorteile um auf unterschiedliche Ereignisse
unterschiedlich reagieren zu können. Mit Hilfe der Funktion ae.getSource()kann abgefragt
werden, von welchem Objekt das Ereignis ausgelöst wurde. Um diese Information wie
gewünscht verarbeiten zu können muss die entsprechende Klasse (hier: GUIListener) in
einer Kennt- oder Hat-Beziehung zu den in Frage kommenden Objekte stehen. Eoinfacher
geht es mit der Funktion ae.getActionCommand(). Die Funktion
ae.getActionCommand()gibt an, welche Aufschrift das Objekt trägt, das die Nachricht
gesendet hat.
In der 4.Version wurde dem Fenster ein WindowListener zugeordnet, der bewirkt, dass das
Programm beendet wird, wenn das Fenster geschlossen wird. Da es recht mühselig ist, alle
Methoden des WindowListeners zu überschreiben, kann man hier einen Adapter benutzen.
WindowAdapter stehen wie die Listener in der Bibliothek java.awt.event.* zur
Verfügung. Ein WindowAdapter implementiert einen WindowListener und überschreibt
automatisch alle Methoden so, dass sie leer sind. Dies bietet den Vorteil, dass nur die
Methoden, die wirklich etwas bewirken sollen, überschrieben werden müssen. (vgl.
FensterListener der 4.Version) Adapter sind im Gegensatz zu Listenern Klassen. (Daher
beginnt die Klassendefinition dann mit class …. extends WindowAdapter.)
Insgesamt sind also folgende Schritte nötig:
1. Listener implementieren (d.h. entsprechende Klassen schreiben)
(insbes. beim ActionListener ggf. an nötige Kennt-Beziehungen zu den
entsprechenden GUIs denken)
2. Listener erzeugen und den entsprechenden GUIs zuordnen
(3. Hoffen, dass alles klappt und testen)
Herunterladen