Packageflash.events
Classepublic class FocusEvent
HéritageFocusEvent Inheritance Event Inheritance Object

Version du langage: ActionScript 3.0
Versions du moteur d'exécution: AIR 1.0 Flash Player 9

Un objet distribue un objet FocusEvent lorsque l'utilisateur déplace le focus sur un autre objet dans la liste d’affichage. Il existe quatre types d’événements Focus :

Consulter les exemples



Propriétés publiques
 PropriétéDéfini par
 Inheritedbubbles : Boolean
[lecture seule] Indique si un événement peut se propager vers le haut (bubbling).
Event
 Inheritedcancelable : Boolean
[lecture seule] Indique si le comportement associé à l'événement peut être annulé.
Event
 Inheritedconstructor : Object
Référence à l'objet de classe ou à la fonction constructeur d'une occurrence donnée d'un objet.
Object
 InheritedcurrentTarget : Object
[lecture seule] L'objet qui traite activement l'objet Event avec un écouteur d'événements.
Event
  AIR-only direction : String
Spécifie la direction du focus pour un événement focusIn.
FocusEvent
 InheritedeventPhase : uint
[lecture seule] Phase actuelle du flux d'événements.
Event
  isRelatedObjectInaccessible : Boolean
Si la valeur est true, la propriété relatedObject est définie sur null pour des raisons liées aux sandbox de sécurité.
FocusEvent
  keyCode : uint
Valeur de code correspondant à la touche utilisée pour déclencher un événement keyFocusChange.
FocusEvent
 Inheritedprototype : Object
[statique] Référence à l'objet prototype d'un objet de classe ou fonction.
Object
  relatedObject : InteractiveObject
Référence à l'occurrence complémentaire d'InteractiveObject affectée par le déplacement du focus.
FocusEvent
  shiftKey : Boolean
Indique si la touche de modification Maj est activée, auquel cas la valeur est true.
FocusEvent
 Inheritedtarget : Object
[lecture seule] Cible de l'événement.
Event
 Inheritedtype : String
[lecture seule] Type d'événement.
Event
Méthodes publiques
 MéthodeDéfini par
  
FocusEvent(type:String, bubbles:Boolean = true, cancelable:Boolean = false, relatedObject:InteractiveObject = null, shiftKey:Boolean = false, keyCode:uint = 0, direction:String = "none")
Crée un objet Event à l'aide d'informations spécifiques relatives aux événements Focus.
FocusEvent
  
Crée une copie de l’objet FocusEvent et définit la valeur de chaque propriété de sorte qu’elle corresponde à la valeur d’origine.
FocusEvent
 Inherited
formatToString(className:String, ... arguments):String
Fonction d'un utilitaire permettant d'implémenter la méthode toString() dans des classes Event ActionScript 3.0 personnalisées.
Event
 Inherited
Indique si la propriété spécifiée d'un objet est définie.
Object
 Inherited
Vérifie si la méthode preventDefault() a été appelée pour l'événement.
Event
 Inherited
Indique si une occurrence de la classe Object figure dans la chaîne de prototype de l'objet spécifié en tant que paramètre.
Object
 Inherited
Annule le comportement par défaut d'un événement si cette opération est possible.
Event
 Inherited
Indique si la propriété spécifiée existe et est énumérable.
Object
 Inherited
Définit la disponibilité d'une propriété dynamique pour les opérations en boucle.
Object
 Inherited
Bloque le traitement des écouteurs d'événement dans le nœud actuel et les suivants dans le flux d'événements.
Event
 Inherited
Bloque le traitement des écouteurs d'événement dans les nœuds qui suivent le nœud actuel dans le flux d'événements.
Event
  
Renvoie une chaîne répertoriant toutes les propriétés de l'objet FocusEvent.
FocusEvent
 Inherited
Renvoie la valeur primitive de l'objet spécifié.
Object
Constantes publiques
 ConstanteDéfini par
 InheritedACTIVATE : String = "activate"
[statique] La constante ACTIVATE définit la valeur de la propriété type d'un objet événement activate.
Event
 InheritedADDED : String = "added"
[statique] La constante Event.ADDED définit la valeur de la propriété type d'un objet événement added.
Event
 InheritedADDED_TO_STAGE : String = "addedToStage"
[statique] La constante Event.ADDED_TO_STAGE définit la valeur de la propriété type d'un objet d'événement addedToStage.
Event
 InheritedCANCEL : String = "cancel"
[statique] La constante Event.CANCEL définit la valeur de la propriété type d'un objet événement cancel.
Event
 InheritedCHANGE : String = "change"
[statique] La constante Event.CHANGE définit la valeur de la propriété type de l'objet d'événement change.
Event
 InheritedCLEAR : String = "clear"
[statique] La constante Event.CLEAR définit la valeur de la propriété type d'un objet événement clear.
Event
 InheritedCLOSE : String = "close"
[statique] La constante Event.CLOSE définit la valeur de la propriété type d'un objet événement close.
Event
 InheritedAIR-only CLOSING : String = "closing"
[statique] La constante Event.CLOSING définit la valeur de la propriété type d'un objet événement closing.
Event
 InheritedCOMPLETE : String = "complete"
[statique] La constante Event.COMPLETE définit la valeur de la propriété type d'un objet événement complete.
Event
 InheritedCONNECT : String = "connect"
[statique] La constante Event.CONNECT définit la valeur de la propriété type d'un objet événement connect.
Event
 InheritedCOPY : String = "copy"
[statique] Définit la valeur de la propriété type d'un objet d'événement copy.
Event
 InheritedCUT : String = "cut"
[statique] Définit la valeur de la propriété type d'un objet d'événement cut.
Event
 InheritedDEACTIVATE : String = "deactivate"
[statique] La constante Event.DEACTIVATE définit la valeur de la propriété type d'un objet événement deactivate.
Event
 InheritedDISPLAYING : String = "displaying"
[statique] La constante Event.DISPLAYING définit la valeur de la propriété type d'un objet événement displaying.
Event
 InheritedENTER_FRAME : String = "enterFrame"
[statique] La constante Event.ENTER_FRAME définit la valeur de la propriété type d'un objet événement enterFrame.
Event
 InheritedEXIT_FRAME : String = "exitFrame"
[statique] La constante Event.EXIT_FRAME définit la valeur de la propriété type d'un objet événement exitFrame.
Event
 InheritedAIR-only EXITING : String = "exiting"
[statique] La constante Event.EXITING définit la valeur de la propriété type de l'objet d'événement exiting.
Event
  FOCUS_IN : String = "focusIn"
[statique] Définit la valeur de la propriété type d'un objet événement focusIn.
FocusEvent
  FOCUS_OUT : String = "focusOut"
[statique] Définit la valeur de la propriété type d'un objet événement focusOut.
FocusEvent
 InheritedFRAME_CONSTRUCTED : String = "frameConstructed"
[statique] La constante Event.FRAME_CONSTRUCTED définit la valeur de la propriété type d'un objet événement frameConstructed.
Event
 InheritedFULLSCREEN : String = "fullScreen"
[statique] La constante Event.FULL_SCREEN définit la valeur de la propriété type d'un objet événement fullScreen.
Event
 InheritedAIR-only HTML_BOUNDS_CHANGE : String = "htmlBoundsChange"
[statique] La constante Event.HTML_BOUNDS_CHANGE définit la valeur de la propriété type d'un objet événement htmlBoundsChange.
Event
 InheritedAIR-only HTML_DOM_INITIALIZE : String = "htmlDOMInitialize"
[statique] La constante Event.HTML_DOM_INITIALIZE définit la valeur de la propriété type d'un objet événement htmlDOMInitialize.
Event
 InheritedAIR-only HTML_RENDER : String = "htmlRender"
[statique] La constante Event.HTML_RENDER définit la valeur de la propriété type d'un objet événement htmlRender.
Event
 InheritedID3 : String = "id3"
[statique] La constante Event.ID3 définit la valeur de la propriété type d'un objet événement id3.
Event
 InheritedINIT : String = "init"
[statique] La constante Event.INIT définit la valeur de la propriété type d'un objet événement init.
Event
  KEY_FOCUS_CHANGE : String = "keyFocusChange"
[statique] Définit la valeur de la propriété type d'un objet événement keyFocusChange.
FocusEvent
 InheritedAIR-only LOCATION_CHANGE : String = "locationChange"
[statique] La constante Event.LOCATION_CHANGE définit la valeur de la propriété type d'un objet événement locationChange.
Event
  MOUSE_FOCUS_CHANGE : String = "mouseFocusChange"
[statique] Définit la valeur de la propriété type d'un objet événement mouseFocusChange.
FocusEvent
 InheritedMOUSE_LEAVE : String = "mouseLeave"
[statique] La constante Event.MOUSE_LEAVE définit la valeur de la propriété type d'un objet événement mouseLeave.
Event
 InheritedAIR-only NETWORK_CHANGE : String = "networkChange"
[statique] La constante Event.NETWORK_CHANGE définit la valeur de la propriété type d'un objet événement networkChange.
Event
 InheritedOPEN : String = "open"
[statique] La constante Event.OPEN définit la valeur de la propriété type d'un objet événement open.
Event
 InheritedPASTE : String = "paste"
[statique] La constante Event.PASTE définit la valeur de la propriété type d'un objet événement paste.
Event
 InheritedREMOVED : String = "removed"
[statique] La constante Event.REMOVED définit la valeur de la propriété type d'un objet événement removed.
Event
 InheritedREMOVED_FROM_STAGE : String = "removedFromStage"
[statique] La constante Event.REMOVED_FROM_STAGE définit la valeur de la propriété type d'un objet événement removedFromStage.
Event
 InheritedRENDER : String = "render"
[statique] La constante Event.RENDER définit la valeur de la propriété type d'un objet événement render.
Event
 InheritedRESIZE : String = "resize"
[statique] La constante Event.RESIZE définit la valeur de la propriété type d'un objet événement resize.
Event
 InheritedSCROLL : String = "scroll"
[statique] La constante Event.SCROLL définit la valeur de la propriété type d'un objet événement scroll.
Event
 InheritedSELECT : String = "select"
[statique] La constante Event.SELECT définit la valeur de la propriété type d'un objet événement select.
Event
 InheritedSELECT_ALL : String = "selectAll"
[statique] La constante Event.SELECT_ALL définit la valeur de la propriété type d'un objet événement selectAll.
Event
 InheritedSOUND_COMPLETE : String = "soundComplete"
[statique] La constante Event.SOUND_COMPLETE définit la valeur de la propriété type d'un objet événement soundComplete.
Event
 InheritedTAB_CHILDREN_CHANGE : String = "tabChildrenChange"
[statique] La constante Event.TAB_CHILDREN_CHANGE définit la valeur de la propriété type d'un objet événement tabChildrenChange.
Event
 InheritedTAB_ENABLED_CHANGE : String = "tabEnabledChange"
[statique] La constante Event.TAB_ENABLED_CHANGE définit la valeur de la propriété type d'un objet événement tabEnabledChange.
Event
 InheritedTAB_INDEX_CHANGE : String = "tabIndexChange"
[statique] La constante Event.TAB_INDEX_CHANGE définit la valeur de la propriété type d'un objet événement tabIndexChange.
Event
 InheritedUNLOAD : String = "unload"
[statique] La constante Event.UNLOAD définit la valeur de la propriété type d'un objet événement unload.
Event
 InheritedAIR-only USER_IDLE : String = "userIdle"
[statique] La constante Event.USER_IDLE définit la valeur de la propriété type d'un objet événement userIdle.
Event
 InheritedAIR-only USER_PRESENT : String = "userPresent"
[statique] La constante Event.USER_PRESENT définit la valeur de la propriété type d'un objet événement userPresent.
Event
Détails de la propriété
AIR-only directionpropriété
direction:String  [lecture-écriture]

Versions du moteur d'exécution: AIR 1.0

Spécifie la direction du focus pour un événement focusIn.



Implémentation
    public function get direction():String
    public function set direction(value:String):void

Voir aussi

isRelatedObjectInaccessiblepropriété 
isRelatedObjectInaccessible:Boolean  [lecture-écriture]

Version du langage: ActionScript 3.0
Versions du moteur d'exécution: AIR 1.0 Flash Player 10

Si la valeur est true, la propriété relatedObject est définie sur null pour des raisons liées aux sandbox de sécurité. Si la valeur nominale de relatedObject est une référence à un DisplayObject se trouvant dans un autre sandbox, relatedObject est défini sur null, à moins qu'il existe une autorisation dans les deux sens dans les limites de ce sandbox. L'autorisation est établie en appelant la méthode Security.allowDomain() à partir d'un fichier SWF ou en fournissant un fichier de régulation depuis le serveur d'un fichier image, puis en définissant la propriété LoaderContext.checkPolicyFile lors du chargement de l'image.



Implémentation
    public function get isRelatedObjectInaccessible():Boolean
    public function set isRelatedObjectInaccessible(value:Boolean):void

Voir aussi

keyCodepropriété 
keyCode:uint  [lecture-écriture]

Version du langage: ActionScript 3.0
Versions du moteur d'exécution: AIR 1.0 Flash Player 9

Valeur de code correspondant à la touche utilisée pour déclencher un événement keyFocusChange.



Implémentation
    public function get keyCode():uint
    public function set keyCode(value:uint):void
relatedObjectpropriété 
relatedObject:InteractiveObject  [lecture-écriture]

Version du langage: ActionScript 3.0
Versions du moteur d'exécution: AIR 1.0 Flash Player 9

Référence à l'occurrence complémentaire d'InteractiveObject affectée par le déplacement du focus. Lorsqu'un événement focusOut se produit, par exemple, relatedObject représente l'occurrence d'InteractiveObject qui a obtenu le focus.

La valeur de cette propriété peut être null dans deux cas : s'il n'existe aucun objet associé ou s'il existe un objet associé se trouvant dans un sandbox de sécurité auquel vous n'avez pas accès. Pour savoir dans quel cas vous vous trouvez, utilisez la propriété isRelatedObjectInaccessible().



Implémentation
    public function get relatedObject():InteractiveObject
    public function set relatedObject(value:InteractiveObject):void

Voir aussi

shiftKeypropriété 
shiftKey:Boolean  [lecture-écriture]

Version du langage: ActionScript 3.0
Versions du moteur d'exécution: AIR 1.0 Flash Player 9

Indique si la touche de modification Maj est activée, auquel cas la valeur est true. Sinon, elle correspond à false. Cette propriété n'est utilisée que si l'événement FocusEvent est de type keyFocusChange.



Implémentation
    public function get shiftKey():Boolean
    public function set shiftKey(value:Boolean):void
Détails du constructeur
FocusEvent()Constructeur
public function FocusEvent(type:String, bubbles:Boolean = true, cancelable:Boolean = false, relatedObject:InteractiveObject = null, shiftKey:Boolean = false, keyCode:uint = 0, direction:String = "none")

Version du langage: ActionScript 3.0
Versions du moteur d'exécution: AIR 1.0 Flash Player 9

Crée un objet Event à l'aide d'informations spécifiques relatives aux événements Focus. Les objets Event sont transmis en tant que paramètres aux écouteurs d'événements.

Paramètres
type:String — Type de l'événement. Les valeurs possibles sont les suivantes : FocusEvent.FOCUS_IN, FocusEvent.FOCUS_OUT, FocusEvent.KEY_FOCUS_CHANGE et FocusEvent.MOUSE_FOCUS_CHANGE.
 
bubbles:Boolean (default = true) — Détermine si l'objet Event prend part à la phase de propagation vers le haut (bubbling) du flux d'événements.
 
cancelable:Boolean (default = false) — Détermine si l'objet Event peut être annulé.
 
relatedObject:InteractiveObject (default = null) — Indique l'occurrence complémentaire de InteractiveObject affectée par le déplacement du focus. Lorsqu'un événement focusIn se produit, par exemple, relatedObject représente l'occurrence d'InteractiveObject qui a perdu le focus.
 
shiftKey:Boolean (default = false) — Indique si la touche de modification Maj est activée.
 
keyCode:uint (default = 0) — Indique le code de la touche utilisée pour déclencher un événement keyFocusChange.
 
direction:String (default = "none") — Indique à partir de quelle direction l'objet interactif cible est activé. Définissez sur FocusDirection.NONE (la valeur par défaut) pour tous les événements autres que focusIn.

Voir aussi

Détails de la méthode
clone()méthode
override public function clone():Event

Version du langage: ActionScript 3.0
Versions du moteur d'exécution: AIR 1.0 Flash Player 9

Crée une copie de l'objet FocusEvent et définit la valeur de chaque propriété de sorte qu'elle corresponde à la valeur d'origine.

Valeur renvoyée
Event — Nouvel objet FocusEvent dont les propriétés ont la même valeur que celles de l'objet d'origine.
toString()méthode 
override public function toString():String

Version du langage: ActionScript 3.0
Versions du moteur d'exécution: AIR 1.0 Flash Player 9

Renvoie une chaîne répertoriant toutes les propriétés de l'objet FocusEvent. La chaîne est écrite au format suivant :

[FocusEvent type=valeur bubbles=valeur cancelable=valeur relatedObject=valeur shiftKey=valeur ]

Valeur renvoyée
String — Chaîne répertoriant toutes les propriétés de l'objet FocusEvent.
Détails de la constante
FOCUS_INConstante
public static const FOCUS_IN:String = "focusIn"

Version du langage: ActionScript 3.0
Versions du moteur d'exécution: AIR 1.0 Flash Player 9

Définit la valeur de la propriété type d'un objet événement focusIn.

Les propriétés de cet événement sont les suivantes :

PropriétéValeur
bubbles true
cancelable false ; il n'existe aucun comportement par défaut à annuler.
currentTarget L'objet qui traite activement l'objet Event avec un écouteur d'événements.
keyCode 0 ; s'applique uniquement aux événements keyFocusChange.
relatedObject Occurrence complémentaire d'InteractiveObject affectée par le déplacement du focus.
shiftKey false ; s'applique uniquement aux événements keyFocusChange.
target Occurrence d'InteractiveObject qui vient de recevoir le focus. La propriété target ne correspond pas toujours à l'objet de la liste d'affichage qui est associé à l'écouteur d'événement. Utilisez la propriété currentTarget pour accéder à l’objet de la liste d'affichage qui traite actuellement l'événement.
direction La direction à partir de laquelle le focus a été attribué. Cette propriété signale la valeur du paramètre direction de la méthode assignFocus() de la scène. Si le focus a changé par d'autres moyens, la valeur est toujours FocusDirection.NONE. S'applique uniquement aux événements focusIn. Pour tous les autres événements focus, la valeur est FocusDirection.NONE.

Voir aussi

FOCUS_OUTConstante 
public static const FOCUS_OUT:String = "focusOut"

Version du langage: ActionScript 3.0
Versions du moteur d'exécution: AIR 1.0 Flash Player 9

Définit la valeur de la propriété type d'un objet événement focusOut.

Les propriétés de cet événement sont les suivantes :

PropriétéValeur
bubbles true
cancelable false ; il n'existe aucun comportement par défaut à annuler.
currentTarget L'objet qui traite activement l'objet Event avec un écouteur d'événements.
keyCode 0 ; s'applique uniquement aux événements keyFocusChange.
relatedObject Occurrence complémentaire d'InteractiveObject affectée par le déplacement du focus.
shiftKey false ; s'applique uniquement aux événements keyFocusChange.
target Occurrence d'InteractiveObject qui vient de perdre le focus. La propriété target ne correspond pas toujours à l'objet de la liste d'affichage qui est associé à l'écouteur d'événement. Utilisez la propriété currentTarget pour accéder à l'objet de la liste d'affichage qui traite actuellement l'événement.

Voir aussi

KEY_FOCUS_CHANGEConstante 
public static const KEY_FOCUS_CHANGE:String = "keyFocusChange"

Version du langage: ActionScript 3.0
Versions du moteur d'exécution: AIR 1.0 Flash Player 9

Définit la valeur de la propriété type d'un objet événement keyFocusChange.

Les propriétés de cet événement sont les suivantes :

PropriétéValeur
bubbles true
cancelable true ; appelez la méthode preventDefault() pour annuler le comportement par défaut.
currentTarget L'objet qui traite activement l'objet Event avec un écouteur d'événements.
keyCode Valeur de code correspondant à la touche utilisée pour déclencher un événement keyFocusChange.
relatedObject Occurrence complémentaire d'InteractiveObject affectée par le déplacement du focus.
shiftKey true si le modificateur de la touche Maj est activé ; false dans tous les autres cas.
target Occurrence d'InteractiveObject qui possède actuellement le focus. La propriété target ne correspond pas toujours à l'objet de la liste d'affichage qui est associé à l'écouteur d'événement. Utilisez la propriété currentTarget pour accéder à l'objet de la liste d'affichage qui traite actuellement l'événement.

Voir aussi

MOUSE_FOCUS_CHANGEConstante 
public static const MOUSE_FOCUS_CHANGE:String = "mouseFocusChange"

Version du langage: ActionScript 3.0
Versions du moteur d'exécution: AIR 1.0 Flash Player 9

Définit la valeur de la propriété type d'un objet événement mouseFocusChange.

Les propriétés de cet événement sont les suivantes :

PropriétéValeur
bubbles true
cancelable true ; appelez la méthode preventDefault() pour annuler le comportement par défaut.
currentTarget L'objet qui traite activement l'objet Event avec un écouteur d'événements.
keyCode 0 ; s'applique uniquement aux événements keyFocusChange.
relatedObject Occurrence complémentaire d'InteractiveObject affectée par le déplacement du focus.
shiftKey false ; s'applique uniquement aux événements keyFocusChange.
target Occurrence d'InteractiveObject qui possède actuellement le focus. La propriété target ne correspond pas toujours à l'objet de la liste d'affichage qui est associé à l'écouteur d'événement. Utilisez la propriété currentTarget pour accéder à l'objet de la liste d'affichage qui traite actuellement l'événement.

Voir aussi

Exemples Utilisation des exemples
FocusEventExample.as

L'exemple suivant utilise les classes FocusEventExample et CustomSprite pour montrer comment le focus peut être combiné avec les éléments dessinés sur la scène pour capturer des événements et des informations d'impression. Cet exemple exécute les tâches suivantes :
  1. il déclare les propriétés child (de type Sprite) et childCount (de type uint).
  2. Une boucle for crée cinq carrés bleu clair aux coordonnées (0,0). Elle commence par affecter child à une nouvelle occurrence de CustomSprite. Chaque fois qu'un objet CustomSprite est créé, il arrive ce qui suit :
    • La propriété size de type uint est définie sur 50 pixels et bgColor est définie sur la couleur bleu clair.
    • Les propriétés buttonMode et useHandCursor de la classe Sprite sont définies sur true dans le constructeur.
    • Un écouteur d'événement de type click est instancié, avec l'abonné associé clickHandler(). La méthode d'abonné crée une variable locale target de type Sprite et l'affecte à chaque clic de l'utilisateur sur une zone quelconque. Le focus de la scène est ensuite attribué à target.
    • La méthode draw() est appelée et crée un carré de 50x50 pixels via un appel aux méthodes beginFill(), drawRect() et endFill() de la classe Graphics et aux propriétés de l'occurrence.
  3. Dans la boucle for, la méthode configureListeners() est appelée et instancie trois écouteurs/abonnés d'événements :
    • focusIn / focusInHandler() est distribué après l'événement click chaque fois que l'utilisateur clique sur un objet de liste d'affichage (champ).
    • focusOut / focusOutHandler() est distribué lorsque l'utilisateur clique sur un autre champ ou que le focus quitte la scène (par exemple, en cliquant à l'extérieur de Flash Player).
    • keyFocusChange / keyFocusChangeHandler() est distribué si l'utilisateur utilise la touche Tab ou les touches de direction gauche ou droite pour sélectionner un objet de liste d'affichage. La méthode keyFocusChangeHandler() piège les touches de direction droite et gauche et appelle la méthode preventDefault() pour les désactiver.
  4. Dans la boucle for, chaque carré est ajouté dans la liste d'affichage et affiché (tous dans la même zone) par le biais de addChild().
  5. Le constructeur appelle ensuite refreshLayout(), qui distribue les carrés oranges en haut de l'écran (y = 0) en séparant chaque carré par 5 pixels.
package {
    import flash.display.Sprite;
    import flash.display.DisplayObject;
    import flash.events.FocusEvent;
    import flash.events.IEventDispatcher;

    public class FocusEventExample extends Sprite {
        private var gutter:uint = 5;
        private var childCount:uint = 5;

        public function FocusEventExample() {
            var child:Sprite;
            for(var i:uint; i < childCount; i++) {
                child = new CustomSprite();
                configureListeners(child);
                addChild(child);
            }
            refreshLayout();
        }

        private function configureListeners(dispatcher:IEventDispatcher):void {
            dispatcher.addEventListener(FocusEvent.FOCUS_IN, focusInHandler);
            dispatcher.addEventListener(FocusEvent.FOCUS_OUT, focusOutHandler);
            dispatcher.addEventListener(FocusEvent.KEY_FOCUS_CHANGE, keyFocusChangeHandler);
            dispatcher.addEventListener(FocusEvent.MOUSE_FOCUS_CHANGE, mouseFocusChangeHandler);
        }

        private function refreshLayout():void {
            var ln:uint = numChildren;
            var child:DisplayObject = getChildAt(0);
            var lastChild:DisplayObject = child;
            for(var i:uint = 1; i < ln; i++) {
                child = getChildAt(i);
                child.x = lastChild.x + lastChild.width + gutter;
                lastChild = child;
            }
        }

        private function focusInHandler(event:FocusEvent):void {
            var target:CustomSprite = CustomSprite(event.target);
            trace("focusInHandler: " + target.name);
        }

        private function focusOutHandler(event:FocusEvent):void {
            var target:CustomSprite = CustomSprite(event.target);
            trace("focusOutHandler: " + target.name);
        }

        private function keyFocusChangeHandler(event:FocusEvent):void {
            if(event.keyCode == 39 || event.keyCode == 37){
                event.preventDefault()
            }
            var target:CustomSprite = CustomSprite(event.target);
            trace("keyFocusChangeHandler: " + target.name);
        }
        private function mouseFocusChangeHandler(event:FocusEvent):void {
            var target:CustomSprite = CustomSprite(event.target);
            trace("mouseFocusChangeHandler: " + target.name);
        }
    }
}

import flash.display.Sprite;
import flash.events.MouseEvent;

class CustomSprite extends Sprite {
    private var size:uint = 50;
    private var bgColor:uint = 0x00CCFF;

    public function CustomSprite() {
        buttonMode = true;
        useHandCursor = true;
        addEventListener(MouseEvent.CLICK, clickHandler);
        draw(size, size);
    }

    private function draw(w:uint, h:uint):void {
        graphics.beginFill(bgColor);
        graphics.drawRect(0, 0, w, h);
        graphics.endFill();
    }

    private function clickHandler(event:MouseEvent):void {
        var target:Sprite = Sprite(event.target);
        trace("clickHandler: " + target.name);
        stage.focus = target;
    }
}