19.2
Aktionsabhorcher |
|
Was ist
nun ein Ereignis? Wir machen uns das am besten an einem Beispiel klar. Das
unten stehende Bild zeigt einen JFrame mit dem Titel "Rot". Der Frame hat
das normale Aussehen eines Windowsfensters und besitzt einen Schalter
(Button) mit der Aufschrift. |
|
|
|
Das
Klickt man mit der Maus auf den Schalter, färbt sich der Hintergrund rot. |
|
|
|
Das
Klicken stellt ein Ereignis dar. Damit das Programm auf dieses Ereignis
reagieren kann, muss es befähigt werden, auf das Ereignis zu reagieren.
Wie man das in einem Javaprogramm implementiert wollen wir jetzt lernen. |
|
Downlaod: JRot.jav |
|
An der
gelben Markierung erkennt man die Veränderungen gegenüber der
JFrame-Vorlage. In der Zeile #2 wird ein
JButton-Objekt
deklariert, das in der Zeile #4 im Konstrukor schließlich erzeugt wird.
Dabei benutzen wir einen Konstruktor, der dem Schalter eine Aufschrift
zufügt. Das JButton-Objekt
wird in Zeile #6 dem Container
cp
hinzugefügt. Dieser Button kann, wenn das Programm läuft gedrückt werden,
aber niemand kann darauf reagieren. Das kenn erst geschehen, wenn es
jemanden gibt, der ein Ereignis behandeln kann und zusätzlich der
JButton
von dem Ereignisbehandler überwacht wird. Das letztere geschieht dadurch
dass wir das JButton-Objekt bei z.B. bei einem
ActionListener
registrieren. Dies geschieht mit der Methode
addActionListener(..).
Im Parameter übergeben wir das Objekt, bei dem der
JButton
registriert wird, wir übergeben also das Objekt das die Ereignisbehandlung
implementiert hat. In unserem Fall soll die Instanz des Programms
JRot
selbst das Ereignis behandeln, wir übergeben also die Referenz auf das
Programm selbst, also
this.
Damit aber unsere Klasse zum AktionListener werden kann, muss sie das
Interface ActionListener
implementieren (siehe Klassenkopf). Ein Interface ist nun eine Klasse, die
nur abstrakte Methoden enthält. So enthält hat das Interface
ActionListener,
das im Paket java.awt.event
(#1) abgelegt ist, folgende Gestalt: |
|
|
|
Wir
sehen, das Interface besitzt die abstrakte Methode
actionPerformed(ActionEvent e);
eine Klasse die das Interface implementiert, muss also diese Methode
implementieren. Dies geschieht in unserem Programm in den Zeilen #7
bis #9, wobei der eigentliche Kode in der Zeile #8 steht und bei
seiner Ausführung die Hintergrundfarbe des
Containers
cp
auf rot setzt.
Wird der Button gedrückt, so
erzeugt dieses Ereignis ein
ActionEvent-Objekt, das der
Methode actionPerformed(..)
übergeben wird. Der Nutzen dieser Technik wird im nächsten Kapitel klar,
wo wir dem Kontainer unseres Frames mehrere JButtons hinzufügen, die
unterschiedliche Ereignisse auslösen. |
|
zu | 19.3 Mehrere Buttons lösen Ereignisse aus |
zur Startseite | www.pohlig.de (C) MPohlig 2004 |