当用户按 Tab 键在 Flash 应用程序中导航时或在应用程序中单击时,FocusManager 类会确定接收输入焦点的组件。除非您正在创建组件,否则您无需向应用程序添加 FocusManager 实例,也不必编写任何代码来激活 FocusManager。
如果 RadioButton 对象接收焦点,FocusManager 将检查该对象和具有相同
groupName
值的所有对象,然后将焦点设置在
selected
属性设置为
true
的对象上。
每个模式窗口组件都包含 FocusManager 的一个实例,因此,该窗口上的控件也就成为它们自己的 Tab 集。这样可以防止用户按 Tab 切换到其他窗口中的组件。
FocusManager 使用容器中元素的深度级别(
z
顺序)作为默认导航方案或“Tab 键循环”。用户通常使用 Tab 键来导航 Tab 键循环,焦点将从具有焦点的第一个组件移动到最后一个,然后再回到第一个。深度级别主要按组件拖到舞台上的顺序设置;但是,也可以使用“修改”>“排列”>“移至顶层”或“移至底层”命令来确定最终的
z
顺序。有关深度级别的详细信息,请参阅
使用显示列表
。
可以调用
setFocus()
方法来使应用程序中的某一组件实例获得焦点。例如,下面的示例为当前容器 (
this
) 创建一个 FocusManager 实例,并且使 Button 实例
aButton
获得焦点。
var fm:FocusManager = new FocusManager(this);
fm.setFocus(aButton);
可以通过调用
getFocus()
方法来确定哪个组件具有焦点;可以通过调用
getNextFocusManagerComponent()
方法来确定 Tab 键循环中哪个组件接下来将获得焦点。在下面的示例中,一个 CheckBox、一个 RadioButton 和一个 Button 在舞台上,每个组件都有
MouseEvent.CLICK
和
FocusEvent.MOUSE_FOCUS_CHANGE
事件的侦听器。
MouseEvent.CLICK
事件发生时,因为用户单击了组件,所以
showFocus()
函数调用
getNextFocusManagerComponent()
方法,以确定 Tab 键循环中哪个组件接下来将获得焦点。然后,它调用
setFocus()
方法来使该组件获得焦点。
FocusEvent.MOUSE_FOCUS_CHANGE
事件发生时,
fc()
函数显示发生了此事件的组件的名称。当用户单击不同于 Tab 键循环中下一个组件的组件时,触发此事件。
// 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);
}
若要创建在用户按下 Enter (Windows) 或 Return (Macintosh) 时接收焦点的 Button,请将
FocusManager.defaultButton
属性设置为要作为默认 Button 的 Button 实例,如下面的代码所示:
import fl.managers.FocusManager;
var fm:FocusManager = new FocusManager(this);
fm.defaultButton = okButton;
FocusManager 类会覆盖默认的 Flash Player 焦点矩形,并绘制一个圆角的自定义焦点矩形。
有关在 Flash 应用程序中创建焦点方案的详细信息,请参阅
《用于 Adobe® Flash® Professional CS5 的 ActionScript® 3.0 参考》
中的
FocusManager 类
。若要创建自定义的焦点管理器,必须创建实现
IFocusManager
接口的类。有关详细信息,请参阅
《用于 Adobe® Flash® Professional CS5 的 ActionScript® 3.0 参考》
中的
IFocusManager
。