Erfassen von Tastatureingaben

Flash Player 9 und höher, Adobe AIR 1.0 und höher

In Anzeigeobjekten, die das Interaktionsmodell der InteractiveObject-Klasse erben, kann mithilfe von Ereignis-Listenern auf Tastaturereignisse reagiert werden. Beispielsweise können Sie einen Ereignis-Listener auf der Bühne platzieren, um auf Tastatureingaben zu warten und entsprechend zu reagieren. Im folgenden Code erfasst ein Ereignis-Listener einen Tastendruck. Zudem werden der Tastenname sowie die Tastencodeeigenschaften angezeigt.

function reportKeyDown(event:KeyboardEvent):void 
{ 
    trace("Key Pressed: " + String.fromCharCode(event.charCode) +         " (character code: " + event.charCode + ")"); 
} 
stage.addEventListener(KeyboardEvent.KEY_DOWN, reportKeyDown);

Einige Tasten, z. B. die Taste STRG, erzeugen Ereignisse, obwohl ihnen kein darstellbares Zeichen zugeordnet ist.

Im vorherigen Codebeispiel wurden mit dem Tastatur-Ereignis-Listener Tastatureingaben für die gesamte Bühne erfasst. Sie können auch einen Ereignis-Listener für bestimmte Anzeigeobjekte auf der Bühne programmieren. Dieser wird ausgelöst, wenn das entsprechende Objekt den Fokus hat.

Im folgenden Beispiel werden gedrückte Tasten nur dann im Bedienfeld „Ausgabe“ angezeigt, wenn die Benutzereingabe innerhalb der TextField-Instanz erfolgt. Beim Drücken der UMSCHALTTASTE wird die Rahmenfarbe der TextField-Instanz vorübergehend rot.

In diesem Code wird vorausgesetzt, dass auf der Bühne eine TextField-Instanz mit dem Namen tf positioniert ist.

tf.border = true; 
tf.type = "input"; 
tf.addEventListener(KeyboardEvent.KEY_DOWN,reportKeyDown); 
tf.addEventListener(KeyboardEvent.KEY_UP,reportKeyUp); 
 
function reportKeyDown(event:KeyboardEvent):void 
{ 
    trace("Key Pressed: " + String.fromCharCode(event.charCode) +         " (key code: " + event.keyCode + " character code: "         + event.charCode + ")"); 
    if (event.keyCode == Keyboard.SHIFT) tf.borderColor = 0xFF0000; 
} 
 
function reportKeyUp(event:KeyboardEvent):void 
{ 
    trace("Key Released: " + String.fromCharCode(event.charCode) +         " (key code: " + event.keyCode + " character code: " +         event.charCode + ")"); 
    if (event.keyCode == Keyboard.SHIFT) 
    { 
        tf.borderColor = 0x000000; 
    } 
}

Wenn der Benutzer Text eingibt, meldet die TextField-Klasse auch ein textInput -Ereignis, auf das ebenfalls mit einem Ereignis-Listener gewartet werden kann. Weitere Informationen finden Sie unter Erfassen von Texteingaben .

Hinweis: In der AIR-Laufzeit kann ein Tastaturereignis abgebrochen werden. In der Flash Player-Laufzeit kann ein Tastaturereignis nicht abgebrochen werden.

Tastencodes und Zeichencodes

Sie können auf die Eigenschaften keyCode und charCode von Tastaturereignissen zugreifen, um die gedrückte Taste zu ermitteln und dann weitere Aktionen auszulösen. Die keyCode -Eigenschaft ist ein numerischer Wert, der dem Tastenwert einer Taste auf der Tastatur entspricht. Die charCode -Eigenschaft ist der numerische Wert dieser Taste im aktuellen Zeichensatz. (Der Standardzeichensatz ist UTF-8, in dem ASCII unterstützt wird.)

Der Hauptunterschied zwischen dem Tastencode und den Zeichenwerten besteht darin, dass ein Tastencodewert einer bestimmten Taste auf der Tastatur entspricht (die „1“ auf dem numerischen Ziffernblock unterscheidet sich von der „1“ in der obersten Tastenreihe; die Taste, die „1“ erzeugt, und die Taste, die „!“ erzeugt, ist jedoch dieselbe), während der Zeichenwert einem bestimmten Zeichen entspricht (die Zeichen „R“ und „r“ sind unterschiedlich).

Hinweis: Einzelheiten zur Zuordnung von Tasten und Zeichencodewerten in ASCII finden Sie in der Beschreibung der flash.ui.Keyboard -Klasse im ActionScript 3.0-Referenzhandbuch für die Adobe Flash-Plattform .

Die Zuordnung zwischen Tasten und Tastencodes ist abhängig vom Gerät und vom Betriebssystem. Aus diesem Grund sollten Sie keine Tastenzuordnungen verwenden, um Aktionen auszulösen. Verwenden Sie stattdessen die vordefinierten Konstantenwerte der Keyboard-Klasse, um auf die entsprechenden keyCode -Eigenschaften zu verweisen. Verwenden Sie beispielsweise anstelle der Tastenzuordnung für die UMSCHALTTASTE die entsprechende Konstante Keyboard.SHIFT (wie im vorhergehenden Codebeispiel dargestellt).

KeyboardEvent-Reihenfolge

Wie auch bei anderen Ereignissen wird die Tastaturereignisreihenfolge durch die Anzeigeobjekthierarchie und nicht durch die Reihenfolge bestimmt, in der addEventListener() -Methoden im Code zugewiesen werden.

Angenommen, Sie platzieren ein Textfeld mit dem Namen tf in einem Movieclip mit der Bezeichnung container und fügen für beide Instanzen einen Ereignis-Listener für Tastaturereignisse hinzu, wie im folgenden Beispiel dargestellt:

container.addEventListener(KeyboardEvent.KEY_DOWN,reportKeyDown); 
container.tf.border = true; 
container.tf.type = "input"; 
container.tf.addEventListener(KeyboardEvent.KEY_DOWN,reportKeyDown); 
 
function reportKeyDown(event:KeyboardEvent):void 
{ 
    trace(event.currentTarget.name + " hears key press: " +         String.fromCharCode(event.charCode) + " (key code: " +         event.keyCode + " character code: " + event.charCode + ")"); 
}

Da es sowohl für das Textfeld als auch für den übergeordneten Container einen Listener gibt, wird die reportKeyDown() -Funktion für jeden Tastendruck innerhalb der TextField-Instanz doppelt aufgerufen. Beachten Sie, dass bei jedem Tastendruck das Ereignis zuerst vom Textfeld und erst dann vom Movieclip container ausgelöst wird.

Tastaturereignisse werden zuerst im Betriebssystem und im Webbrowser und erst danach in Adobe Flash Player oder AIR verarbeitet. In Microsoft Internet Explorer führt das Drücken von STRG+W beispielsweise zum Schließen des Browserfensters, bevor in einer enthaltenen SWF-Datei überhaupt ein Tastaturereignis ausgelöst werden kann.