フォーカス設定を扱う
ActionScript の Event クラスからフォーカスを扱うには FocusEvent クラスを利用します。しかし、このイベントは実装されていないクラスも多く、すぐに使う事は難しいケースも存在します。
そこで、このイベントが実装されていないコンポーネントにフォーカス設定を実装していきます。
実装
FocusEvent を扱うには IFocusManagerComponent インターフェースを実装します。ここでは、 Canvas を拡張した MyCanvas クラスをサンプルとして扱います。
package jp.ne.sakura.hl2 { import mx.containers.*; import mx.managers.IFocusManagerComponent; import flash.events.*; public class MyCanvas extends Canvas implements IFocusManagerComponent { public function MyCanvas() { // フォーカスの可否を設定 super.focusEnabled = true; // TAB キーとマウス操作によるフォーカス取得を可能に super.tabEnabled = true; super.mouseFocusEnabled = true; } // 親クラスの focusInHandler をオーバーライド override protected function focusInHandler(e:FocusEvent):void { super.focusInHandler(e); // ここを記述しておかないとマウスクリックでフォーカスが表示されない super.focusManager.showFocus(); /* フォーカスを表示する必要はないのであれば、こう書けばいい super.focusManager.hideFocus(); */ } } }
もちろん、親クラスのハンドラをオーバーライドせずに自分で定義する事もできます。この場合 focusInHandler という名前は使えないため、別の名前でメソッドを定義します。
this.addEventListener(FocusEvent.FOCUS_IN, fInHandler); private function fInHandler(e:FocusEvent):void { // 何らかの動作 }
後は適当にこれを呼び出して TAB キーやマウスで操作してください。上の実装は本当に最低限のことしか行っていないため、他に知りたい事があれば下のリンクをどうぞ。