使用events

使用events
在flex中使用event需要二步,你需要定义一个函数或者类方法来处理事件
可以通过addEvent
<?xml version="1.0"?>
<!-- events/SimpleEventHandler.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="initApp();">
<mx:Script><![CDATA[
 import mx.controls.Alert;
 private function initApp():void {
  b1.addEventListener(MouseEvent.CLICK, myEventHandler);
 }
 private function myEventHandler(event:Event):void {
  Alert.show("An event occurred.");
 }
]]></mx:Script>
<mx:Button id="b1" label="Click Me"/>
</mx:Application>
也可以采用
<?xml version="1.0"?>
<!-- events/SimplerEventHandler.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Script><![CDATA[
 import mx.controls.Alert;
 private function myEventHandler(event:Event):void {
  Alert.show("An event occurred.");
 }
]]></mx:Script>
<mx:Button id="b1" label="Click Me" click="myEventHandler(event)"/>
</mx:Application>
上面的二中方法是一样的,但是建议采用addEventListener的方式


专门化Event对象
添加事件的方式通过参数传入
function myEventListener(e:Event):void;

import mx.event.ToolTip
function myEventListener(e:ToolTipEvent):void

访问currentTarget属性
currentTaget属性就是事件关联的组件

注册事件处理
1、定义处理函数           
 <mx:tag_name event_name="handler_function"/>
2、使用addEventListener方法注册 
 comonentInstance.addEventListener(
 event_typ:String,
 event_listener:Function,
 user_capture:Boolean,
 priority:int,
 weakRef:Boolean)

给处理函数增加参数
由于addEventListener已经确定量4个参数,所以无法在添加参数,那可以在处理函数上添加参数
<mx:Script>
public function addListeners():void {
b1.addEventListener(MouseEvent.CLICK,clickListener);
}
public function clickListener(e:MouseEvent, a:String):void { ... }
</mx:Script>
<mx:Button id="b1"/>  


手动dispatch事件
可以通过组件的dispatchEvent方法手动派发事件

事件传播
当事件产生以后,有3个阶段,按照如下顺序进行
capturing
targeting
bubbling

capturing phase(捕获阶段)
在捕获阶段,flex检测显示列表中事件祖先,看那个注册了事件监听,flex从根组件开始,逐级遍历显示列表到直接目标对象
在大多数情况下,根组件主要是Stage,SystemManager,Application,
例如,如果你有一个包含TitleWindow容器的Panel容器,结果如下
application
    pannel
        TitleWindow
            Button      
当在button上发生click事件时,将发生如下步骤
1、检查application的click事件监听器
2、检查panel的click事件监听其
3、检查TitleWindow的click事件监听
当捕获阶段,flex更换currentTarget属性到当前的节点,current属性关联到事件对象
缺省的在捕获阶段,容器没有监听,缺省的use_capture参数是false,唯一一个方式就是在addEventListener的时候传递
参数为true
myPanel.addEventListener(MouseEvent.MOUSE_DOWN,clickHandler,true);
如果你在mxml中定义,采用默认的false,无法修改
targeting阶段
在定位阶段,flex执行事件派发
bubbling阶段
在bubbling阶段,flex执行事件的祖先,flex派发直接父类,继续到根空间,这个也捕获相反

    
3、创建一个事件处理类,将组件注册到事件处理类上


探索实践的结构
你可以决定拟使用时间的那个阶段,采用eventPhase属性,这个属性包含了下面的int值
1 - capturing phase(CAPTURING_PHASE)
2 - Targeting phase(AT_TARGET)
3 - Bubbling phase(BUBBLING_PHASE)

事件优先级
一个事件你可以注册多次,flex注册的顺序是通过addEventListener的顺序调用的
addEventListener的第四个参数就是优先级,默认为0,首先执行高的,然后执行低的

使用子类

按键事件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值