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).
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.