Quando l'utente preme il tasto Tab per spostarsi all'interno di un'applicazione Flash o fa clic all'interno di un'applicazione, la classe FocusManager determina quale componente deve essere attivato. Per attivare FocusManager, non è necessario aggiungerne un'istanza a un'applicazione o scrivere codice, a meno che non stiate creando un componente.
Se viene attivato un oggetto RadioButton, FocusManager esamina tale oggetto e tutti quelli con lo stesso valore
groupName
e imposta l'attivazione sull'oggetto con la proprietà
selected
impostata su
true
.
Ciascun componente Window a scelta obbligatoria contiene un'istanza FocusManager; pertanto, i controlli della finestra gestita da tale componente diventano una serie di tabulazioni distinta che impedisce a un utente di passare inavvertitamente a componenti di altre finestre premendo il tasto Tab.
FocusManager utilizza il livello di profondità (o
z
-order) degli elementi inclusi nel contenitore come schema di navigazione (o
ciclo di tabulazioni
) predefinito. Un utente solitamente si sposta nel ciclo di tabulazioni utilizzando il tasto Tab, con lo stato di attivazione che passa dal primo componente attivato fino all'ultimo, per ritornare di nuovo al primo. I livelli di profondità vengono impostati principalmente in base all'ordine in cui i componenti vengono trascinati nello stage. Tuttavia, lo
z
-order finale può essere determinato anche utilizzando i comandi Elabora > Disponi > Porta in primo piano/Porta sullo sfondo. Per ulteriori informazioni sui livelli di profondità, vedete
Operazioni con l'elenco di visualizzazione
.
Potete chiamare il metodo
setFocus()
per attivare un'istanza di componente in un'applicazione. Ad esempio, il codice seguente crea un'istanza FocusManager per il contenitore corrente (
this
) e assegna l'attivazione all'istanza Button
aButton
.
var fm:FocusManager = new FocusManager(this);
fm.setFocus(aButton);
Potete determinare il componente attivo corrente chiamando il metodo
getFocus()
e verificare il componente successivo che verrà attivato, nel ciclo di tabulazioni, chiamando il metodo
getNextFocusManagerComponent()
. Nell'esempio seguente sono presenti sullo stage tre componenti (CheckBox, RadioButton e Button), ciascuno dei quali ha un listener che intercetta gli eventi
MouseEvent.CLICK
e
FocusEvent.MOUSE_FOCUS_CHANGE
. Quando si verifica l'evento
MouseEvent.CLICK
(ovvero quando l'utente fa clic su un componente), la funzione
showFocus()
chiama il metodo
getNextFocusManagerComponent()
per determinare quale componente, all'interno del ciclo di tabulazioni, riceverà lo stato di attivazione. Quindi, la funzione chiama il metodo
setFocus()
per attivare quel componente. Quando si verifica l'evento
FocusEvent.MOUSE_FOCUS_CHANGE
, la funzione
fc()
visualizza il nome del componente sul quale è avvenuto l'evento. Questo evento viene generato quando l'utente fa clic su un componente diverso da quello successivo all'interno del ciclo di tabulazioni.
// 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);
}
Per creare un componente Button che venga attivato quando l'utente preme Invio, impostate la proprietà
FocusManager.defaultButton
sull'istanza Button che deve corrispondere al pulsante predefinito, come nel codice seguente:
import fl.managers.FocusManager;
var fm:FocusManager = new FocusManager(this);
fm.defaultButton = okButton;
La classe FocusManager sostituisce il rettangolo di attivazione predefinito di Flash Player e disegna un rettangolo di attivazione personalizzato con gli angoli arrotondati.
Per ulteriori informazioni sulla creazione di uno schema di attivazione in un'applicazione Flash, vedete la
classe FocusManager
nella
Guida di riferimento di ActionScript 3.0
per Flash Professional
. Per creare un gestore di attivazione personalizzato, dovete creare una classe che implementa l'interfaccia
IFocusManager
. Per ulteriori informazioni, vedete l'interfaccia
IFocusManager
nella
Guida di riferimento di ActionScript 3.0
per Flash Professional
.