首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Flex 3键盘事件处理

Flex 3键盘事件处理
EN

Stack Overflow用户
提问于 2009-07-31 15:14:52
回答 3查看 7K关注 0票数 2

我想安排一些事情,以便在flex应用程序中有一系列键盘事件处理程序,当按键事件发生时会查询所有这些事件处理程序。基本上,当可视组件出现在屏幕上时,它是处理按键事件的候选组件。类似这样的代码(显然这是伪代码):

代码语言:javascript
复制
<application handles_keys="F5, F6">
    <tabGroup>
        <tab1 handles_keys="pgup, pgdn">
            <control handles_keys="0,1,2,3,4,5,6,7,8,9" />
        </tab1>
        <tab2 handles_keys="pgup, left, right"/>
    </tabGroup>
</application>

我编写了一个类,它将以我想要的方式响应关键事件,那么我如何注册这个类的一个或多个实例以获得我想要的结果呢?还要注意,在某些情况下,此类应该接收通常由UI组件处理的事件。Tab键是主要的例子;在一些情况下,即使焦点在文本字段上,我也希望我的key down事件处理程序触发。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-09-09 22:15:20

正确的方法是使用全局键盘事件管理器,在调用应用程序的creationComplete事件时将其作为按键侦听器添加到舞台上。然后为每个按键或其组合分发域事件。遗憾的是,按组件过滤的模型不起作用。

我将把这个应用程序移植到凯恩戈姆框架,一旦我完成了,它应该会工作得很好。

票数 1
EN

Stack Overflow用户

发布于 2009-07-31 20:55:44

按照现在设置伪代码的方式,您必须子类化所有不同的容器,并为每个容器添加一个handles_key属性。您可能希望将该功能外部化到一个单独的类中,如下所示:

代码语言:javascript
复制
<KeyHandler target="{tab1}" handlesKeys="pgup,left,right"/>

至于实际捕获事件,您需要在您想要侦听的UIComponent上添加一个KeyboardEvent.KEY_DOWN侦听器。您还需要将addEventListener()useCapture参数设置为true。这将允许您捕获事件并防止它,而不是事件命中对象并冒泡。

代码语言:javascript
复制
target.addEventListener(KeyboardEvent.KEY_DOWN, target_onKeyDown, true);

target_onKeyDown事件中,检查要处理的某个键是否匹配,如果匹配,则根据需要调用event.stopImmediatePropagation()event.preventDefault()

Flex 3语言参考很好地解释了事件传播和键盘事件:

http://livedocs.adobe.com/flex/3/langref/flash/events/Event.html

票数 2
EN

Stack Overflow用户

发布于 2009-07-31 21:17:53

  1. 将显示的对象添加到屏幕时,然后开始侦听分段键盘事件
  2. 从屏幕中删除对象时删除键盘事件侦听器
  3. on keyboard events筛选所需的事件:)

您需要的Canvas类的代码应该如下所示:

代码语言:javascript
复制
class MyCanvas extends Canvas
{

   public function MyCanvas(){
       super();
   }

   override protected function createChildren():void{
       super.createChildren();
       this.systemManager.stage.addEventListener(KeyboardEvent.KeyUp, onKeyUpHandler);
   }

   private function onKeyUpHandler(e:KeyboardEvent):void{
       // handle your code

       switch(e.charCode){
           case Keyboard.1:
           case Keyboard.2:
           case Keyboard.3:
           case Keyboard.4:
           case Keyboard.5:
           case Keyboard.6:
           case Keyboard.7:
           case Keyboard.8:
           case Keyboard.9:{
                   // do my stuff
                   break;
                 }
            case Keyboard.F1:{
                   // do other stuff
                   break;
                 }

           }

       }

   }   

   public function destroy():void{
       //don't forget to remove listeners for stupid flash garbage collector
       this.systemManager.stage.removeEventListener(KeyboardEvent.KeyUp, onKeyUpHandler);
   }

}

忽略任何拼写错误:D我是根据自己的想法编写代码的:)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1213110

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档