查看文章
 
as3 键盘事件监听应用处理
2008-01-18 11:22

1,问题: 在开发应用中,需要对键盘事件做监听,但是要根据 focus 焦点 不同而 是否需要做反应。例如当焦点在 场景地图 上,这时候的快捷键 起作用 ,而打开一个应用程序后例如聊天框,聊天这时候 虽然也是键盘 事件 但我们不希望触发执行快捷键判断 之类的 。

键盘事件的监听 是要对stage做监听,那么当上述聊天情况发生时,聊天应用存在于stage中,不可避免的触发判断。

如源代码:

   stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler,false,0,true);
    stage.addEventListener(KeyboardEvent.KEY_UP, keyUpHandler,false,0,true);

只要稍改一下 转移stage 把键盘事件的监听具体到某个对象上, 就不同了,细节决定成败 ,效率 ;]

测试代码如下

package {
    import flash.display.Sprite;
    import flash.events.*;
   
    import org.aswing.ASColor;
    import org.aswing.AsWingManager;
    import org.aswing.AssetPane;
    import org.aswing.BorderLayout;
    import org.aswing.GridLayout;
    import org.aswing.JFrame;
    import org.aswing.JLabel;
    import org.aswing.JLoadPane;
    import org.aswing.JPanel;
    import org.aswing.border.LineBorder;

    public class KeyboardEventExample extends Sprite {
        private var bgColor:uint = 0x00CCFF;
        private var size:uint = 80;
  

        public function KeyboardEventExample() {
            var child:Sprite = new Sprite();
            child.graphics.beginFill(bgColor);
            child.graphics.drawRect(0, 0, size, size);
            child.graphics.endFill();
            addChild(child);
            stage.focus = child;
            child.addEventListener(MouseEvent.CLICK,__setFoucs);
            child.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler);
            child.addEventListener(KeyboardEvent.KEY_UP, keyUpHandler);
           
            initAswing();
        }
        private function initAswing():void{
    AsWingManager.initAsStandard(this);
    var jf:JFrame = new JFrame();
    var pane:JPanel = new JPanel(new BorderLayout());
    var centerPane:JPanel = new JPanel(new GridLayout(6,12,1,1));
    pane.append(centerPane,BorderLayout.CENTER);
    pane.append(new JLabel("test"),BorderLayout.SOUTH);
    jf.setContentPane(pane);
    jf.setLocationXY(100,200);
    jf.setSizeWH(400,300);
    jf.show();
   }
   private function __setFoucs(e:MouseEvent):void{
    var child:Sprite = e.currentTarget as Sprite;
    stage.focus =child;
    //child.graphics.beginFill(bgColor);
    child.graphics.lineStyle(2,0xffbbf0,1);
            child.graphics.drawRect(0, 0, size, size);
   }
        private function keyDownHandler(event:KeyboardEvent):void {
            trace("keyDownHandler: " + event.keyCode);
            trace("ctrlKey: " + event.ctrlKey);
            trace("keyLocation: " + event.keyLocation);
            trace("shiftKey: " + event.shiftKey);
            trace("altKey: " + event.altKey);
        }

        private function keyUpHandler(event:KeyboardEvent):void {
            trace("keyUpHandler: " + event.keyCode);
        }
    }
}

效果:

当鼠标点击左面方块 后焦点在方块上 键盘监听 起作用,焦点移开,不起作用 。


类别:默认分类||添加到搜藏 |分享到i贴吧|浏览(1534)|评论 (0)
 
最近读者:
 
网友评论:
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
     

   
帮助中心 | 空间客服 | 投诉中心 | 空间协议
©2012 Baidu