Ereignisse
Ereignistyp ActionEvent
Ereignistyp MouseEvent
Ereignistyp DocumentEvent
Zur Laufzeit eines Programms können vielerlei Ereignisse eintreten: Die Maus wird bewegt, in einem geöffneten Fenster wird etwas mit der Maus angeklickt, der Eintrag in einem Textfeld wird geändert, ein Grafikobjekt wird kleiner und kleiner und verschwindet, eine Taste wird gedrückt, ein Thread wird gestartet, und so weiter.
In den Ereignisklassen (wie zum Beispiel ChangeEvent, FocusEvent, ContainerEvent, KeyEvent, MouseEvent, DocumentEvent) sind alle Ereignisse (events), die innerhalb eines Programms auftreten können, definiert. Wird etwa einer Swing-Komponente ein Listener-Objekt von passendem Typ hinzugefügt, so kann ein diese Komponente betreffendes Ereignis von diesem Listener-Objekt registriert und ausgewertet werden.
Ein Ereignis vom Typ ActionEvent wird durch eine Komponente erzeugt, wenn eine komponentenspezifische Aktion durchgeführt wurde (etwa das Aktivieren eines Buttons durch einen Mausklick oder durch Betätigen der Leertaste).
Beispiel: Mit der Aktivierung eines Buttons innerhalb eines Fensters soll der Aufruf bestimmter Anweisungen verknüpft sein (→ Javaprojekte ColoredButtons, LColoredButtons):
Die im Projekt ColoredButtons verwendeten Buttons gehören zu einem Frame-Objekt vom Typ BFrame. Aufgrund des implementierten Interface ActionListener beinhaltet die Klasse BFrame die Methode actionPerformed, in welcher zu definieren ist, was passieren soll, wenn zur Laufzeit des Programms ein Ereignis vom Typ ActionEvent eingetreten ist:
class BFrame extends JFrame implements ActionListener {
...
JButton button;
...
public BFrame() {
...
button = new JButton();
add(button);
button.addActionListener(this);
...
}
@Override
public void actionPerformed (ActionEvent e) {
Object sender = e.getSource();
if (sender.equals(button)) {
...
}
}
}
Das jeweils aufgetretene Ereignis vom Typ ActionEvent wird referenziert durch eine Variable e, die als Parameter der Methode actionPerformed übergeben wird. Danach erfolgt mittels der Methoden und Attribute von e (getSource, getWhen, SHIFT_MASK, ALT_MASK, ...) die Analyse des Ereignisses und - davon abhängig - die Ausführung der entsprechend programmierten Anweisungen.
Beispiel: Mit der Maus soll ein geometrisches Objekt auf einer Zeichenfläche bewegt werden (→ Javaprojekt DraggableShapes):
Mit den Methoden mousePressed, mouseDragged und mouseReleased wird festgelegt, was passieren soll, wenn eine der Maustasten gedrückt, die Maus bei gedrückter Maustaste bewegt bzw. diese Maustaste losgelassen wird. Diese Methoden gehören zu der von der abstrakten Klasse MouseAdapter abgeleiteten Klasse Adapter:
class Adapter extends MouseAdapter {
@Override
public void mousePressed(MouseEvent e) {
...
}
@Override
public void mouseDragged(MouseEvent e) {
...
}
@Override
public void mouseReleased(MouseEvent e) {
...
}
...
}
Zu einem MouseEvent e gehören insbesondere die Methoden getX und getY, mit denen die momentane Position des Mauszeigers relativ zur betreffenden Komponente zurückgeliefert wird, die Methode getButton, deren Rückgabewert diejenige Maustaste identifiziert, welche gedrückt worden ist und die Methode getClickCount, mit der herausgefunden wird, wie oft die jeweilige Maustaste gedrückt worden ist.
Zur (nicht instanziierbaren) abstrakten Klasse MouseAdapter gehören die (leeren) Methoden mousePressed, mouseReleased, mouseClicked, mouseEntered und mouseExited des Interfaces MouseListener, sowie die (leeren) Methoden mouseDragged und mouseMoved des Interfaces MouseMotionListener.
Die Methoden mouseClicked, mouseEntered, mouseExited und mouseMoved werden im Projekt DraggableShapes nicht benötigt und deswegen in der Klasse Adapter nicht überschrieben.
Die folgenden Programmzeilen sind nötig, damit während der Laufzeit des Programms auf die dann auftretenden Mausereignisse gegebenenfalls reagiert werden kann:
class Canvas
extends JPanel {
...
public Canvas() {
...
Adapter adapter = new Adapter();
addMouseListener(adapter);
addMouseMotionListener(adapter);
...
}
}
Beispiel: Es soll auf Änderungen eines Textes auf einer Textfläche reagiert werden (→ Javaprojekt TextAnalysis):
Es müssen die vom Interface DocumentListener bereitgestellten Methoden changeUpdate, insertUpdate und removeUpdate implementiert werden, und zwar derart, dass innerhalb dieser Methoden definiert wird, was passieren soll, wenn im Text der Textfläche etwas eingefügt, etwas gelöscht oder sonst irgendetwas geändert wird:
class TFrame extends JFrame implements DocumentListener {
...
JTextArea area_text;
public TFrame() {
...
area_text = new JTextArea();
area_text.setEditable(true);;
area_text.getDocument().addDocumentListener(this);
}
@Override
public void insertUpdate(DocumentEvent e) {
...
}
@Override
public void removeUpdate(DocumentEvent e) {
...
}
@Override
public void changedUpdate(DocumentEvent e) {
...
}
}