Flex 4.6中ActionScript 3键盘事件无法注册的技术问询
Flex 4.6中ActionScript 3键盘事件无法触发的解决方案
嘿,太懂这种糟心的状况了——鼠标事件跑得顺顺当当,键盘事件却像凭空消失了一样,调试起来一头雾水!结合Flex 4.6的特性,我给你梳理几个最可能的原因和解决办法:
1. 焦点问题(90%的概率是这个!)
Flex组件默认必须获得焦点才能接收键盘事件,如果你的目标组件(比如Application本身或者内部控件)没拿到焦点,键盘事件根本传不过来。
解决办法:
在你的setup()函数里加上这两句,确保Application获得焦点:
private function setup():void { // 允许Application接收焦点 this.focusEnabled = true; // 强制把焦点设置到Application上 stage.focus = this; // 现在再注册键盘事件 this.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDownHandler); this.addEventListener(KeyboardEvent.KEY_UP, onKeyUpHandler); } private function onKeyDownHandler(e:KeyboardEvent):void { trace("按下了键:", e.keyCode); }
如果是子组件需要接收键盘事件,记得给子组件也设置focusEnabled="true",然后用FocusManager.setFocus(yourComponent)手动指定焦点。
2. 事件注册到了错误的目标上
如果你把键盘事件注册到了不可聚焦的容器(比如默认focusEnabled=false的mx:HBox、mx:VBox),那肯定收不到事件。
偷懒又靠谱的办法:
直接把键盘事件注册到stage上!Stage是全局的,只要你的Flex应用在浏览器/播放器里获得了焦点,Stage就能捕获所有键盘事件:
private function setup():void { stage.addEventListener(KeyboardEvent.KEY_DOWN, onStageKeyDown); } private function onStageKeyDown(e:KeyboardEvent):void { trace("Stage捕获到按键:", e.keyCode); }
3. 调试时定位问题的小技巧
你可以在updateFrame()里打印当前的焦点组件,看看是不是焦点跑到别的地方去了:
private function updateFrame():void { trace("当前焦点组件:", stage.focus ? stage.focus.name : "无焦点"); }
如果输出是"无焦点"或者某个你没预料到的组件,那焦点问题实锤了!
补全你的测试代码片段
你提供的KET.mxml代码不全,我帮你补全基础结构方便测试:
<?xml version="1.0"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" name="Key Events Test" backgroundColor="#000000" horizontalAlign="center" creationComplete="setup();" enterFrame="updateFrame();" paddingTop="20"> <mx:Script> <![CDATA[ import mx.managers.FocusManager; private function setup():void { this.focusEnabled = true; stage.focus = this; this.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown); } private function updateFrame():void { trace("当前焦点:", stage.focus); } private function onKeyDown(e:KeyboardEvent):void { trace("按下按键:", e.keyCode, String.fromCharCode(e.charCode)); } ]]> </mx:Script> <mx:Label text="按下任意键,查看控制台输出" color="#FFFFFF" fontSize="16"/> </mx:Application>
内容的提问来源于stack exchange,提问作者Vladimir Shevyakov
相关产品推荐
相关产品推荐

