Flex编程注意之自动获取焦点、监听全局键盘事件
需求如下:
当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工程中添加Module的方法是:在FlashBuilder中右键工程目录->Porperties->Flex Modules, 然后就可以add/edit/remove需要的module了,
但问题 是无论添加多少module都要点击add按钮一个一个添加! 像我们的项目一个demo就用了好几十个module,一个一个添加可要烦死了
网上搜‘批量添加module&rsquo ......
http://www.k-zone.cn/zblog/post/flex-compiler-parameter.html
下面的列表提供了mxmlc的一些可选参数:
属性
描述
accessible=true|false
是否具有可理解性
actionscript-file-encoding
设置文件编码
advanced | mxmlc -help advanced
检索mxmlc高级参数
allow-source-path-overlap=true|false
验证source-pat ......
http://www.k-zone.cn/zblog/post/flex-compiler-parameter.html
下面的列表提供了mxmlc的一些可选参数:
属性
描述
accessible=true|false
是否具有可理解性
actionscript-file-encoding
设置文件编码
advanced | mxmlc -help advanced
检索mxmlc高级参数
allow-source-path-overlap=true|false
验证source-pat ......