Les objets d’affichage qui héritent de leur modèle d’interaction de la classe InteractiveObject peuvent répondre à des événements de clavier à l’aide d’écouteurs d’événement. Par exemple, vous pouvez placer un écouteur d’événement sur la scène pour écouter et répondre à une saisie au clavier. Dans le code suivant, un écouteur d’événement capture une saisie au clavier et le nom et les propriétés de code de la touche sont affichés :
function reportKeyDown(event:KeyboardEvent):void
{
trace("Key Pressed: " + String.fromCharCode(event.charCode) + " (character code: " + event.charCode + ")");
}
stage.addEventListener(KeyboardEvent.KEY_DOWN, reportKeyDown);
Certaines touches (Ctrl, par exemple) génèrent des événements, même si elles n’ont pas de représentation de glyphes.
Dans l’exemple de code précédent, l’écouteur d’événement de clavier a capturé une saisie au clavier pour la scène entière. Vous pouvez également écrire un écouteur d’événement pour un objet d’affichage spécifique sur la scène ; cet écouteur d’événement est déclenché lorsque l’objet a le focus.
Dans l’exemple suivant, les frappes de touches apparaissent dans le panneau Sortie uniquement lorsque l’utilisateur tape dans l’occurrence de TextField. S’il maintient la touche Maj enfoncée, la couleur du contour du TextField devient temporairement rouge.
Ce code suppose qu’il existe une occurrence de TextField appelée
tf
sur la scène.
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;
}
}
La classe TextField signale également un événement
textInput
que vous pouvez écouter lorsqu’un utilisateur saisit du texte. Pour plus d’informations, voir
Capture du texte saisi par l’utilisateur
.
Remarque :
dans le moteur d’exécution d’AIR, il est possible d’annuler un événement de clavier. En revanche, dans le moteur d’exécution de Flash Player, un événement de clavier ne peut pas être annulé.
Codes de touches et de caractères
Les propriétés
keyCode
et
charCode
d’un événement clavier permettent de déterminer la touche utilisée et de déclencher d’autres actions. La propriété
keyCode
est une valeur numérique qui correspond à la valeur de la touche sur le clavier. La propriété
charCode
est la valeur numérique de cette touche dans le jeu de caractères actuel (le jeu de caractères par défaut est UTF-8, qui prend en charge ASCII).
La différence principale entre le code de touche et les valeurs de caractères est la suivante : la valeur du code de touche représente une touche déterminée du clavier (la touche 1 sur le pavé numérique est différente du 1 sur le clavier central, mais cette dernière permet à la fois de générer 1 et &) alors que la valeur du caractère représente un caractère particulier (les caractères R et r sont différents).
Les mappages entre les touches et leurs codes de touches dépendent du périphérique et du système d’exploitation. C’est pourquoi vous ne devez pas utiliser de mappages de touches pour déclencher des actions. A la place, utilisez les valeurs de constante prédéfinies fournies par la classe Keyboard pour référencer les propriétés
keyCode
appropriées. Par exemple, au lieu d’utiliser le mappage de touche pour la touche Maj, utilisez la constante
Keyboard.SHIFT
(comme indiqué dans l’exemple de code précédent).
Priorité des événements KeyboardEvent
Comme avec d’autres événements, la séquence d’événement de clavier est déterminée par la hiérarchie d’objet d’affichage et non par l’ordre dans lequel les méthodes
addEventListener()
sont affectées dans le code.
Supposons par exemple que vous placiez un champ de texte
tf
au sein d’un clip nommé
container
et que vous ajoutiez un écouteur d’événement pour l’événement de clavier à chaque occurrence, comme indiqué dans l’exemple suivant :
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 + ")");
}
Etant donné qu’il existe un écouteur sur le champ de texte et sur son conteneur parent, la fonction
reportKeyDown()
est appelée deux fois pour chaque frappe de touche dans le TextField. Notez que pour chaque touche actionnée, le champ de texte envoie un événement avant que le clip
container
ne distribue un événement.
Le système d’exploitation et le navigateur Web traiteront les événements de clavier avant Adobe Flash Player ou AIR. Par exemple, dans Microsoft Internet Explorer, lorsque vous appuyez sur Ctrl+W, vous fermez la fenêtre du navigateur avant qu’un fichier SWF contenu ne distribue un événement de clavier.