ユーザーが Tab キーを押して Flash アプリケーション内を移動したり、アプリケーション内をクリックしたりすると、FocusManager クラスは入力フォーカスを受け取るコンポーネントを判別します。 コンポーネントを作成している場合を除いて、FocusManager を有効にするために FocusManager インスタンスをアプリケーションに追加したり、コードを作成したりする必要はありません。
RadioButton オブジェクトがフォーカスを取得した場合、FocusManager は、そのオブジェクトと、共通の
groupName
値を持つすべてのオブジェクトを検査し、
selected
プロパティが
true
であるオブジェクトにのみフォーカスを設定します。
各モーダル Window コンポーネントは FocusManager のインスタンスを備えており、そのウィンドウ上のコントロールは独自のタブセットになります。 そのため、ユーザーが Tab キーを押して、意図せずに他のウィンドウ上にあるコンポーネントに移動することはありません。
FocusManager では、コンテナ内のエレメントの深度(z 順序)が、デフォルトのナビゲーション順序(タブループ)として使用されます。通常、タブループ内の移動には Tab キーを使用します。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)を押した場合にフォーカスを取得するボタンを作成するには、次のコードのように、デフォルトボタンにする Button インスタンスを
FocusManager.defaultButton
プロパティに設定します。
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
を参照してください。