使用事件监听器
当我们开发Adob Flex程序时,事件处理是其中最基本也是最重要的一项任务。事件让我们知道在一个Flex程序发生了一些事情。他们可以由用户设备(如鼠标,键盘)产生,或者是外部输入,如一个网络服务调用的返回。当界面或是组件的生命周期发生变化时也变引发事件,例如一个组件的创建或销毁,或是组件的调整。
我们可以在我们的代码中使用事件监听器来处理这些事件。事件监听器是我们为了处理特定事件而编写的函数或是类的方法。他们也被称之为事件处理器。
在这一节我们将会显示如何使用一个事件监听器。我们将会学习如何为一个Button控件编写一个事件监听器,并且学习如何使用两种不同的方法将这个监听器与Button的click事件相关联。
设置工程
在我们开始这一节之前,首先要确保我们完成了下面的任务:
创建了Lessons工程
打开自动编译选项
创建一个简单的用户界面
我们决定为我们的在线商店创建一个简单的货币转换器。我们希望用户可以指定美元数量,点击按钮后得到相应的日元数量。第一步是要设计一个简单的用户界面。
1 在浏览视图中选择Lessons工程,创建一个名为Events.mxml的新程序文件。
2 将Event.mxml程序设置为默认编译的程序文件。
3 在MXML编辑器的设计模式中,向布局视图中拖放一个Panel容器,并且设置如下的属性:
Title: Currency Converter
Width: 450
Height: 150
X: 20
Y: 20
4 向Panel容器中添加两个Label控件,一个TextInput控件以及一个Button控件。
5 安排控件,最终的结果如下图所示:
6 选择第一个Label控件,将其text属性设置为Price in Dollars。
7 选择TextInput控件,将其id属性设置为txtPrice。
8 选择按钮控件并设置如下的属性:
ID: btnConvert
Label: Convert to Yen
9 选择第二个Label控件,执行如下的操作:
清除他的Text属性
将其id属性设置为lblResult
10 设置控件的位置,最终的布局如下图所示:
11 切换到代码模式检测Flex Builder生成的代码。
代码清单如下:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="
http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Panel x="20" y="20" width="450" height="150" layout="absolute"
title="Currency Converter">
<mx:Label x="25" y="37" text="Price in Dollars"/>
<mx:Label x="120" y="65" id="lblResults"/>
<mx:TextInput x="120" y="35" id="txtPrice"/>
<mx:Button x="290" y="35" label="Convert to Yen" id="btnConvert"/>
</mx:Panel>
</mx:Application>
12 保存文件。
编写一个事件监听器
下一步,我们将会为我们的按钮编写一个事件监听器。我们希望这个事件监听器由一个可以计算并且显示指定美元转换为日元的ActionScript函数组成。
1 切换到代码模式并且在<mx:Application>标签后放置插入点。
2 添加<mx:Script>标签。
3 输入下面的CDATA结构:
public function convertCurrency():void {
var rate:Number = 120;
var price:Number = Number(txtPrice.text);
if (isNaN(price)) {
lblResults.text = "Please enter a valid price.";
} else {
price = price * rate;
lblResults.text = "Price in Yen: " + String(price);
}
}
关键字public指定了这个函数的作用域。在这个例子中,这个函数在我们整个代码中均可见。关键字void指定了这个函数的返回类型。所有的ActionScript函数都应指定一个返回类型。convertCurrency函数并没有返回任何值。
用户输入的价格,txtPrice.text,是作为数字的情况,然后进行验证来保证用户输入的为一个数字。如果价格为一个数字,就会执行计算过程,并且将结果返回为一个字符串在lblResult控件中进行显示。
在一个真正的程序中,汇率的值应是运行时通过调用一个网络服务来进行设置。
4 保存文件。
将监听器与MXML事件相关联
将监听器与一个事件相关联,或者是说是注册,就意味着在我们的程序中包含通报由一个特定的源引发特定类型的事件的监听器。对于我们的程序而言,我们希望事件监听器可以通报按钮的点击事件。当事件发生时,监听器执行货币计算并且显示结果。
注册监听器的一个方法就是将其指定为<mx:Button>标签的click属性的值。
我们也可以使用ActionScript来注册监听器。
1 在设计模式中,选择Button控件并且在属性视图的On Clcik test输入框中输入convertCurrency()。
2 保存文件,待到编译完成后运行程序。
3 测试运行程序。
将监听器与一个ActionScript事件相关联
我们使用ActionScript来将监听器与一个特定的事件相关联,例如鼠标点击。当这些事件发生时,监听器就会通报并且运行。
1 切换到代码模式。
2 删除<mx:Button>标签中的click属性的值。
3 在我们的convertCurrency事件监听器的参数列表中声明一个MouseEvent类型参数,或者是MouseEvent类的一个子类。
public function convertCurrency(e:MouseEvent):void {
在这个例子中,这个监听器函数带有一个flash.Events.MouseEvent类型的对象,他是Event类的一个子类。当一个监听器函数调用时,Flex隐式的创建一个MouseEvent对象并且传递给函数。所以,在我们事件监听器函数的参数列表中声明一个MouseEvent对象是一个很好的习惯。
4 在convertCurrency函数中输入下面的代码:
public function createListener():void {
btnConvert.addEventListener(MouseEvent.CLICK, convertCurrency);
}
当用户点击按钮时,convertCurrency事件监听器就会被通报发生了事件。监听器函数执行货币运算并且显示结果。
脚本块代码如下:
<mx:Script>
<![CDATA[
import flash.events.MouseEvent;
public function createListener():void {
btnConvert.addEventListener(MouseEvent.CLICK, convertCurrency);
}
public function convertCurrency(e:MouseEvent):void {
var rate:Number = 120;
var price:Number = Number(txtPrice.text);
if (isNaN(price)) {
lblResults.text = "Please enter a valid price.";
} else {
price = price * rate;
lblResults.text = "Price in Yen: " + String(price);
}
}
]]>
</mx:Script>
5 在<mx:Application>标签中,输入下面的属性,这样就地调用createListener()函数,并且在程序创建之后就会立刻注册事件监听器。
creationComplete="createListener();"
最终的程序代码如下:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="
http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="createListener();">
<mx:Script>
<![CDATA[
import flash.events.MouseEvent;
public function createListener():void {
btnConvert.addEventListener(MouseEvent.CLICK, convertCurrency);
}
public function convertCurrency(e:MouseEvent):void {
var rate:Number = 120;
var price:Number = Number(txtPrice.text);
if (isNaN(price)) {
lblResults.text = "Please enter a valid price.";
} else {
price = price * rate;
lblResults.text = "Price in Yen: " + String(price);
}
}
]]>
</mx:Script>
<mx:Panel x="20" y="20" width="450" height="150" layout="absolute"
title="Currency Converter">
<mx:Label x="25" y="37" text="Price in Dollars"/>
<mx:Label x="120" y="65" id="lblResults"/>
<mx:TextInput x="120" y="35" id="txtPrice"/>
<mx:Button x="290" y="35" label="Convert to Yen" id="btnConvert"/>
</mx:Panel>
</mx:Application>
6 保存文件,编译完成后运行。
相关推荐
在Java中,使用事件监听器的步骤大致如下: 1. **创建监听器类**:你需要创建一个类,并实现相关事件监听器接口。例如,如果你要处理鼠标事件,可以创建一个类实现MouseListener接口。 ```java public class ...
事件监听器的实现方式有多种,本篇文章将介绍四种常见的事件监听器实现方式:自身类作为事件监听器、外部类作为事件监听器、匿名内部类作为事件监听器和内部类作为事件监听器。 1. 自身类作为事件监听器 在这个...
在Android开发中,事件监听器(Event Listeners)是实现用户交互和响应各种事件的关键机制。标题提到的“android 外部类作为事件监听器类”是指将一个非匿名类(外部类)作为事件处理的对象,这在某些情况下可能是...
当你将一个类用作事件监听器时,你已经设置好一个特定的事件类型,它会用该类进行监听。接下来的操作是:一个匹配的监听器必须被加入到该组件中 组件被创建之后,可以在组件上调用如下方法来将监听器与它联系起来 ...
在Android开发中,全局事件监听器是一种非常实用的设计模式,它允许开发者在整个应用程序范围内监听特定的事件,而无需在每个需要响应的类中都添加监听代码。标题中的"android全局事件监听器"指的是一个实现此类功能...
在传统的事件监听器中,我们通常使用`addEventListener`方法添加事件处理函数,如以下示例所示: ```javascript document.addEventListener("click", fn, false/true); ``` 这里的第三个参数是一个布尔值,用来...
2. 对某个源注册一个监听器,此源便成为一个事件源,当事件源上发生某一个动作时,监听器的某个方法将会被调用执行,在执行事件监听器的这个方法时,同时会把事件监听对象传递给此方法,开发人员在监听器中可以拿到...
2. 事件监听器的实现应该遵循单一职责原则,避免将多个事件处理方法放在同一个事件监听器中。 3. 事件源应该提供注册事件监听器的方法,以便事件监听器可以被正确地注册。 Java监听器是Java编程中的一种重要设计...
Servlet事件监听器和JSP是Java Web开发中的重要组成部分,它们在构建动态网站时起着核心作用。Servlet事件监听器允许开发者对特定的Servlet容器事件做出反应,而JSP则是用于创建动态网页的简便方式。这里我们将深入...
当事件源(熊孩子)发生某个事件(洗手前的行为)时,就会创建事件对象(RemindWashingHandsEvent),随后触发事件监听器(RemindListener)的响应(提醒操作)。 更具体的实现可以参考Kid类和WashingHandsListener...
本文将深入探讨Java Event Bus的原理、应用场景以及如何使用事件监听器来实现组件间的解耦。 1. **什么是Event Bus** Event Bus是一种设计模式,它充当应用程序中不同组件之间的通信桥梁。通过发布和订阅机制,...
本文将详细解析Java事件处理机制中事件监听器的四种实现方式:自身类作为事件监听器、外部类作为事件监听器、匿名内部类作为事件监听器以及内部类作为事件监听器。 1. **自身类作为事件监听器** 在自身类作为事件...
事件监听器是Android开发中的重要概念,用于捕捉和响应用户在界面上的各种交互操作。在Android中,事件监听器主要用于处理UI控件的点击、触摸、键盘输入等事件。本篇将详细介绍EditText的事件监听。 首先,我们来看...
【Qt全局鼠标、键盘事件监听器库】是一个用于在Windows和Linux系统上实现跨平台的全局鼠标和键盘事件捕获的库。这个库基于流行的Qt框架,为开发者提供了一个便捷的方式来监听并处理系统的输入事件,无论是来自应用...
Java Swing 常用事件和监听器接口 Java Swing 是一个功能强大的图形用户界面(GUI)工具包,它提供了许多事件和监听器接口,帮助开发者更好地处理用户交互。下面是 Java Swing 中常用的事件和监听器接口。 1. ...
默认情况下,事件处理是采用冒泡的方式进行,除非在添加事件监听器时明确指定使用捕获阶段。 在IE浏览器中,没有标准的捕获事件,只有冒泡事件处理。对于其他大多数现代浏览器,它们支持W3C标准,允许开发者在捕获...
"匿名内部类作为事件监听器"这一主题主要涉及如何在不创建独立类的情况下为UI组件如按钮(Button)添加事件监听功能。下面我们将深入探讨这个话题。 首先,Android中的事件处理通常基于监听器接口。例如,`...
工具方面,Windchill提供了一套完整的开发环境,如Windchill ProjectLink和Windchill Workgroup Manager,它们支持事件监听器的创建、部署和测试。此外,IDE如Eclipse,配合Windchill插件,可以方便地进行源代码的...
本示例通过一个简单的Java Swing程序展示了如何使用监听器处理事件。理解并掌握监听器的概念及其使用方式对于Java GUI编程至关重要。此外,该示例还演示了如何创建和使用内部类作为监听器,这对于实际开发中处理复杂...
如果事件处理逻辑较为复杂,或者需要将事件处理逻辑与UI组件的定义分开,则可以使用外部类作为事件监听器。这种方式下,创建一个独立的类来实现事件监听器接口,并在主类中创建该类的对象作为事件监听器注册。 **...