详细请看:http://www.k-zone.cn/zblog/post/flex-air-auto-set-focus.html
这是《Flex第一步》QQ群里面一个朋友问我的问题,特此拿出分享一下。或许问题比较简单,还是将其记录一下比较好。
需求如下:
当AIR启动后,监听全局键盘事件,即this.addEventListener( KeyboardEvent.KEY_DOWN, keydownHandler );
运行后效果:
当AIR运行后,虽然正确监听了KeyboardEvent.KEY_DOWN event,但是必须要鼠标点击一下AIR才可以获取keydownHandler。
原因:
1、keydownHandler的获取需要监听的对象获得焦点,当mouse click AIR后,则相当于获取焦点。
2、只有当监听的对象获取焦点后,才能出接收到KeyboardEvent.KEY_DOWN event。
因此问题根结:
如何让监听对象自动获取焦点。
解决方案:(步骤)
1、
this.dispatchEvent( new MouseEvent( MouseEvent.CLICK ));
通过以上的方式即可让程序“自动点击”dispatchEvent的对象。
2、
获取焦点方式:
this.stage.focus = this;
片段代码如下:
<s:WindowedApplication
xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/halo"
creationComplete="createCompleteHandler (event)">
private function createCompleteHandler( event : FlexEvent ) : void {
//监听ouseEvent.CLICK event
this.addEventListener( MouseEvent.CLICK, clickHandler );
//监听KeyboardEvent.KEY_DOWN
this.addEventListener( KeyboardEvent.KEY_DOWN, keyDownHandler );
}
private function clickHandler( event : MouseEvent ) : void {
this.stage.focus = this;
}
private function clickHandler( event : KeyboardEvent ) : void {
//TO DO
}
自动触发mouse click的代码:(以下代码在this.addEventListener( KeyboardEvent.KEY_DOWN, keyDownHandler );的下面)
var timer : Timer = new Timer( 100, 1 );
timer.addEventListener( TimerEvent.TIMER_COMPLETE, function ( event : TimerEvent ) : void {
event.target.stop();
dispatchEvent( new MouseEvent( MouseEvent.CLICK ));
});
timer.start();
之所以用timer来处理是因为当create complete后,直接使用dispatchEvent会发现stage尚未赋值,因此需要延时一段时间处理。
注意:以上代码适用于AIR,在Flex里面按照如下写法仍旧无法获取KeyboardEvent.KEY_DOWN event。
Flex里面是如何自动获取焦点、监听全局键盘事件的呢?
原因:
Flex由于有浏览器的包裹,因此当打开浏览器后,由于SWF尚未获取焦点,因此就算自动获取了焦点(dispatchEvent( new MouseEvent( MouseEvent.CLICK ));)也是没有意义的。
解决方法:
在嵌入SWF的html里面加入如下的功能:
<body onload="document.getElementById('swf id').focus()">
这句话的含义:当onload完毕后,自动设定SWF为焦点状态。
最后再按照AIR的写即可完成自动获取焦点、监听全局键盘事件。
由于代码比较少,因此就不放上demo了,以上的片段代码足以说明问题:)
分享到:
相关推荐
Flex 编程注意之自动获取焦点、监听全局键盘事件
flex事件flex事件flex事件flex事件flex事件
Flex 4 高级编程Flex 4 高级编程Flex 4 高级编程Flex 4 高级编程
《Adobe Flex 3 高级编程》官网源码 第28章有619兆而没有上传
Flex拖拽编程详解,Flex拖动方法。
Flex白皮书 Flex cookbok Flex编程指南 Flex设计模式等
Adobe Flex 3 高级编程 源码
flex监听浏览器关闭事件,完成对于浏览器关闭事件的监听。以及弹出相应的关闭提示
flex+socket编程实例,提供源码参考,请查看
课程设计,附实验报告。使用Flex&Bison;生成的DLL文件用作计算器后端,使用Flask框架和HTML CSS做前端。
flex3 programing,中文版分享于同僚~~
富士PLC编程软件FUJI NB系列编程软件Flex PC Programmer V2.1.0.28中英文版及其编程手册内含富士PLC_SPB编程软件使用手册,以及富士N系列PLC编程手册FLEX PC Programmer是FLEX-N系列用的Windows版程序开发工具...
编程基础语法 流程控制语句 控制语句和数据类型 面对对象编程 静态常量继承和接口 数组和类型转换
最详细的FLEXA编程教程PPT课件.pptx
FLEX开发入门的一本好书。讲解了actionscript的使用。
flex+AS3编程规范flex+AS3编程规范flex+AS3编程规范flex+AS3编程规范flex+AS3编程规范flex+AS3编程规范flex+AS3编程规范flex+AS3编程规范
flex事件运行流程
flexa 编程,供SMT行业同仁使用。
Flex 编程小技巧 1. 复制内容到剪贴板 1. System.setClipboard(strContent); 2. 复制一个 ArrayCollection 1. //dummy solution( well, it works ) 2. var bar:ArrayCollection = new ArrayCollection(); 3. for ...