Praca z klasą FocusManager

Gdy użytkownik naciśnie klawisz Tab w celu nawigowania w aplikacji Flash lub kliknie wewnątrz aplikacji, klasa FocusManager określa, który składnik powinien stać się aktywny. Aby aktywować klasę FocusManager, nie trzeba dodawać do aplikacji instancji tej klasy ani pisać żadnego dodatkowego kodu. Wyjątkiem są przypadki samodzielnego tworzenia składników.

Gdy aktywny staje się obiekt RadioButton, klasa FocusManager analizuje ten obiekt i wszystkie obiekty o tej samej wartości groupName , po czym uaktywnia obiekt, którego właściwość selected jest ustawiona na true .

Każdy modalny składnik Window zawiera instancję klasy FocusManager, a zatem elementy sterujące tego okna stają się jego własnym zestawem obiektów aktywowanych klawiszem Tab. W efekcie użytkownik nie może, naciskając klawisz Tab, przypadkowo przejść do składników w innych oknach.

W charakterze domyślnego systemu nawigacji lub pętli nawigacji klawiszem Tab , klasa FocusManager używa hierarchii głębokości elementów w kontenerze (ich kolejności z ). Użytkownik zazwyczaj nawiguje w pętli, korzystając z klawisza Tab, co powoduje przenoszenie aktywności od pierwszego składnika do ostatniego, a potem z powrotem do pierwszego. Głębokość zależy przede wszystkim od kolejności, w jakiej składniki są przeciągane na stół montażowy; możliwe jest jednak również użycie poleceń Modyfikuj > Ułóż > Przesuń na wierzch/Przesuń na spód do zdefiniowania ostatecznej kolejności z . Więcej informacji na temat poziomów głębokości zawiera sekcja Praca z listą wyświetlania .

Istnieje możliwość wywołania metody setFocus() w celu uaktywnienia określonej instancji składnika w aplikacji. Poniższy kod przykładowy tworzy instancję klasy FocusManager dla bieżącego kontenera ( this ) i uaktywnia instancję składnika Button o nazwie aButton .

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

Metoda getFocus() umożliwia sprawdzenie, który składnik jest w danej chwili aktywny, natomiast metoda getNextFocusManagerComponent() umożliwia sprawdzenie, który składnik w pętli Tab zostanie uaktywniony jako następny. W poniższym przykładzie składniki CheckBox, RadioButton i Button znajdują się na stole montażowym, a każdy składnik ma detektory zdarzeń MouseEvent.CLICK i FocusEvent.MOUSE_FOCUS_CHANGE . Gdy w wyniku kliknięcia składnika przez użytkownika zostanie wygenerowane zdarzenie MouseEvent.CLICK , funkcja showFocus() wywołuje metodę getNextFocusManagerComponent() w celu określenia, który składnik w pętli klawisza Tab zostałby uaktywniony jako następny. Następnie wywołuje metodę setFocus() w celu uaktywnienia tego właśnie składnika. Gdy zostanie wygenerowane zdarzenie FocusEvent.MOUSE_FOCUS_CHANGE , funkcja fc() wyświetla nazwę składnika, w którym zdarzenie to wystąpiło. To zdarzenie jest wywoływane, gdy użytkownik kliknie składnik inny niż następny składnik w pętli klawisza Tab.

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

Aby utworzyć składnik Button, który będzie uaktywniany po naciśnięciu klawisza Enter (Windows) lub Return (Macintosh), należy przypisać właściwości FocusManager.defaultButton instancję składnika Button, która ma być przyciskiem domyślnym; ilustruje to poniższy kod:

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

Klasa FocusManager przesłania domyślny prostokąt aktywności programu Flash Player i rysuje niestandardowy prostokąt aktywności z zaokrąglonymi narożnikami.

Więcej informacji na temat tworzenia schematu aktywności w aplikacjach Flash zawiera opis klasy FocusManager w dokumentacji języka ActionScript 3.0 dla programu Flash Professional . Aby utworzyć własnego menedżera aktywności, należy utworzyć klasę implementującą interfejs IFocusManager . Więcej informacji zawiera opis klasy klasy IFocusManager w dokumentacji języka ActionScript 3.0 dla programu Flash Professional .