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
.