Wenn ein Benutzer zur Navigation in einer Flash-Anwendung die Tabulatortaste drückt, bestimmt der FocusManager, welche Komponente den Eingabefokus erhält. Sie brauchen eine FocusManager-Instanz nur dann in eine Anwendung einfügen oder Code schreiben, um den FocusManager zu aktivieren, wenn Sie eine Komponente erstellen wollen.
Wenn ein RadioButton-Objekt den Fokus erhält, wird dieses Objekt sowie alle Objekte mit demselben
groupName
-Wert vom FocusManager überprüft, und der Fokus wird demjenigen Objekt gegeben, für das die Eigenschaft
selected
auf
true
gesetzt ist.
Jede modale Window-Komponente enthält eine FocusManager-Instanz, sodass die Steuerelemente in diesem Fenster eine eigene und in sich geschlossene Tabulatorreihenfolge erhalten. Hierdurch wird verhindert, dass ein Benutzer mit der Tabulatortaste versehentlich zu Komponenten in anderen Fenstern gelangt.
Der FocusManager verwendet die Tiefenebene (oder
z
-Reihenfolge) der Elemente im Container als Standardnavigationsschema oder
Tabulatorschleife
. Benutzer navigieren normalerweise mit der Tabulatortaste durch die Tabulatorschleife, wobei sich der Fokus von der ersten Komponente, die den Fokus hat, bis zur letzten bewegt und dann wieder zu ersten. Die Tiefenebenen werden in erster Linie von der Reihenfolge festgelegt, in der Komponenten auf die Bühne gezogen werden. Sie können die endgültige
z
-Reihenfolge jedoch auch mithilfe der Befehle „Modifizieren“ > „Anordnen“ > „In den Vordergrund“ bzw. „In den Hintergrund“ festlegen. Weitere Informationen zur Tiefenreihenfolge finden Sie im Abschnitt
Arbeiten mit der Anzeigeliste
.
Sie können die Methode
setFocus()
aufrufen, um einer Komponenteninstanz in einer Anwendung den Fokus zu geben. Im folgenden Beispiel wird eine FocusManager-Instanz für den aktuellen Container (
this
) erstellt. Den Fokus erhält die Button-Instanz
aButton
.
var fm:FocusManager = new FocusManager(this);
fm.setFocus(aButton);
Sie können feststellen, welche Komponente den Fokus hat, indem Sie die Methode
getFocus()
aufrufen. Um festzustellen, welche Komponente in der Tabulatorschleife als nächste den Fokus erhält, rufen Sie die Methode
getNextFocusManagerComponent()
auf. Im folgenden Beispiel befinden sich eine CheckBox-, eine RadioButton- und eine Button-Komponente auf der Bühne. Jede dieser Komponenten hat einen Listener für die Ereignisse
MouseEvent.CLICK
und
FocusEvent.MOUSE_FOCUS_CHANGE.
Wenn das
MouseEvent.CLICK
-Ereignis eintritt, weil der Benutzer auf die Komponente geklickt hat, ruft die Funktion
showFocus()
die Methode
getNextFocusManagerComponent()
auf, um festzustellen, welche Komponente in der Tabulatorschleife als nächste den Fokus erhalten würde. Dann wird die Methode
setFocus()
aufgerufen, um dieser Komponente den Fokus zu geben. Wenn das Ereignis
FocusEvent.MOUSE_FOCUS_CHANGE
eintritt, zeigt die
fc()
-Funktion den Namen der Komponente an, bei der dieses Ereignis aufgetreten ist. Dieses Ereignis wird ausgelöst, wenn der Benutzer auf eine Komponente klickt, die nicht die nächste in der Tabulatorschleife ist.
// 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);
}
Sie können eine Schaltfläche erstellen, die beim Drücken der Eingabetaste (Windows) bzw. der Return-Taste (Macintosh) den Fokus erhält, indem Sie die Eigenschaft
FocusManager.defaultButton
auf die Instanz der als Standardschaltfläche gewünschten Schaltfläche setzen. Dies wird im folgenden Code gezeigt:
import fl.managers.FocusManager;
var fm:FocusManager = new FocusManager(this);
fm.defaultButton = okButton;
Die FocusManager-Klasse überschreibt das Standardfokusrechteck von Flash Player und zeichnet ein angepasstes Fokusrechteck mit abgerundeten Ecken.
Weitere Informationen zum Erstellen eines Fokusschemas in einer Flash-Anwendung finden Sie im Abschnitt zur
FocusManager-Klasse
im
ActionScript 3.0 Referenzhandbuch
für Flash Professional
. Um einen benutzerdefinierten Fokusmanager zu erstellen, müssen Sie eine Klasse erstellen, die die
IFocusManager
-Schnittstelle implementiert. Weitere Informationen finden Sie unter
IFocusManager
im
ActionScript 3.0 Referenzhandbuch
für Flash Professional
.