U kunt ervoor zorgen dat weergaveobjecten die het interactiemodel overerven van de klasse InteractiveObject, op toetsenbordgebeurtenissen reageren door gebeurtenislisteners te gebruiken. U kunt bijvoorbeeld een gebeurtenislistener in het werkgebied plaatsen om te luisteren naar en te reageren op toetsenbordinvoer. In de volgende code legt een gebeurtenislistener een toetsdruk vast, waarna de eigenschappen van de toetsnaam en de toetscode worden weergegeven:
function reportKeyDown(event:KeyboardEvent):void
{
trace("Key Pressed: " + String.fromCharCode(event.charCode) + " (character code: " + event.charCode + ")");
}
stage.addEventListener(KeyboardEvent.KEY_DOWN, reportKeyDown);
Sommige toetsen, zoals Ctrl, genereren wel gebeurtenissen, maar hebben geen glyph-aanduiding.
In het vorige codevoorbeeld wordt toetsenbordinvoer voor het hele werkgebied door de toetsenbordgebeurtenislistener vastgelegd. U kunt ook een gebeurtenislistener voor een specifiek weergaveobject in het werkgebied schrijven; deze gebeurtenislistener wordt geactiveerd wanneer het object focus heeft.
In het volgende voorbeeld worden toetsaanslagen alleen in het deelvenster Uitvoer weergegeven wanneer de gebruiker iets in de instantie TextField invoert. Als u Shift ingedrukt houdt, wordt de rand van TextField tijdelijk rood.
In deze code wordt aangenomen dat er een instantie TextField met de naam
tf
in het werkgebied bestaat.
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;
}
}
De klasse TextField maakt ook melding van een gebeurtenis
textInput
waar u naar kunt luisteren wanneer een gebruiker tekst invoert. Zie
Tekstinvoer vastleggen
voor meer informatie.
Opmerking:
In de AIR-runtime kan een toetsenbordgebeurtenis worden geannuleerd. In de Flash Player-runtime kan een toetsenbordgebeurtenis niet worden geannuleerd.
Toetscodes en tekencodes
U kunt toegang krijgen tot de eigenschappen
keyCode
en
charCode
van een toetsenbordgebeurtenis om te bepalen welke toets is ingedrukt en vervolgens andere handelingen te activeren. De eigenschap
keyCode
is een numerieke waarde die overeenkomt met de waarde van een toets op het toetsenbord. De eigenschap
charCode
is de numerieke waarde van die toets in de huidige tekenset. (De standaardtekenset is UTF-8, die ASCII ondersteunt.)
Het voornaamste verschil tussen de toetscode en de tekenwaarden is het feit dat een toetscodewaarde voor een bepaalde toets op het toetsenbord staat (de 1 op het numerieke toetsenblok verschilt van de 1 op de bovenste rij, maar de toets waarmee ‘1’ wordt gegenereerd is gelijk aan de toets waarmee ‘!’ wordt gegenereerd), terwijl de tekenwaarde voor een bepaald teken staat (de tekens R en r zijn verschillend).
De toewijzingen tussen toetsen en de bijbehorende toetscodes zijn afhankelijk van het apparaat en het besturingssysteem. Gebruik daarom geen toetstoewijzingen om handelingen te activeren. Gebruik in plaats daarvan de vooraf gedefinieerde constante waarden die worden aangeboden via de klasse Keyboard ter verwijzing naar de gewenste eigenschappen
keyCode
. Gebruik in plaats van de toetstoewijzing voor Shift bijvoorbeeld de constante
Keyboard.SHIFT
(zoals getoond in het vorige codevoorbeeld).
Hogere prioriteit KeyboardEvent
Zoals ook bij andere gebeurtenissen het geval is, wordt de volgorde van toetsenbordgebeurtenissen bepaald door de hiërarchie van weergaveobjecten en niet door de volgorde waarin methoden
addEventListener()
in code worden toegewezen.
Stel bijvoorbeeld dat u een tekstveld met de naam
tf
in een filmclip met de naam
container
plaatst en een gebeurtenislistener voor een toetsenbordgebeurtenis aan beide instanties toevoegt, zoals getoond in het volgende voorbeeld:
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 + ")");
}
Aangezien zowel het tekstveld als de bovenliggende container een listener bevat, wordt de functie
reportKeyDown()
voor elke toetsaanslag in TextField tweemaal aangeroepen. Voor elke ingedrukte toets verzendt het tekstveld een gebeurtenis voordat de filmclip
container
een gebeurtenis verzendt.
Het besturingssysteem en de webbrowser verwerken toetsenbordgebeurtenissen vóór Adobe Flash Player of AIR. Als er bijvoorbeeld in Microsoft Internet Explorer op Ctrl+W wordt gedrukt, wordt het browservenster gesloten voordat een eventueel daarin opgenomen SWF-bestand een toetsenbordgebeurtenis verzendt.