FocusEvent与buttonMode的关系

  • 本站文章除注明转载外,均为本站原创或者翻译。
  • 本站文章欢迎各种形式的转载,但请18岁以上的转载者注明文章出处,尊重我的劳动,也尊重你的智商;
  • 本站部分原创和翻译文章提供markdown格式源码,欢迎使用文章源码进行转载;
  • 本博客采用 WPCMD 维护;
  • 本文标题:FocusEvent与buttonMode的关系
  • 本文链接:http://zengrong.net/post/1351.htm

这两个家伙有关系么?

当然有,而且还挺紧密的。

它们之间的关系就是:

如果一个Sprite不开启buttonMode,那么就不会有FocusEvent事件发出

当然,TextField虽然没有buttonMode,也会有FocusEvent。

那么SimpleButton会如何?我没试,懒得试了……

把下面的代码中的 _sprite.buttonMode = true; 一行注释掉,可以看到(或者说看不到?)效果。

package
{
import flash.display.Sprite;
import flash.events.Event;
import flash.events.FocusEvent;
import flash.events.MouseEvent;
import flash.text.TextField;

public class Focus extends Sprite
{
    public function Focus()
    {
        getSprite();
        getSprite(200, 0);

        var _tf:TextField = new TextField();
        _tf.type = 'input';
        _tf.border = true;
        _tf.x = 200;
        _tf.y = 200;
        _tf.addEventListener(FocusEvent.FOCUS_IN, handler_focusin);
        _tf.addEventListener(FocusEvent.FOCUS_OUT, handler_focusout);
        addChild(_tf);

    }

    private var _sprite:Sprite;

    private function getSprite($x:int=0, $y:int=0):Sprite
    {
        var _sprite:Sprite = new Sprite();
        _sprite.graphics.beginFill(0);
        _sprite.graphics.drawRect(0,0,100,100);
        _sprite.graphics.endFill();
        _sprite.x = $x;
        _sprite.y = $y;
        _sprite.useHandCursor = true;
        _sprite.buttonMode = true;
        this.addChild(_sprite);
        _sprite.addEventListener(FocusEvent.FOCUS_OUT, handler_focusout);
        _sprite.addEventListener(FocusEvent.FOCUS_IN, handler_focusin);
        _sprite.addEventListener(MouseEvent.CLICK, handler_click);
        return _sprite;
    }

    private function handler_focusout(evt:FocusEvent):void
    {
        trace('focusout,target:', evt.target, ',relatedTarget:', evt.relatedObject);
    }

    private function handler_focusin(evt:FocusEvent):void
    {
        trace('focusin,target:', evt.target, ',relatedTarget:', evt.relatedObject);
    }

    private function handler_click(evt:MouseEvent):void
    {
        trace('click');
    }
}
}