Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1278481
  • 博文数量: 315
  • 博客积分: 10397
  • 博客等级: 上将
  • 技术积分: 3731
  • 用 户 组: 普通用户
  • 注册时间: 2007-03-07 21:21
文章分类

全部博文(315)

文章存档

2015年(10)

2014年(3)

2013年(2)

2012年(8)

2011年(8)

2010年(29)

2009年(59)

2008年(77)

2007年(119)

分类: Android平台

2013-07-25 00:33:43

转自:http://blog.csdn.net/yeohcooller/article/details/6784422 

1、自定义事件

2、自定义带参数的事件

        刚做了一个自定义事件,对于我们初学Flex的并且没有人交流的还是有点难度的。之前有过好多前辈写过关于Flex自定义事件的博文。也许对于很多新手理解上有点难度。这里我就简单的通俗的写下自定义事件。

1、

        自定义事件必须注意几点:

        (1)自定义事件通过继承Event类来实现。

        (2)自定义事件不可以自己触发,只能有系统事件派发。

        了解这两点后现在就可以开始自定义自己的事件了。

        首先我们新建一个ActionScript Class,这个Class继承flash.events.Event。

  1. package myEvent  
  2. {  
  3.     import flash.events.Event;  
  4.       
  5.     public class MyEvent extends Event  
  6.     {  
  7.         public static const MYEVENT:String = "myevent";  
  8.         public function MyEvent(type:String, bubbles:Boolean=false, cancelable:Boolean=false)  
  9.         {  
  10.             super(type, bubbles, cancelable);  
  11.         }  
  12.         override public function clone():Event{  
  13.             return new MyEvent(type,bubbles,cancelable);  
  14.         }  
  15.     }  
  16. }  
  17.  

然后可以创建一个Component,在里面随便添加容器和控件,在控件上面通过系统事件,比如MouseEvent,用来触发事件。注意,这个MouseEvent触发的事件里面通过this.dispatchEvent(evnet:Event)来派发出你自定义的事件。

  1.   
  2.          xmlns:s="library://ns.adobe.com/flex/spark"   
  3.          xmlns:mx="library://ns.adobe.com/flex/mx">  
  4.       
  5.           
  6.       
  7.       
  8.         [Event(name="myevent",type="myEvent.MyEvent")]  
  9.       
  10.       
  11.         
  12.             import myEvent.MyEvent;  
  13.               
  14.             private function clickHandle(event:MouseEvent):void{  
  15.                 this.dispatchEvent(new MyEvent("myevent",true,false));  
  16.             }  
  17.               
  18.         ]]>  
  19.       
  20.     
  21.              title="Show Customize Event"  
  22.              x="200" y="100">  
  23.         
  24.                   top="50" left="50" click="clickHandle(event)"/>  
  25.       
  26.   

        最后在创建的Flex工程里面引入这个Component,为这个component添加事件监听器。

  1.   
  2.                xmlns:s="library://ns.adobe.com/flex/spark"   
  3.                xmlns:mx="library://ns.adobe.com/flex/mx"   
  4.                xmlns:myms="component.*"  
  5.                minWidth="955" minHeight="600"  
  6.                 creationComplete="init()" xmlns:myComponent="myComponent.*">  
  7.       
  8.           
  9.       
  10.       
  11.         
  12.             import mx.controls.Alert;  
  13.               
  14.             import myEvent.MyEvent;  
  15.   
  16.             private function init():void{  
  17.                 component.addEventListener(MyEvent.MYEVENT,clickHandle);  
  18.             }  
  19.               
  20.             private function clickHandle(event:MyEvent):void{  
  21.                 Alert.show("The type of this event is "+event.type+"\nThe currentTarget is "+event.currentTarget+  
  22.                 "\nThe target is "+event.target);  
  23.             }  
  24.             private function clickHandleThis(event:MouseEvent):void{  
  25.                 Alert.show("The type of this event is "+event.type+"\nThe currentTarget is "+event.currentTarget+  
  26.                 "\nThe target is "+event.target);  
  27.             }  
  28.         ]]>  
  29.       
  30.       
  31.   
  32.  

2、

        自定义带参数的事件应该明白:

        (1)自定义事件继承Event时的构造函数里面带参数。

        (2)同样需要触发系统事件,然后派发自定义事件。

        新建一个ActionScript Class,这个Class继承flash.events.Event。

  1. package customEvent  
  2. {  
  3.     import flash.events.Event;  
  4.       
  5.     public class TransferData extends Event  
  6.     {  
  7.         public static const CUSTOMEVENT:String = "customevent";  
  8.         public var loginName:String;  
  9.         public var password:String;  
  10.         public function TransferData(type:String, loginName:String, password:String)  
  11.         {  
  12.             super(type);  
  13.             this.loginName = loginName;  
  14.             this.password = password;  
  15.         }  
  16.         override public function clone():Event{  
  17.             return new TransferData(type,loginName,password);  
  18.         }  
  19.     }  
  20. }  


然后创建component来设计并实现数据的传输和接受。

       DispatchData.mxml代码如下

  1.   
  2.          xmlns:s="library://ns.adobe.com/flex/spark"   
  3.          xmlns:mx="library://ns.adobe.com/flex/mx"  
  4.           creationComplete="init()">  
  5.       
  6.         [Event(name="customevent",type="customEvent.TransferData")]  
  7.       
  8.       
  9.           
  10.           
  11.           
  12.       
  13.       
  14.         
  15.             import customEvent.TransferData;  
  16.               
  17.             import mx.controls.Alert;  
  18.             private function init():void{  
  19.                 dispatchData.addEventListener(MouseEvent.CLICK,clickHandle);  
  20.             }  
  21.             private function clickHandle(event:MouseEvent):void{  
  22.                 if(loginName.text != "" && password.text != ""){  
  23.                     canDispatchData();  
  24.                 }else{  
  25.                     Alert.show("Please input the content,contain login name and the password!");  
  26.                 }  
  27.             }  
  28.             private function canDispatchData():void{  
  29.                 var loginEvent:TransferData = new TransferData("customevent",loginName.text,password.text);  
  30.                 this.dispatchEvent(loginEvent);  
  31.             }  
  32.         ]]>  
  33.       
  34.       
  35.           
  36.               
  37.                   
  38.               
  39.               
  40.                   
  41.               
  42.               
  43.           
  44.       
  45.  

ReceiveData.mxml代码如下

  1.   
  2.          xmlns:s="library://ns.adobe.com/flex/spark"   
  3.          xmlns:mx="library://ns.adobe.com/flex/mx">  
  4.       
  5.           
  6.       
  7.       
  8.           
  9.               
  10.                   
  11.               
  12.               
  13.                   
  14.               
  15.               
  16.           
  17.       
  18.  

LoginEvent.mxml代码如下

  1.   
  2.          xmlns:s="library://ns.adobe.com/flex/spark"   
  3.          xmlns:mx="library://ns.adobe.com/flex/mx"  
  4.          xmlns:component="component.*"  
  5.           creationComplete="init()"  
  6.            width="900" height="400">  
  7.       
  8.           
  9.       
  10.       
  11.         
  12.             import mx.controls.Alert;  
  13.             import customEvent.TransferData;  
  14.             private var loginName:String;  
  15.             private var password:String;  
  16.             private function init():void{  
  17.                 dispatch.addEventListener(TransferData.CUSTOMEVENT,dispatchData);  
  18.                 receive.addEventListener(MouseEvent.CLICK,receiveData);  
  19.             }  
  20.             private function dispatchData(event:TransferData):void{  
  21.                 loginName = event.loginName;  
  22.                 password = event.password;  
  23.                 Alert.show("loginName:"+loginName+"\npassword:"+password);  
  24.             }  
  25.             private function receiveData(event:MouseEvent):void{  
  26.                 receive.loginName.text = loginName;  
  27.                 receive.password.text = password;  
  28.             }  
  29.         ]]>  
  30.       
  31.       
  32.       
  33.  

在Flex工程里面引入component即可

  1.   
  2.                xmlns:s="library://ns.adobe.com/flex/spark"   
  3.                xmlns:mx="library://ns.adobe.com/flex/mx"  
  4.                xmlns:component="component.*"  
  5.                minWidth="955" minHeight="600"  
  6.                 horizontalCenter="0" verticalCenter="0">  
  7.       
  8.           
  9.       
  10.     
  11.               horizontalCenter="0" verticalCenter="0">  
  12.           
  13.       
  14.  



阅读(1247) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~