Werken met FocusManager

Wanneer de gebruiker op Tab drukt om te navigeren in een Flash-toepassing of in een toepassing klikt, bepaalt de klasse FocusManager welke component invoerfocus krijgt. U hoeft geen instantie FocusManager aan een toepassing toe te voegen of een code te schrijven om FocusManager te activeren, tenzij u een component maakt.

Als een RadioButton-object focus krijgt, worden dat object en alle objecten met dezelfde waarde voor groupName gecontroleerd door FocusManager en wordt focus ingesteld op het object waarvan de eigenschap selected is ingesteld op true .

Omdat elke modale venstercomponent een instantie van FocusManager bevat, fungeren de opties in een venster als de eigen tabverzameling. Zo wordt voorkomen dat de gebruiker per ongeluk met de toets Tab naar componenten in andere vensters navigeert.

FocusManager gebruikt het diepteniveau (of de z -volgorde) van elementen in de container als het standaardnavigatieschema (of de tablus ). De gebruiker navigeert doorgaans door de tablus met Tab, waarbij de focus in stappen wordt verplaatst van de eerste component met focus naar de laatste en vervolgens weer terug naar de eerste. De diepteniveaus worden voornamelijk bepaald door de volgorde waarin componenten naar het werkgebied worden gesleept, maar u kunt ook de opdrachten Wijzigen > Rangschikken > Naar voorgrond/Naar achtergrond gebruiken om de uiteindelijke z -volgorde te bepalen. Zie Werken met het weergaveoverzicht voor meer informatie over diepteniveaus.

U kunt de methode setFocus() aanroepen om een componentinstantie in een toepassing focus te geven. In het volgende voorbeeld wordt een instantie FocusManager gemaakt voor de huidige container ( this ) en wordt focus gegeven aan de Button-instantie aButton .

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

U kunt bepalen welke component focus heeft door de methode getFocus() aan te roepen en u kunt bepalen welke component in de tablus als volgende focus zal krijgen door de methode getNextFocusManagerComponent() aan te roepen. In het volgende voorbeeld bevat het werkgebied een CheckBox, een RadioButton en een Button en heeft elke component listeners voor gebeurtenissen MouseEvent.CLICK en FocusEvent.MOUSE_FOCUS_CHANGE . Wanneer de gebeurtenis MouseEvent.CLICK optreedt omdat de gebruiker op de component heeft geklikt, roept de functie showFocus() de methode getNextFocusManagerComponent() aan om te bepalen welke component in de tablus als volgende focus krijgt. Vervolgens roept deze de methode setFocus() aan om die componentinstantie focus te geven. Wanneer de gebeurtenis FocusEvent.MOUSE_FOCUS_CHANGE optreedt, geeft de functie fc() de naam van de component weer waarin deze gebeurtenis is opgetreden. Deze gebeurtenis wordt geactiveerd wanneer de gebruiker op een andere component dan de volgende in de tablus klikt.

// 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); 
}

Als u een knop wilt maken die focus krijgt wanneer de gebruiker op Enter (Windows) of Return (Macintosh) drukt, stelt u de eigenschap FocusManager.defaultButton in op de instantie Button die u als standaardknop wilt gebruiken, zoals in de volgende code:

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

De klasse FocusManager overschrijft de standaardfocusrechthoek van Flash Player en tekent een aangepaste focusrechthoek met ronde hoeken.

Zie voor meer informatie over het maken van een focusschema in een Flash-toepassing de klasse FocusManager in de Naslaggids voor ActionScript 3.0 voor Flash Professional . Als u een aangepaste focusmanager wilt maken, moet u een klasse maken waarmee de interface IFocusManager wordt geïmplementeerd. Raadpleeg IFocusManager in de Naslaggids voor ActionScript 3.0 voor Flash Professional voor meer informatie.