[AS]カーソル位置(フォーカス)をスクリプトで制御する方法
できないのか?、と思ったらあっさりできたのでメモ。
FocusManagerクラスのsetFocusメソッドで楽勝でした。
以下、サンプルのドキュメントクラス。
赤い四角をクリックすると、2個のテキストフィールドにカーソルが行ったり来たりします。
package {
import fl.managers.FocusManager;
import flash.display.Graphics;
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.text.TextField;
import flash.text.TextFieldType;
/**
* ...
* @author 393
*/
public class FocusTest extends Sprite {
private var count:uint;
private var tf0:TextField;
private var tf1:TextField;
public function FocusTest() {
//テキストフィールドのセット
setText();
//フォーカスチェンジ用ボタンのセット
setBtn();
}
//ボタンの定義
private function setBtn():void{
var btn:Sprite = new Sprite();
var btnG:Graphics = btn.graphics;
btnG.beginFill(0xFF0000);
btnG.drawRect(0, 0 , 100, 30);
btnG.endFill();
addChild(btn);
btn.buttonMode = true;
btn.y = 100;
btn.addEventListener(MouseEvent.CLICK, xClick);
}
//クリック時の処理
private function xClick(e:MouseEvent):void {
var fm:FocusManager = new FocusManager(this);
var tf:TextField;
count++;
if (count % 2) {
tf = tf0;
} else {
tf = tf1;
}
fm.setFocus(tf);
}
//
private function setText():void{
tf0 = new TextField();
tf1 = new TextField();
tf0.type = tf1.type = TextFieldType.INPUT;
tf0.border = tf1.border = true
tf0.autoSize = tf1.autoSize = "left";
tf1.y = 30;
addChild(tf0);
addChild(tf1);
tf0.text = "test0";
tf1.text = "test1";
}
}
}
※ただし、注意がひとつ。
このままドキュメントクラスに設定してパブリッシュしただけだと以下のエラーがでます。
1172: 定義 fl.managers:FocusManager が見つかりません。
何で見つからないんだよーと思ったのですが・・・
どうもflaのライブラリにユーザーインターフェースのコンポーネントが存在していない駄目っぽい。
たとえば、ラジオボタンとかチェックボックスとかがライブラリにあればOK。
(ライブラリにいれば、ステージからは削除しちゃってもOK)
コンポーネント用のクラスってことなのかいな。
そういえばVIDEOの方でもそんな感じのことが起きた気がする。
試しにwonderflにもソースコピペしてみたけど、やっぱりコンパイルできんかった。
Flexとかだとまた違う使い方なのかな>FocusManagerクラス