9.2.2 | Die vordefinierten Ereignisse |
Alle Interfaces und Klassen, die für die Behandlung von Ereignissen der grafischen Oberfläche benötigt werden, sind im Paket java.awt.event definiert. Die Ereignis-Klassen sind in einer mehrstufigen Vererbungshierarchie modelliert, wie Abbildung 9.1 zeigt.
Die Basis für alle Ereignisse, die in der grafischen Oberfläche ausgelöst werden können, bildet die Klasse AWTEvent. Sie enthält für den Programmierer wichtige Methoden, um auf Informationen über ein Ereignis zugreifen zu können.
Tabelle 9.1: Die einzelnen Methoden der Klasse AWTEvent Methode Bedeutung getSource() Liefert einen Verweis auf die Ereignisquelle getID() Liefert die ID des Ereignisses isConsumed() Liefert true, wenn das Ereignis schon verarbeitet wurde consume() Verarbeitet das Ereignis Die Methode getSource() wurde als einzige der obengenannten Methoden bereits in der Klasse EventObject definiert, wird aber aufgrund ihrer Wichtigkeit ebenfalls an dieser Stelle genannt.
Die meisten der oben dargestellen Ereignis-Klassen decken nicht nur ein einzelnes Ereignis ab, sondern repräsentieren jeweils eine ganze Gruppe von Ereignissen. Ein Objekt vom Typ MouseEvent wird beispielsweise nicht nur beim Drücken einer Maustaste erzeugt, sondern auch beim Loslassen der Maustaste oder beim Bewegen der Maus. Es muss aber ein Unterscheidungskriterium geben zwischen MouseEvent-Objekten, die durch Tastendruck, und MouseEvent-Objekten, die durch Mausbewegung erzeugt wurden. Zu diesem Zweck besitzt jedes AWTEvent-Objekt eine ID zu Identifikation. Die ID stellt eine Zahl vom Typ int dar, die ein bestimmtes Ereignis repräsentiert. Für jeden Ereignistyp ist eine Konstante in der Klasse des Event-Objekts definiert, das beim Auftritt dieses Ereignisses erzeugt wird.
Zu vielen Ereignissen gibt es eine vordefinierte Aktion, die von der Komponente ausgelöst wird: Beim Drücken eines Buttons würde der Button z. B. in einer »gedrückten« Darstellung ausgegeben werden, bei einer Texteingabe in ein nicht editierbares Textfeld erfolgt die Ausgabe eines akustischen Signals. Will der Benutzer unterbinden, dass eine solche vordefinierte Aktion ausgelöst wird, so muss er das Ereignis verarbeiten (konsumieren). Das geschieht durch den Aufruf von consume() des entsprechenden AWTEvent-Objektes.
Durch einen Aufruf von isConsumed() kann abgefragt werden, ob ein Ereignis bereits konsumiert wurde. Dadurch ist es z. B. möglich, auf ein bereits konsumiertes Ereignis auf eine andere Weise zu reagieren als auf ein Ereignis, das noch nicht konsumiert wurde.
Ein Beispiel zum Konsumieren von Ereignissen ist in Abschnitt 9.2.8 zu finden.