Flex 编程注意之自动获取焦点、监听全局键盘事件
这是《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 keyDownHandler( 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了,以上的片段代码足以说明问题:)
来源:http://www.jb51.net/article/19103.htm
分享到:
相关推荐
### Flex监听浏览器关闭事件 在Web开发中,有时我们需要对用户关闭浏览器窗口的行为进行监听,并在用户尝试关闭页面时给出提示或执行某些操作。本文将详细介绍如何利用Flex结合JavaScript实现这一功能。 #### 1. ...
在编程领域,特别是游戏开发、用户交互界面设计或者任何需要响应用户输入的场景,键盘事件监听是一个关键的技术。本文将详细讲解如何在ActionScript 3(AS3)中实现键盘事件监听,以便当用户按下键盘上的键时,屏幕...
《坦克大战:基于FLEX开发的关键键盘事件》 在计算机游戏开发领域,坦克大战是一款深受玩家喜爱的经典游戏,而利用Adobe Flex技术进行开发可以为这款游戏带来全新的交互体验。Flex是基于ActionScript 3.0的开放源...
felx3怎样监听MneuBar 并进行menu的展示和隐藏,以及menu的相互切换
在本文中,我们将深入探讨基于Java的Flex事件监听机制,这是一种强大的工具,允许开发者响应用户交互和应用程序状态的变化。Flex事件模型是ActionScript 3.0的核心组成部分,它与Java的事件处理方式有所不同,但可以...
Flex提供了完整的事件模型来处理触摸事件,如`TouchEvent`类,包括`touchDown`、`touchUp`等事件,这些事件在软键盘设计中至关重要。 4. **自定义键盘布局**: 软键盘的可自定义性体现在布局和功能上。开发者可以...
标题中的“构建Flex自动验证框架”指的是在Flex应用程序开发中创建一个自动化验证系统。Flex是一种基于ActionScript的开源框架,用于构建富互联网应用程序(RIA)。自动验证框架是开发者用来确保用户输入数据有效性...
### Flex事件机制详解 #### 一、事件简介 在Flex框架中,事件是应用程序与用户交互的核心机制之一。它可以由多种触发源启动,包括但不限于用户的输入(如键盘按键、鼠标点击)、外部数据加载完成(例如WebService...
Flex(Fast Lexical Analyzer Generator)是一款广泛使用的开源工具,用于自动生成词法分析器,尤其在C和C++编程环境中非常常见。本教程将深入讲解如何使用Flex来创建一个词法分析器,并结合提供的资源进行实践。 ...
1. **监听事件**:控件可能通过监听文本改变的事件(如TextChangeEvent.LOAD或TextChangeEvent.CHANGE)来检测文本内容的变化。 2. **计算文本长度**:当文本内容更新时,控件会计算新的字符串长度,这可能涉及到...
- **事件模型**:基于观察者模式,事件源触发事件,事件监听器接收并处理事件。 - **事件类型**:包括鼠标事件、键盘事件、组件事件、数据事件等多种类型。 - **事件生命周期**:事件的派发、传播和处理过程,...
"flex事件"这个概念可能指的是与Flex布局相关的JavaScript事件或者是在Flex容器中发生的交互事件。然而,由于提供的信息较少,无法明确具体是指哪些特定的事件。下面,我将详细介绍Flex布局的基础知识以及可能与之...
本次资源就是针对一次编译原理实验,实验的内容就是用flex工具自动构造词法分析程序
2. **监听键盘事件**:使用`TextInput`组件的`keyUp`事件,当用户停止按键时触发提示逻辑。 3. **匹配输入**:比较用户输入的文本与数据模型中的项,找到匹配的提示。可以使用模糊搜索算法,如Levenshtein距离或...
在这个函数中,你可以访问事件对象来获取事件相关的数据或执行相应的操作。 6. **完整项目导入与运行** - 文件`ex3_03_starter.fxp`是一个Flex项目文件,通常包含了项目的所有源代码、资源和配置信息。要导入此...
- `AutoComplete.as`:这是AS3的源代码文件,通常包含了组件的核心逻辑,如数据处理、事件监听和自动完成算法。在这个组件中,可能会有对用户输入的监听,当用户在输入框中键入字符时,会触发自动填充候选词的功能...
在Flex中实现自动搜索功能,我们通常会利用事件监听和数据绑定来创建一个动态更新的下拉建议列表。 1. **事件监听**: 当用户在搜索框中输入时,我们需要监听`KeyboardEvent.KEY_DOWN`事件。每当用户按下键盘上的...
Flex中有多种内置事件类型,如`MouseEvent`(鼠标事件)、`KeyboardEvent`(键盘事件)、`FocusEvent`(焦点事件)和`UIComponentEvent`(UI组件事件)等。例如,`click`事件在用户点击按钮时触发,`change`事件在...
Flex控件事件是Adobe Flex应用程序开发中的核心概念,主要用于实现用户交互和组件间的通信。在Flex中,控件(或称为组件)是构建用户界面的基本元素,如按钮、文本框、列表等。当用户与这些控件进行交互时,如点击...