Trabajo con FocusManager

Cuando el usuario presiona la tecla Tabulador para navegar en una aplicación de Flash o hace clic en otra aplicación, la clase FocusManager determina el componente que recibe la selección de entrada. No es preciso añadir una instancia de FocusManager a una aplicación, ni escribir código para activar FocusManager, a menos que se cree un componente.

Si se selecciona un objeto RadioButton, FocusManager examina el objeto, así como todos los objetos con el mismo valor de groupName , y define la selección del objeto estableciendo el valor true para la propiedad selected .

Cada componente de ventana modal contiene una instancia de FocusManager, de forma que los controles de esa ventana se conviertan en su propio grupo de tabulación. Esto evita que un usuario desplace accidentalmente la selección a componentes de otras ventanas al presionar la tecla Tabulador.

FocusManager utiliza el nivel de profundidad (u orden z ) de los elementos en el contenedor como esquema de navegación predeterminado o bucle de tabulación . Un usuario normalmente navega por el bucle de tabulación mediante el tabulador, que mueve la selección desde el primer componente seleccionado al último y luego de vuelta al primero. Los niveles de profundidad se configuran principalmente con el orden en el que los componentes se arrastran al escenario. Sin embargo, también se pueden utilizar los comandos Modificar > Organizar > Traer al frente/Enviar al fondo para determinar el orden z final. Para más información sobre los niveles de profundidad, consulte Trabajo con la lista de visualización .

Se puede llamar al método setFocus() para seleccionar una instancia de un componente en una aplicación. Por ejemplo, en el siguiente ejemplo se crea una instancia de FocusManager para el contenedor actual ( this ) y se selecciona la instancia de Button aButton .

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

Para determinar el componente seleccionado, se puede llamar al método getFocus() y para determinar el componente del bucle de tabulación que se seleccionará a continuación, se puede llamar al método getNextFocusManagerComponent() . En el siguiente ejemplo, hay tres componentes en el escenario: un CheckBox, un RadioButton y un Button; cada uno tiene detectores de los eventos MouseEvent.CLICK y FocusEvent.MOUSE_FOCUS_CHANGE. Cuando se produce el evento MouseEvent.CLICK , porque el usuario ha hecho clic en el componente, la función showFocus() llama al método getNextFocusManagerComponent() para determinar el componente del bucle de tabulación que se seleccionará a continuación. A continuación, llama al método setFocus() para seleccionar dicho componente. Cuando se produce el evento FocusEvent.MOUSE_FOCUS_CHANGE , la función fc() muestra el nombre del componente en el que se produjo el evento. Este evento se activa cuando el usuario hace clic en un componente que no sea el componente siguiente en el bucle de tabulación.

// 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 crear un componente Button que reciba la selección cuando el usuario presiona Intro (Windows) o Retorno (Macintosh), debe establecerse la propiedad FocusManager.defaultButton en la instancia de Button que se prefiera como opción predeterminada, como en el código siguiente:

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

La clase FocusManager sustituye el rectángulo de selección de Flash Player predeterminado y dibuja un rectángulo de selección personalizado con esquinas redondeadas.

Para obtener más información sobre la creación de un esquema de selección en una aplicación de Flash, consulte la clase FocusManager en la Referencia de ActionScript 3.0 para Flash Professional . Para crear un administrador de selección personalizado, se debe crear una clase que implemente la interfaz IFocusManager . Para obtener más información, consulte IFocusManager en la Referencia de ActionScript 3.0 para Flash Professional .