9.2.1 | Ereignisse als Objekte |
Ab dem JDK 1.1 wird jede Gruppe von Ereignissen durch eine eigene Klasse repräsentiert. Dadurch wird die Art eines Ereignisses schon durch das Ereignis-Objekt selbst identifiziert. Für das Event-Modell des JDK 1.0 existierte eine einzige Klasse java.awt.Event, die alle auftretenden Ereignisse repräsentierte. Die Unterscheidung der einzelnen Ereignisse war nur durch die Abfrage des Feldes Event.id möglich. Außerdem war die Behandlung der Ereignisse auf die Methode handleEvent(Event) beschränkt. Jedes Ereignis wurde zunächst an handleEvent(Event) geschickt. Dort wurde der Typ des Ereignisses abgefragt und nach Bedarf in verschiedene Hilfsmethoden verzweigt.
Alle Ereignis-Klassen des heutigen Modells sind von der Klasse EventObject aus dem Paket java.util abgeleitet. Einige Leser werden sich nun sicherlich fragen, warum die Klasse EventObject im Paket java.util enthalten ist und nicht im Paket java.awt - schließlich treten Ereignisse bei der Benutzung einer grafischen Oberfläche auf. Bei der Oberflächenprogrammierung wird der Programmierer sicherlich sehr häufig mit Ereignissen in Kontakt kommen, da sie dort sehr zahlreich vertreten sind (Mausbewegung, Tastatureingaben, Buttondruck etc.), aber im Grunde definiert ein Ereignis-Objekt nur das Auftreten eines Ereignisses, unabhängig von dessen Ausgangspunkt. Man könnte sich auch semantische Ereignisse definieren, die die erfolgreiche Eingabe einer Login/Passwort-Kombination signalisieren, wie folgendes Beispiel zeigt:
Die Eingabe erfolgt zunächst in der grafischen Oberfläche, woraufhin Eingabe-Ereignisse erzeugt werden. Die Eingabe-Ereignisse sind aber elementarer Natur und können keine Aussage über die Korrektheit eines Passwortes machen. Sie liefern nur die eingegebenen Zeichen. Zur Überprüfung der Korrektheit ist ein Vergleich der Eingabe mit dem tatsächlichen Passwort notwendig. Bei dessen Übereinstimmung könnte man ein Ereignis erzeugen und ein anderes Objekt über diese Eingabe informieren.
Ereignisse können somit also auch höherwertige Informationen enthalten und eine Semantik besitzen. Im J2SDK ist nur ein semantisches Ereignis vordefiniert. Dieses Ereignis wird von der Klasse ActionEvent repräsentiert und beim Auftreten einer Aktion ausgelöst. Unter Aktion ist hierbei die Auswahl aus einer Komponente gemeint, wie z. B. das Drücken eines Buttons oder der Doppelklick auf ein Element einer List.
Für die Definition anderer semantischer Ereignisse muss der Programmierer selbst eine Klasse von EventObject ableiten. Eine Implementierung des Beispiels zur Passworteingabe ist in Abschnitt 9.4 zu finden.