1.10 Events und Listener
- Manche Objekte können ein Ereignis auslösen, z.B. ein JButton, auf den geklickt wird. Ein solches
Objekt wird als Ereignisquelle (engl. event source) bezeichnet.
- Das ausgelöste Ereignis (also der Klick auf den Button, engl. event) ist dann ein Objekt vom Typ
ActionEvent. Ein ActionEvent Objekt enthält z.B. den auf eine Millisekunde genauen Zeitpunkt des
Klicks, das Objekt, welches den Klick ausgelöst hat, ob die rechte oder linke Maustaste gedrückt wurde u.s.w..
- Um auf ein Ereignis reagieren zu können, schreiben wir eine Klasse, die das Interface
java.awt.event.ActionListener implementiert. Es fordert folgende Methode:
public void actionPerformed(ActionEvent e){ ... }
man nennt diese Klasse die
Listener-Klasse (Horcher-Klasse).
- Ein Objekt der Listener-Klasse wird als Listener bezeichnet. Es wartet darauf, dass das Ereignis
passiert. Wenn ja, ruft das Betriebssystem die actionPerfomed-Methode auf, das Ereignis wird dabei als
Parameter übergeben.
- Damit das Betriebssystem weiß, das der Listener auf den Klick auf einen Button wartet, müssen wir ihn
registrieren
public class Klick implements
ActionListener{
public
void actionPerformed(ActionEvent e){
System.out.println("Klick");
}
}
public class Aufgabexx
extends StandardAnwendung{
...
public Aufgabexx(){
super("Aufgabe xx", 500, 400);
JButton knopf = new JButton("Klick mal");
knopf.addActionListener(new Klick());
...
}
}
Bei jedem Klick auf den Knopf wird jetzt 'Klick' auf
die Konsole geschrieben.
- Neben ActionListener werden wir später noch noch MouseListener und
MouseMotionListener verwenden.
- Man kann auch den JButton selbst zur eigenen Listener-Klasse machen, dann hat man die ganze
Funktionalität in einer Klasse:
class KlickButton extends JButton implements
ActionListener{
public KlickButton(){
super("Klick mal");
this.addActionListener(this);
}
public void actionPerformed(ActionEvent e){
System.out.println("Klick");
}
}
Für kleine Anwendungen ist das oft eine gute Aufteilung der
Klassen
- Beispiel: ein Button, der ein JPanel rot färbt:
class PanelRotButton extends
JButton implements ActionListener{
private JPanel
panel;
public PanelRotButton(JPanel panel){
super("ROT");
this.panel = panel;
this.addActionListener(this);
}
public void actionPerformed(ActionEvent e){
panel.setBackground(Color.RED);
}
}
Die Instanzvariable panel wird im Konstruktor gesetzt. Sie
behält ihren Wert solange wie das Objekt existiert. In actionPerformed wird der Wert verwendet.
Weiterführende Links
Kapitel zu UML in Java ist auch eine Insel
Lehrvideo (YouTube)