Operazioni con FocusManager

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 .