Trabalho com o FocusManager

Quando um usuário pressiona a tecla Tab para navegar em um aplicativo Flash ou clica em um aplicativo, a classe FocusManager determina qual componente receberá o foco de entrada. Você não precisa adicionar uma ocorrência de FocusManager a um aplicativo ou gravar qualquer código para ativar o FocusManager, a não ser que esteja criando um componente.

Se um objeto RadioButton receber o foco, o FocusManager examinará esse objeto e todos os objetos com o mesmo valor groupName , e definirá o foco no objeto com a propriedade selected definida como true .

Cada componente modal Window contém uma ocorrência do FocusManager, a fim de que os controles dessa janela se tornem seu próprio conjunto de tabulações. Isso impedirá que um usuário navegue inadvertidamente para os componentes em outras janelas por meio da tecla Tab.

O FocusManager usa o nível de profundidade (ou a ordem z ) dos elementos no contêiner como esquema de navegação padrão ou loop de tabulação . Geralmente, um usuário navega no loop de tabulação usando a tecla Tab; o foco se movimenta do primeiro componente que tem o foco para o último e, depois, novamente para o primeiro. Os níveis de profundidade são configurados basicamente pela ordem em que os componentes são arrastados para o Palco. No entanto, você também pode usar os comandos Modificar > Organizar > Trazer para o Primeiro plano/Enviar para Plano de fundo para determinar a ordem z final. Para obter mais informações sobre os níveis de profundidade, consulte Trabalho com a lista de exibição .

Você pode chamar o método setFocus() para atribuir o foco a uma ocorrência de componente em um aplicativo. O exemplo a seguir cria uma ocorrência do FocusManager para o contêiner atual ( this ) e atribui o foco à ocorrência de Button aButton .

var fm:FocusManager = new FocusManager(this); 
fm.setFocus(aButton);

Você pode determinar qual componente tem o foco chamando o método getFocus() e qual componente do loop de tabulação receberá o foco em seguida, chamando o método getNextFocusManagerComponent() . No exemplo a seguir, uma CheckBox, um RadioButton e um Button estão no Palco e cada componente tem ouvintes para os eventos MouseEvent.CLICK e FocusEvent.MOUSE_FOCUS_CHANGE . Quando o evento MouseEvent.CLICK ocorre, porque o usuário clicou no componente, a função showFocus() chama o método getNextFocusManagerComponent() para determinar qual componente do loop de tabulação receberá o foco em seguida. Em seguida, ela chama o método setFocus() para atribuir o foco a esse componente. Quando o evento FocusEvent.MOUSE_FOCUS_CHANGE ocorre, a função fc() exibe o nome do componente em que o ocorreu o evento. Esse evento é acionado quando o usuário clica em um componente que não seja o próximo no loop de tabulação.

// 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); 
}

Para criar um botão que recebe o foco quando um usuário pressiona Enter (Windows) ou Return (Macintosh), defina a propriedade FocusManager.defaultButton com a ocorrência de Button que será o botão padrão, conforme no código a seguir:

import fl.managers.FocusManager; 
 
var fm:FocusManager = new FocusManager(this); 
fm.defaultButton = okButton;

A classe FocusManager substitui o retângulo de foco padrão do Flash Player e desenha um retângulo de foco personalizado com cantos arredondados.

Para obter mais informações sobre a criação de um esquema de foco em um aplicativo Flash, consulte a FocusManager class na Referência do ActionScript 3.0 para Adobe Flash Platform . Para criar um gerenciador de foco personalizado, crie uma classe que implemente a interface do IFocusManager . Para obter mais informações, consulte IFocusManager na Referência do ActionScript 3.0 para Adobe Flash Platform .