Utilisation de FocusManager

Lorsqu’un utilisateur appuie sur la touche de tabulation pour naviguer dans une application Flash ou clique dans une application, la classe FocusManager détermine quel composant reçoit le focus d’entrée. Il n’est pas nécessaire d’ajouter une occurrence de FocusManager à une application ou du code pour activer le gestionnaire de focus, sauf si vous créez un composant.

Si un objet RadioButton reçoit le focus, le gestionnaire de focus l’examine, de même que tous les objets ayant la même valeur groupName , puis attribue le focus à l’objet dont la propriété selected est définie sur true .

Chaque composant Window modal contenant une occurrence du gestionnaire de focus, ses contrôles constituent son propre jeu de tabulation. Ainsi, l’utilisateur ne risque pas de naviguer par erreur vers les composants des autres fenêtres en appuyant sur la touche de tabulation.

Le gestionnaire de focus utilise le niveau de profondeur (ou ordre z ) des éléments du conteneur comme système de navigation par défaut ou boucle de tabulation . Un utilisateur navigue généralement dans la boucle de tabulation à l’aide de la touche de tabulation, le focus se déplaçant du premier composant ayant le focus jusqu’au dernier, et vice-versa. Les niveaux de profondeur sont principalement définis par l’ordre dans lequel les composants sont déposés sur la scène. Vous pouvez néanmoins utiliser les commandes Modifier > Réorganiser > Mettre au premier plan/Mettre à l’arrière-plan pour déterminer l’ordre z final. Pour plus d’informations sur les niveaux de profondeur, voir la section Utilisation de la liste d’affichage .

Vous pouvez appeler la méthode setFocus() pour attribuer le focus à une occurrence de composant dans une application. Ainsi, l’exemple suivant crée une occurrence de FocusManager pour le conteneur actuel ( this ) et attribue le focus à l’occurrence de bouton aButton .

var fm:FocusManager = new FocusManager(this); 
fm.setFocus(aButton);

Vous pouvez déterminer quel composant a le focus en appelant la méthode getFocus() et quel composant de la boucle de tabulation le recevra ensuite en appelant la méthode getNextFocusManagerComponent() . Dans l’exemple suivant, un composant CheckBox, un composant RadioButton et un composant Button sont sur la scène et chacun d’entre eux possède des écouteurs pour les événements MouseEvent.CLICK et FocusEvent.MOUSE_FOCUS_CHANGE. Lorsque l’événement MouseEvent.CLICK se produit, car l’utilisateur a cliqué sur le composant, la fonction showFocus() appelle la méthode getNextFocusManagerComponent() afin de déterminer le composant de la boucle de tabulation qui recevra ensuite le focus. Elle appelle ensuite la méthode setFocus() pour attribuer le focus à ce composant. Lorsque l’événement FocusEvent.MOUSE_FOCUS_CHANGE se produit, la fonction fc() affiche le nom du composant sur lequel cet événement s’est produit. Cet événement est déclenché lorsque l’utilisateur clique sur un composant autre que le suivant dans la boucle de tabulation.

// This example assumes a CheckBox (aCh), a RadioButton (aRb) and a Button 
// (aButton) have been placed on the Stage. 
 
import fl.managers.FocusManager; 
import flash.display.InteractiveObject; 
 
var fm:FocusManager = new FocusManager(this); 
 
aCh.addEventListener(MouseEvent.CLICK, showFocus); 
aRb.addEventListener(MouseEvent.CLICK, showFocus); 
aButton.addEventListener(MouseEvent.CLICK, showFocus); 
aCh.addEventListener(FocusEvent.MOUSE_FOCUS_CHANGE, fc); 
aRb.addEventListener(FocusEvent.MOUSE_FOCUS_CHANGE, fc); 
aButton.addEventListener(FocusEvent.MOUSE_FOCUS_CHANGE, fc); 
 
function showFocus(event:MouseEvent):void { 
    var nextComponent:InteractiveObject = fm.getNextFocusManagerComponent(); 
    trace("Next component in tab loop is: " + nextComponent.name); 
    fm.setFocus(nextComponent);  
} 
 
function fc(fe:FocusEvent):void { 
    trace("Focus Change: " + fe.target.name); 
}

Pour créer un bouton recevant le focus lorsqu’un utilisateur appuie sur Entrée (Windows) ou sur Retour (Macintosh), définissez la propriété FocusManager.defaultButton sur l’occurrence du bouton devant être défini par défaut, comme dans le code suivant :

import fl.managers.FocusManager; 
 
var fm:FocusManager = new FocusManager(this); 
fm.defaultButton = okButton;

La classe FocusManager remplace le rectangle de focus par défaut de Flash Player par un rectangle de focus personnalisé dont les coins sont arrondis.

Pour plus d’informations sur la création d’un programme de focus dans une application Flash, voir la classe FocusManager dans le Guide de référence d’ActionScript 3.0 pour Flash Professional . Pour créer un gestionnaire de focus personnalisé, vous devez créer une classe qui implémente l’interface IFocusManager . Pour plus d’informations, voir IFocusManager dans le Guide de référence d’ActionScript 3.0 pour Flash Professional .