使用 FocusManager

當使用者在 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