有两种操作将发出【FocusEvent.FOCUS_IN】事件:
1. Tab键盘操作
2. 鼠标点击
TabChildren:确定对象的子项是否支持 Tab 键。
当TabChildren=False的时候,Tab键盘操作将不会进入子项。
与此同时,TabChildren还影响鼠标点击触发的【FocusEvent.FOCUS_IN】事件。
通过例子来理解:
例子1: 鼠标点击能够触发【FocusEvent.FOCUS_IN】事件的例子。
package {
import flash.display.Sprite;
import flash.events.FocusEvent;
public class test extends Sprite {
public function test() {
var child:Sprite = new CustomSprite();
addChild(child);
this.addEventListener(FocusEvent.FOCUS_IN, focusInHandler);
this.addEventListener(FocusEvent.FOCUS_OUT, focusOutHandler);
this.addEventListener(FocusEvent.KEY_FOCUS_CHANGE, keyFocusChangeHandler);
this.addEventListener(FocusEvent.MOUSE_FOCUS_CHANGE, mouseFocusChangeHandler);
//这句话是重点
this.tabChildren=false;
}
private function focusInHandler(event:FocusEvent):void {
trace("focusInHandler: ");
}
private function focusOutHandler(event:FocusEvent):void {
trace("focusOutHandler: ");
}
private function keyFocusChangeHandler(event:FocusEvent):void {
trace("keyFocusChangeHandler: ");
}
private function mouseFocusChangeHandler(event:FocusEvent):void {
trace("mouseFocusChangeHandler: ");
}
}
}
import flash.display.Sprite;
import flash.events.MouseEvent;
class CustomSprite extends Sprite {
private var size:uint = 50;
private var bgColor:uint = 0x00CCFF;
public function CustomSprite() {
buttonMode = true;
addEventListener(MouseEvent.CLICK, clickHandler);
draw(size, size);
}
private function draw(w:uint, h:uint):void {
graphics.beginFill(bgColor);
graphics.drawRect(0, 0, w, h);
graphics.endFill();
}
private function clickHandler(event:MouseEvent):void {
var target:Sprite = Sprite(event.target);
//当TabChildren=false的时候,只有通过下面的语句才能触发【FocusEvent.FOCUS_IN】事件。
//否则不能触发。
stage.focus = target;
}
}
例子2:当吧stage.focus=target这句话注释掉后,鼠标点击将不能够触发【FocusEvent.FOCUS_IN】事件。