每一个组件在用户与它交互时都会广播事件。例如,当用户单击一个 Button 时,它会调度
MouseEvent.CLICK
事件;当用户选择 List 中的一个项目时,List 会调度 Event.
CHANGE
事件。当组件发生重要事情时也会引发事件,例如,当 UILoader 实例完成内容加载时,会生成一个
Event.COMPLETE
事件。若要处理事件,您需要编写在该事件被触发时需要执行的 ActionScript 代码。
组件的事件包括该组件所继承的任何类的事件。这意味着,所有 ActionScript 3.0 用户界面组件都从 UIComponent 类继承事件,因为它是 ActionScript 3.0 用户界面组件的基类。若要查看某一组件广播的事件的列表,请参阅
《用于 Adobe® Flash® Professional CS5 的 ActionScript® 3.0 参考》
中该组件的类条目的“事件”部分。
有关 ActionScript 3.0 中事件处理的完整说明,请参阅
《ActionScript 3.0 编程》
。
关于事件侦听器
以下要点适用于 ActionScript 3.0 组件的事件处理:
-
所有事件均由组件类的实例广播。组件实例为“广播器”。
-
通过调用组件实例的
addEventListener()
方法,可以注册事件的“侦听器”。例如,下面这行代码向 Button 实例
aButton
添加了一个
MouseEvent.CLICK
事件的侦听器:
aButton.addEventListener(MouseEvent.CLICK, clickHandler);
addEventListener()
方法的第二个参数注册在该事件发生时要调用的函数的名称,即
clickHandler
。此函数也称作“回调函数”。
-
您可以向一个组件实例注册多个侦听器。
aButton.addEventListener(MouseEvent.CLICK, clickHandler1);
aButton.addEventListener(MouseEvent.CLICK, clickHandler2);
-
也可以向多个组件实例注册一个侦听器。
aButton.addEventListener(MouseEvent.CLICK, clickHandler1);
bButton.addEventListener(MouseEvent.CLICK, clickHandler1);
-
会将一个事件对象传递给该事件处理函数,该对象包含有关该事件类型和广播该事件的实例的信息。有关详细信息,请参阅
关于事件对象
。
-
在应用程序终止或您使用
removeEventListener()
显式删除侦听器之前,侦听器会一直保持活动状态。例如,下面这行代码删除
aButton
上
MouseEvent.CLICK
事件的侦听器:
aButton.removeEventListener(MouseEvent.CLICK, clickHandler);
关于事件对象
事件对象继承自 Event 对象类,它的一些属性包含了有关所发生事件的信息,其中包括提供事件基本信息的
target
和
type
属性:
属性
|
说明
|
type
|
表示事件类型的字符串。
|
target
|
对广播事件的组件实例的引用。
|
如果事件具有其他属性,则会在
《用于 Adobe® Flash® Professional CS5 的 ActionScript® 3.0 参考》
中该事件的类描述中列出。
事件对象是自动生成的,当事件发生时会将它传递给事件处理函数。
您可以在该函数内使用事件对象来访问所广播的事件的名称,或者访问广播该事件的组件的实例名称。您可以从实例名称访问其他组件属性。例如,下面的代码使用
evtObj
事件对象的
target
属性来访问
aButton
的
label
属性并将它显示在“输出”面板中:
import fl.controls.Button;
import flash.events.MouseEvent;
var aButton:Button = new Button();
aButton.label = "Submit";
addChild(aButton);
aButton.addEventListener(MouseEvent.CLICK, clickHandler);
function clickHandler(evtObj:MouseEvent){
trace("The " + evtObj.target.label + " button was clicked");
}
|
|
|