Delegationsmodell der
Ereignisbehandlung Im Rahmen der Unterrichtseinheit "von Stiften und
Mäusen" wird eine Ereignisbehandlung entwickelt, die einem recht einfachen Prinzip
folgt. Diese wurde in ähnlicher Weise unmittelbar auch in den Laufzeitumgebungen von JAVA
Version 1.0 genutzt. Inzwischen ist die Ereignisbehandlung jedoch weiterentwickelt worden.
Mit dieser kommen Sie nicht in Berührung, wenn Sie der Unterrichtsreihe folgen. Jedoch
ist es interessant auch diese fortschrittlichere Variante kennenzulernen und
gegebenenfalls im Unterricht diese auch vorzustellen und zu nutzen. Seit JAVA Version 1.1
läuft die Ereignisbehandlung nach folgendem Prinzip ab:
Objekte, die auf bestimmte Ereignisse reagieren möchten, haben zweierlei zu tun:
Sie müssen ihren Wunsch bei der Ereignisquelle anmelden.
Sie müssen sich dem Laufzeitsystemn gegenüber als Ereignisverarbeiter zu erkennen
geben.
Das Laufzeitsystem sorgt dann dafür, daß die gewünschten Ereignisse übermittelt
werden (Konsequenz aus der Anmeldung des Objektes bei der ereignisquelle) und fordert die
Objekte zur Ereignisbehandlung auf (Konsequenz aus der Tastsache, daß sich das Objekt als
Ereignisbearbeiter ausgewiesen hat).
Beispiel zur Verdeutlichung:
Ein Rechteck rechteck möchte auf Tastenereignisse
reagieren:
Ereignisquelle ist ein Fenster fenster.
Das Rechteck schickt dem Fenster den Auftrag, es als Tastaturereignisverabeiter
zu registrieren (dazu muß das Rechteck das Fenster natürlich kennen):
fenster.addKeyListener(this)
addKeyListener ist eine Methode des Fensters.
Entsprechende Methoden gibt es für eine Reihe von Ereignisklassen.
Damit ist klar, daß das Rechteck Tastaturereignisse bearbeiten will. Das
Laufzeitsystem muß dem Rechteck nun Aufforderungen zur Bearbeitung von
Tastaturereignissen schicken. Diese Aufforderungen muß das Rechteck verstehen. Dies ist
der Fall, wenn das Rechteck ein entsprechendes Interface hier: das Interface KeyListener implementiert, welches die Benachrichtigungen über
die Tastaturereignisse enthält. Folgende Methoden gehören zum Interface KeyListener:
keyTyped(KeyEvent) , keyPressed(KeyEvent)
und keyReleased(KeyEvent).
Bie Implementierung dieser Methoden realisieren die gewünschten Reaktionen des
Rechtecks auf die Tastaturereignisse.
Das Laufzeitsystem schickt allen Objekten der Klasse KeyListener (dazu gehört das
Rechteck jetzt), die sich beim Fenster als Tastaurerignisverarbeiter angemeldet haben, die
genannten Nachrichten, wenn die zugehörigen Ereignisse aufgetreten sind.
Dies ist zudem ein schönes Beispiel für die Bedeutung der Mehrfachverebung via
Interfaces. Rechtecke können vom Laufzeitsystem aus als Ereignisverarbeiter angesprochen
werden, ohne daß diese Eigenschaft in möglichen Vorgängerklassen des Rechtecks schon
vorgesehen war. |