8.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.
 
 


 

  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.java
import java.awt.*;
import java.awt.event.*;                   #1
import javax.swing.*;

public class JRot extends JFrame implements ActionListener {
    JButton jbRot;                         #2 
    Container cp;                          #3

    public JRot(String title)  {
        super(title);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        cp = getContentPane();
        cp.setLayout(new FlowLayout());

        jbRot = new JButton("rot");        #4
        jbRot.addActionListener(this);     #5
        cp.add(jbRot);                     #6

        setSize(400, 200);
        setVisible(true);
    }

    public void actionPerformed(ActionEvent e) { #7
        cp.setBackground(Color.RED);             #8
    }                                            #9

    public static void main(String[] args) {
        new JRot("Rot");
    }
}
  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. Dies geschieht erst dann, wenn es jemanden gibt, der das Ereignis 'Button ist angeklickt' bemerkt und auf das Ereignis reagiert. Das erstere geschieht dadurch, dass wir das JButton-Objekt 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. Jetzt müssen wir unsere Klasse noch mit den Werkzeugen eines Aktionsabhorchers ausstatten, wir müssen sie zu einem AktionListener machen. sie muss 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:
 
 
import java.awt.event.ActionEvent;
interface ActionListener {
  abstract void actionPerformed(ActionEvent e);
}
  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 8.3 Mehrere Buttons lösen Ereignisse aus
zur Startseite www.pohlig.de  (C) MPohlig 2005