Arbeiten mit dem FocusManager

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 .

Rechtliche Hinweise | Online-Datenschutzrichtlinie