Arbeta med FocusManager

När en användare trycker på tabbtangenten för att navigera i ett Flash-program, eller klciakr i ett program, bestämmer FocusManager-klassen vilken komponent som får indatafokus. Du behöver inte lägga till en FocusManager-förekomst i ett program eller skriva någon kod för att aktivera fokushanteraren, såvida du inte skapar en komponent.

Om ett RadioButton-objekt får fokus analyserar FocusManager objektet och alla objekt med samma groupName -värde, och ställer in fokus på objektet som har en selected -egenskap med värdet true .

Varje modal fönsterkomponent innehåller en förekomst av FocusManager, så kontrollerna för fönstret utgör en egen tabbuppsättning. Det förhindrar att en användare av misstag navigerar till komponenter i andra fönster genom att trycka på tabbtangenten.

FocusManager använder djupnivån (eller z -ordningen) på elementen i behållaren som standardnavigationsschema eller tabbslinga . Vanligtvis navigerar du i tabbslingan med tabbtangenten, och fokus flyttas från den första komponenten som har fokus, till den sista, och tillbaka igen till den första. Djupnivåerna ställs primärt in efter den ordning som komponenterna dras till scenen. Du kan även använda kommandona Ändra > Ordna> Flytta längst fram/Flytta längst bak för att bestämma den slutliga z -ordningen. Mer information om olika djup finns i Arbeta med visningslistan .

Du kan anropa metoden setFocus() om du vill ge fokus till en komponentförekomst i ett program. Följande exempel skapar till exempel en FocusManager-förekomst av den aktuella behållaren ( this ) och ger fokus till Button-förekomsten aButton .

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

Du kan bestämma vilken komponent som har fokus genom att anropa metoden getFocus() , och du kan bestämma vilken komponent i tabbslingan som sedan ska få fokus genom att anropa metoden getNextFocusManagerComponent() . I följande exempel finns en CheckBox, en RadioButton och en Button på scenen, och de har alla avlyssnare för MouseEvent.CLICK - och FocusEvent.MOUSE_FOCUS_CHANGE -händelser. När MouseEvent.CLICK -händelsen inträffar eftersom användaren klickar på komponenten, anropar showFocus() -funktionen metoden getNextFocusManagerComponent() för att bestämma vilken komponent i tabbslingan som ska få fokus sedan. Sedan anropar den metoden setFocus() för att ge fokus till den komponenten. När FocusEvent.MOUSE_FOCUS_CHANGE -händelsen inträffar visar fc() -funktionen namnet på komponenten som den här händelsen inträffade på. Händelsen utlöses när användaren klickar på en annan komponent än den som är nästa komponent i slingan.

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

Om du vill skapa en Button som får fokus när användaren trycker på Enter (Windows) eller Retur (Macintosh) ställer du in egenskapen FocusManager.defaultButton för den Button-förekomst som du vill ha som standard-Button, som i följande kod:

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

FocusManager-klassen åsidosätter den fokusram som är standard i Flash Player och ritar en standardfokusram med rundade hörn.

Mer information om att skapa ett fokusschema i ett Flash-program finns klassen FocusManager i Referenshandbok för ActionScript 3.0 i Adobe Flash Professional . Om du vill skapa en anpassad fokushanterare måste du skapa en klass som implementerar gränssnittet IFocusManager . Mer information finns i IFocusManager i Referenshandbok för ActionScript 3.0 i Adobe Flash Professional .