Ereignisobjekte

Ereignisobjekte dienen im neuen Ereignisverarbeitungssystem zwei Hauptzwecken. Ereignisobjekte repräsentieren reale Ereignisse durch Speichern von Informationen zu bestimmten Ereignissen in einer Reihe von Eigenschaften, und sie enthalten eine Reihe von Methoden, mit denen Sie Ereignisobjekte bearbeiten und das Verhalten des Ereignisverarbeitungssystems beeinflussen können.

Um den Zugriff auf diese Eigenschaften und Methoden zu erleichtern, ist in der Flash Player-API eine Event-Klasse definiert, die als Basisklasse für alle Ereignisobjekte dient. Die Event-Klasse definiert eine Anzahl grundlegender Eigenschaften und Methoden, über die alle Ereignisobjekte verfügen.

In diesem Abschnitt werden zunächst die Eigenschaften der Event-Klasse behandelt und dann die entsprechenden Methoden beschrieben. Schließlich wird erklärt, warum es Unterklassen der Event-Klasse gibt.

Unterthemen

Eigenschaften der Event-Klasse
Methoden der Event-Klasse
Unterklassen der Event-Klasse

Eigenschaften der Event-Klasse

Die Event-Klasse definiert eine Reihe schreibgeschützter Eigenschaften und Konstanten, die wichtige Informationen zu einem Ereignisobjekt enthalten. Besonders wichtig sind dabei folgende Eigenschaften:

Ereignisobjekttypen

Jedem Ereignisobjekt ist ein Ereignistyp zugeordnet. Der Ereignistyp wird in der Event.type-Eigenschaft als Stringwert gespeichert. Es ist hilfreich, den Typ eines Ereignisobjekts zu kennen, damit im Programmcode zwischen Objekten unterschiedlichen Typs unterschieden werden kann. Mit dem folgenden Code wird beispielsweise festgelegt, dass die Listener-Funktion clickHandler() auf alle Mausklick-Ereignisobjekte reagieren soll, die an myDisplayObject übergeben werden:

myDisplayObject.addEventListener(MouseEvent.CLICK, clickHandler);

Der Event-Klasse selbst sind etwa zwei Dutzend Ereignistypen zugeordnet. Diese werden durch Konstanten der Event-Klasse angegeben. Einige davon finden Sie im nachstehenden Auszug aus der Definition der Event-Klasse:

package flash.events
{
    public class Event
    {
        // Klassenkonstanten
        public static const ACTIVATE:String = "activate";
        public static const ADDED:String    = "added";
        // restliche Konstanten aus Platzgründen weggelassen
    }
}

Diese Konstanten stellen eine einfache Möglichkeit dar, sich auf bestimmte Ereignistypen zu beziehen. Verwenden Sie diese Konstanten anstelle der Strings, denen sie entsprechen. Schreibfehler in einem Konstantennamen im Programmcode werden vom Compiler gemeldet. Wenn Sie jedoch Strings verwenden, werden Rechtschreibfehler beim Kompilieren u. U. nicht erkannt und können zu unerwartetem Verhalten führen. Die Fehlersuche ist möglicherweise schwierig. Verwenden Sie beispielsweise beim Hinzufügen eines Ereignis-Listeners besser:

myDisplayObject.addEventListener(MouseEvent.CLICK, clickHandler);

statt:

myDisplayObject.addEventListener("click", clickHandler);

Informationen zum Standardverhalten

Sie können im Programmcode prüfen, ob das Standardverhalten eines bestimmten Ereignisobjekts unterdrückt werden kann, indem Sie die Eigenschaft cancelable auslesen. Die cancelable-Eigenschaft enthält einen booleschen Wert, der angibt, ob das Standardverhalten unterdrückt werden kann oder nicht. Sie können das einigen wenigen Ereignissen zugeordnete Standardverhalten mithilfe der preventDefault()-Methode unterdrücken. Weitere Informationen finden Sie unter Unterdrücken des Standardverhaltens für Ereignisse.

Informationen zum Ereignisablauf

Die übrigen Eigenschaften der Event-Klasse enthalten wichtige Informationen zu einem Ereignisobjekt und der entsprechenden Einordnung im Ereignisablauf. Diese sind in der folgenden Liste beschrieben:

bubbles-Eigenschaft

Es wird von der Aufstiegsphase eines Ereignisses gesprochen, wenn das entsprechende Ereignisobjekt die Aufstiegsphase des Ereignisablaufs durchläuft. Dies bedeutet, dass das Ereignisobjekt vom Zielknoten über die Vorgängerobjekte zurückgegeben wird, bis es die Bühne erreicht. Die Event.bubbles-Eigenschaft speichert einen booleschen Wert, der angibt, ob das Ereignis die Aufstiegsphase durchläuft. Da alle die Aufstiegsphase durchlaufenden Ereignisse auch die Empfangsphase und die Zielphase durchlaufen, durchläuft jedes entsprechende Ereignis alle drei Phasen des Ereignisablaufs. Beim Wert true durchläuft das Ereignisobjekt alle drei Phasen. Wenn der Wert false ist, durchläuft das Objekt die Aufstiegsphase nicht.

eventPhase-Eigenschaft

Sie können die Ereignisphase für jedes Ereignisobjekt ermitteln, indem Sie die entsprechende eventPhase-Eigenschaft auslesen. Die eventPhase-Eigenschaft enthält einen vorzeichenlosen Ganzzahlwert, mit dem eine der drei Phasen des Ereignisablaufs angegeben wird. In der Flash Player-API ist eine eigene EventPhase-Klasse mit drei Konstanten für diese drei vorzeichenlosen Ganzzahlwerte definiert, wie im folgenden Codeauszug dargestellt:

package flash.events
{
    public final class EventPhase
    {
        public static const CAPTURING_PHASE:uint = 1;
        public static const AT_TARGET:uint       = 2;
        public static const BUBBLING_PHASE:uint  = 3;
    }
}

Diese Konstanten entsprechen den drei möglichen Werten für die eventPhase-Eigenschaft. Sie können diese Konstanten einsetzen, damit der Programmcode besser lesbar wird. Wenn Sie beispielsweise sicherstellen möchten, dass eine Funktion mit dem Namen myFunc() nur aufgerufen wird, wenn sich das Ereignisziel in der Zielphase befindet, können Sie diese Bedingung mit dem folgenden Programmcode testen:

if (event.eventPhase == EventPhase.AT_TARGET)
{
    myFunc();
}

target-Eigenschaft

Die target-Eigenschaft enthält einen Verweis auf das Zielobjekt des entsprechenden Ereignisses. In einigen Fällen handelt es sich um eine direkte Zuordnung, z. B. wenn ein Mikrofon aktiviert wird und das Ziel des Ereignisobjekts das Microphone-Objekt ist. Wenn das Ziel Bestandteil der Anzeigeliste ist, muss jedoch auch die Anzeigelistenhierarchie berücksichtigt werden. Wenn ein Benutzer beispielsweise einen Mausklick an einem Punkt eingibt, an dem sich Anzeigelistenobjekte überlappen, wird in Flash Player immer das Objekt als Ereignisziel ausgewählt, das am weitesten von der Bühne entfernt ist.

Bei komplexen SWF-Dateien - besonders solchen, bei denen Schaltflächen üblicherweise mit kleineren untergeordneten Objekten versehen sind - wird die target-Eigenschaft häufig nicht verwendet, da sie in der Regel nicht auf die Schaltfläche, sondern auf ein untergeordnetes Objekt verweist. In diesen Fällen ist es üblich, den Ereignis-Listener der Schaltfläche hinzuzufügen und die currentTarget-Eigenschaft zu verwenden, da diese auf die Schaltfläche verweist, während die target-Eigenschaft auch auf ein untergeordnetes Objekt der Schaltfläche verweisen kann.

currentTarget-Eigenschaft

Die currentTarget-Eigenschaft enthält einen Verweis auf das Objekt, mit dem das Ereignisobjekt derzeit verarbeitet wird. Es mag seltsam erscheinen, nicht zu wissen, in welchem Knoten das überprüfte Ereignisobjekt derzeit verarbeitet wird. Beachten Sie jedoch, dass Sie jedem Anzeigeobjekt im Ereignisablauf des Ereignisobjekts eine Listener-Funktion hinzufügen können und dass diese an beliebiger Stelle platziert werden kann. Darüber hinaus kann dieselbe Listener-Funktion unterschiedlichen Anzeigeobjekten hinzugefügt werden. Wenn Projekte an Umfang und Komplexität zunehmen, erhöht sich auch zunehmend der Nutzen der currentTarget-Eigenschaft.

Methoden der Event-Klasse

Es gibt drei Kategorien der Methoden für die Event-Klasse:

Dienstprogrammmethoden der Event-Klasse

Es liegen zwei Dienstprogrammmethoden für die Event-Klasse vor. Mit der clone()-Methode können Sie Kopien von Ereignisobjekten erstellen. Mit der toString()-Methode können Sie eine Stringdarstellung der Eigenschaften und entsprechenden Werte eines Ereignisobjekts erstellen. Beide Methoden werden intern im Ereignismodell verwendet, stehen jedoch auch zur allgemeinen Verwendung für Entwickler bereit.

Erfahrene Entwickler, die Unterklassen der Event-Klasse erstellen möchten, müssen diese beiden Methoden überschreiben und eigene Versionen implementieren, damit die neue Event-Unterklasse ordnungsgemäß verwendet werden kann.

Anhalten des Ereignisablaufs

Sie können entweder die Event.stopPropogation()-Methode oder die Event.stopImmediatePropogation()-Methode aufrufen, um die weitere Verarbeitung eines Ereignisobjekts im Ereignisablauf zu unterbinden. Beide Methoden sind fast identisch. Sie unterscheiden sich lediglich darin, ob die Abarbeitung der anderen Ereignis-Listener des aktuellen Knotens zulässig ist oder nicht:

Keine der beiden Methoden hat Auswirkungen auf das einem Ereignis zugeordnete Standardverhalten. Verwenden Sie zum Unterdrücken des Standardverhaltens die Standardverhaltenmethoden der Event-Klasse.

Unterdrücken des Standardverhaltens für Ereignisse

Mit der preventDefault()-Methode und der isDefaultPrevented()-Methode kann das Standardverhalten unterdrückt werden. Rufen Sie die preventDefault()-Methode auf, um das einem Ereignis zugeordnete Standardverhalten zu unterdrücken. Wenn Sie überprüfen möchten, ob preventDefault() für ein Ereignisobjekt bereits aufgerufen wurde, verwenden Sie die isDefaultPrevented()-Methode. Diese gibt den Wert true zurück, wenn die Methode bereits aufgerufen wurde, oder andernfalls den Wert false.

Die preventDefault()-Methode wird nur ausgeführt, wenn das Standardverhalten eines Ereignisses auch wirklich unterdrückt werden kann. Ob dies der Fall ist, können Sie in der API-Dokumentation zu diesem Ereignistyp nachlesen oder in ActionScript durch Überprüfen der cancelable-Eigenschaft des Ereignisobjekts ermitteln.

Unterklassen der Event-Klasse

Bei vielen Ereignissen sind die in der Event-Klasse definierten allgemeinen Eigenschaften völlig ausreichend. Andere Ereignisse weisen jedoch einzigartige Merkmale auf, die mit den in der Event-Klasse verfügbaren Eigenschaften nicht erfasst werden können. Für diese Ereignisse sind in der Flash Player-API verschiedene Unterklassen der Event-Klasse definiert.

Jede Unterklasse enthält zusätzliche Eigenschaften und Ereignistypen, die nur für diese Ereigniskategorie gelten. Beispielsweise weisen Ereignisse für Mauseingaben einige einzigartige Merkmale auf, die mit den in der Event-Klasse verfügbaren Eigenschaften nicht erfasst werden können. Die MouseEvent-Klasse erweitert die Event-Klasse durch Hinzufügen von zehn Eigenschaften für Informationen wie die Position des Mausereignisses und ob während des Mausereignisses bestimmte Tasten gedrückt wurden.

Unterklassen der Event-Klasse enthalten zudem Konstanten für die einer Unterklasse zugeordneten Ereignistypen. In der MouseEvent-Klasse sind beispielsweise Konstanten für verschiedene Mausereignistypen definiert, einschließlich der Ereignistypen click, doubleClick, mouseDown und mouseUp.

Wie im Abschnitt Dienstprogrammmethoden der Event-Klasse beschrieben, müssen Sie beim Erstellen einer Event-Unterklasse die Methoden clone() und toString() überschreiben, um die für eine Unterklasse erforderliche Funktionalität bereitzustellen.


Flash CS3

 

Eine E-Mail an mich senden, wenn dieser Seite Kommentare hinzugefügt werden | Kommentarbericht

Aktuelle Seite: http://livedocs.adobe.com/flash/9.0_de/main/00000138.html