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
.