當使用者在 Flash 應用程式中按下 Tab 鍵進行瀏覽,或在應用程式中以滑鼠選擇時,FocusManager 類別會決定哪個組件將成為輸入焦點。除非您正在建立組件,否則就不需要將 FocusManager 實體加入應用程式中,或是撰寫任何程式碼來啟動 FocusManager。
如果 RadioButton 物件成為焦點,FocusManager 會檢查該物件及所有具有相同
groupName
值的物件,並設定物件的焦點,將
selected
屬性設定為
true
。
每個強制回應 Window 組件都含有 FocusManager 的實體,因此該視窗上的控制項會變成本身的 tab 集。如此便能防止使用者因為按下 Tab 鍵,不小心瀏覽到其它視窗中的組件。
FocusManager 會使用容器中元素的深度階層 (或
z
順序) 做為預設的瀏覽配置或「定位鍵迴圈」。使用者通常使用 Tab 鍵來瀏覽定位鍵迴圈,將焦點從成為焦點的第一個組件移到最後一個組件,然後再回到第一個組件。深度階層的設定主要以組件拖曳到「舞台」的順序為準。不過,您也可以使用「修改 > 排列 > 移至最前面/移至最後面」命令來決定最後的
z
順序。如需深度階層的詳細資訊,請參閱
使用顯示清單
。
您可以呼叫
setFocus()
方法,讓應用程式中的組件實體成為焦點。例如,下列範例會為目前的容器 (
this
) 建立 FocusManager 實體,並讓 Button 實體
aButton
成為焦點。
var fm:FocusManager = new FocusManager(this);
fm.setFocus(aButton);
您可以透過呼叫
getFocus()
方法判斷定位鍵迴圈中成為焦點的組件,也可以透過呼叫
getNextFocusManagerComponent()
方法判斷定位鍵迴圈中將成為焦點的下一個組件。在下列範例中,CheckBox、RadioButton 和 Button 位於「舞台」上,而且每個組件都有
MouseEvent.CLICK
和
FocusEvent.MOUSE_FOCUS_CHANGE
事件的偵聽程式。發生
MouseEvent.CLICK
事件時,由於使用者已按一下組件,因此
showFocus()
函數會呼叫
getNextFocusManagerComponent()
方法來判斷定位鍵迴圈中將成為焦點的下一個組件。接著,它會呼叫
setFocus()
方法,讓該組件成為焦點。發生
FocusEvent.MOUSE_FOCUS_CHANGE
事件時,
fc()
函數會顯示發生此事件的組件名稱。當使用者按一下定位鍵迴圈中的組件,而該組件並非下一個組件時,就會觸發這個事件。
// 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) 時成為焦點的按鈕,請將
FocusManager.defaultButton
屬性設定為想要設成預設 Button 的 Button 實體,如下列程式碼所示:
import fl.managers.FocusManager;
var fm:FocusManager = new FocusManager(this);
fm.defaultButton = okButton;
FocusManager 類別會覆寫預設的 Flash Player 焦點矩形,並繪製自訂的圓角焦點矩形。
如需有關在 Flash 應用程式中建立焦點配置的詳細資訊,請參閱 Flash Professional 的
ActionScript 3.0 參考
中的
FocusManager 類別
。如果要建立自訂焦點管理員,您必須建立會實作
IFocusManager
介面的類別。如需詳細資訊,請參閱 Flash Professional 的
ActionScript 3.0 參考
中的
IFocusManager
。