FocusManager の操作

ユーザーが 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 アプリケーションでのフォーカス順序の作成に関する詳細については、『ActionScript 3.0 コンポーネントリファレンスガイド』の FocusManager クラスを参照してください。カスタムフォーカスマネージャを作成するには、IFocusManager インターフェイスを実装するクラスを作成する必要があります。詳細については、『ActionScript 3.0 コンポーネントリファレンスガイド』の IFocusManager を参照してください。


 

このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。 | コメントレポート

現在のページ: http://livedocs.adobe.com/flash/9.0_jp/main/00000404.html