ImageVerifierCode 换一换
格式:DOCX , 页数:10 ,大小:66.86KB ,
资源ID:12005304      下载积分:10 金币
快捷注册下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/12005304.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(Flex4.6事件监听机制的测试和总结-图文-源代码.docx)为本站上传会员【仙人****88】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

Flex4.6事件监听机制的测试和总结-图文-源代码.docx

1、Flex4.6事件监听机制的测试和总结 在Flex和Actionscript3中,事件的类型有很多,比如单击的click、鼠标移动的mouseEvent、改变大小等。开发人员需要注意的是,某个组件如何设置监听、发出事件,以及事件的响应操作。这种方式被称之为“事件驱动”方式。事件驱动涉及到的有关概念包括: 1、事件对象,即event object。所有的事件对象都是flash.events.Event或者其子类。每个事件对象都包含事件类型(type)和事件源(target),便于event listener知道事件的类型以及事件发出者。事件对象是Event类或者某个子类的实例,不但存储了

2、有关特定事件的信息,还包括便于操作事件对象的方法。 2、事件源,即event dispatchers。是事件发起的主体,所有的dispatcher都是eventdispatcher或其子类。 3、事件监听器,即event listeners。它表现为一个函数,当事件发生时,事件源dispatcher通知该监听器去处理特定的事件。为对象添加监听器的方法是: addEventListener(type, function)。 当指定类型的事件发生时,事件监听器以事件对象eventObject为参数传递给事件响应函数。同一时刻同一组件可能有多个事件发生,因此这里指定事件类型是非常有必要的。

3、 4、事件流,当一个组件触发事件时,这个事件会沿着一定的顺序流动,每经过一个组件,就会检测这个组件是否注册了该事件类型的监听器,如果注册了,就会响应,并调用事件处理函数。事件流分为三个阶段: (1)捕获阶段,Flex应用程序从根显示元素(如Application)逐层向下寻找,直到找到事件产生的源头。 (2)目标匹配阶段,在该阶段,Flex应用程序会调用目标对象自身注册的监听程序。 (3)冒泡阶段,在该阶段,从目标节点到根节点,逐层向上检测每个节点是否注册了监听器,相当于捕获阶段的逆过程。Flex应用程序可以在addEventListener()函数中的第三个参数设置事件获取的阶段,如果

4、为true,则关闭捕获阶段,开启目标匹配和冒泡阶段。 如果要阻断事件流继续流动,可以在监听器的响应函数中添加: event.stopPropagation(); 由于Flex设置的监听事件类型比较少,如果需要设置组件的特殊响应事件,或者为自定义组件添加自定义的响应事件,我们需要设计自定义类型的Event对象。 下面我们以一个由button和textInput控件组成的自定义组件InputButtonComp为例,为该组件设置按钮单击时的响应事件。 第一步:设计自定义组件。 (1)新建InputButtonComp.as类文件,继承自BorderContainer容器,并定义自定

5、义组件中需要包含的控件。 public class InputButtonComp extends BorderContainer { private var textInput:TextInput; private var button:Button; private var group:HGroup; (2)在InputButtonComp组件中添加子控件,重写createChildren方法。 //添加子组件,并指定初始状态 override protected function createChildren():void{ super.creat

6、eChildren(); if(!group){ group = new HGroup(); group.percentWidth = 100; group.percentHeight = 100; } if(!textInput){ textInput = new TextInput(); textInput.percentWidth=75; textInput.percentHeight=100; textInput.editable = true; } if(!button){

7、 button = new Button(); button.label = _btnLabel; button.percentWidth = 25; button.percentHeight = 100; //注册监听器,响应单击事件和键盘进入事件 button.addEventListener("click",buttonClickHandle); button.addEventListener(KeyboardEvent.KEY_DOWN,buttonEnterHandle);//回车键响应 } a

8、ddElement(group); group.addElement(textInput); group.addElement(button); } (3)自定义组件样式设置 //提交组件的变化 override protected function commitProperties():void{ mitProperties(); invalidateDisplayList(); } //默认宽度和长度 override protected function measure():void{ super.measur

9、e(); } override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void{ super.updateDisplayList(unscaledWidth,unscaledHeight); //button.move(textInput.width,0); } (4)设置按钮的监听器,我们设置在监听器中能分发出一个自定义的事件InputButtonCompEvent到事件流中,自定义事件的类型是“buttonClick”,传递的参数

10、是我们的输入内容textInput.text。 //分发按钮单击响应事件 private function buttonClickHandle(event:Event):void{ this.dispatchEvent(new InputButtonCompEvent("buttonClick",textInput.text)); } //分发按钮回车键提交响应事件 private function buttonEnterHandle(event:KeyboardEvent):void{ if(event.charCode == 13){ t

11、his.dispatchEvent(new InputButtonCompEvent("buttonClick",textInput.text)); } } 这一步涉及到自定义组件设计的相关内容,这一方面我们不在此做过多叙述。 在这一步当中,我们做的工作主要是把自定义的组件搭建好,并为其中的子组件设置并注册了监听器。其中的监听器能分发出我们自定义的事件InputButtonCompEvent到事件流中。那么接下来,我们就要设计这个自定义事件的内部细节了。 二、自定义事件的设计 我们需要在InputButtonCompEvent.as文件中创建一个自定义的事件类。 所有事

12、件对象都是flash.events.Event或其子类,因此自定义事件类需要继承自Event类: public class InputButtonCompEvent extends Event { 然后我们的构造函数决定了自定义事件具有的参数列表形式,比如: public function InputButtonCompEvent(type:String,eventInfo:Object=null,bubbles:Boolean=false,cancelable:Boolean=false) { super(type,bubbles,cancelable); th

13、is.eventInfo = eventInfo; } Event类具有三个参数:type,事件类型、 bubbles ,Event 对象是否参与事件流的冒泡阶段。默认值为 false、 cancelable,确定是否可以取消 Event 对象。默认值为 false。 我们在此基础上添加了一个参数eventInfo:Object,用于事件之间的参数传递,并定义该参数的获取和赋值方法: public function get eventInfo():Object { return _eventInfo; } public function set eve

14、ntInfo(value:Object):void { _eventInfo = value; } 三、初步测试 到这里,我们的自定义组件和它的自定义响应事件已经建立起来了,也许此时你兴致勃勃的打算欣赏自己的杰作,于是你把自定义组件项目生成的库文件InputButtonComponent.swc拷贝到你的项目中的libs目录下,在设计模式下从自定义组件中找到我们的组件InputButtonComp,拖入我们的工作界面,大概是这么个样子: 一切正常吧,你很满意。然后设置组件的buttonClick事件响应函数: 这是开始出现问题了,在Flex-Builde

15、r编辑器底端提示错误: 这里为什么出错了呢?回想一下在设置自定义事件的buttonClick类型时,我们只是在分发自定义事件到事件流时,定义了事件类型为buttonClick: //分发按钮单击响应事件 private function buttonClickHandle(event:Event):void{ this.dispatchEvent(new InputButtonCompEvent("buttonClick",textInput.text)); } 但是系统怎么识别这个类型呢?换句话说,自定义组件是怎么知道这个是它要去响应的事件呢? 四、修改测

16、试 Flex中专门为事件定义了一个[Event]元标签,用来申明被自定义组件分派的事件。 这就需要我们在自定义组件的时候,要对这个事件类型及其对应的事件进行申明: [Event(name="buttonClick",type="events.InputButtonCompEvent")] public class InputButtonComp extends BorderContainer { ..... } 事件类型申明放在package申明的后面,类的前面: package components { [Event(name="buttonClick",type="

17、events.InputButtonCompEvent")] public class InputButtonComp extends BorderContainer { ..... } } 上述的标签[Event]属于元数据标签,在代码中的作用是向编译器提供如何编译程序的信息,而不会被编译到生成的swf/swc文件中。为元数据标签定义的name属于自定义组件的事件属性名,在自定义组件中使用name可获取类型为type的自定义事件,并在应用程序中设置其处理函数。 这个时候错误消失了,整个环节都已经搭建好。我们在Flex应用程序中使用这个自定义的组件,并为其添加buttonCli

18、ck事件的响应函数: 我们尝试着打印出从自定义事件中获得的对象信息eventInfo。结果显示如下: 下面我们来分析下整个事件分发和响应的过程: (1)首先,编译器将代码编译好之后,在主程序界面中生成自定义组件,并给按钮组件注册了click类型的事件监听器。 (2)当我们点击按钮后,便触发了click事件监听器函数。在这个函数里面我们定义了一个用于事件派发的dispatcher方法,用于派发我们的自

20、定义事件InputButtonCompEvent。 (3)接下来,为了派发这个事件,便需要获得该事件的实例化对象,执行其构造函数并赋值。 (4)然后这个实例化对象被派发到事件流中。 (5)事件被分发后,被自定义组件的事件属性buttonClick获取到,于是我们在使用自定义组件时为它定义的buttonclick处理函数buttonClickHandler(event)被调用。这个处理函数将获取到的自定义事件对象event中的eventInfo参数打印出来。 (6)到这里,整个自定义事件派发的过程才完全结束。 五、自定义组件和自定义事件项目结构。 六、源代码。 Inpu

21、tButtonComp.as package components { import events.InputButtonCompEvent; import flash.events.Event; import flash.events.KeyboardEvent; import flash.text.TextLineMetrics; import mx.core.UIComponent; import ponents.BorderContainer; import ponents.Button; import ponents.HGroup; impor

22、t ponents.TextInput; /** * @功能说明:将TextInput与Button的功能进行组合,定义成一个新的组件,命名为InputButtonComp * @作者:andrew li * @日期:2013-08-28 15:10 * @参数: * @异常: * @返回: * */ [Event(name="buttonClick",type="events.InputButtonCompEvent")] public class InputButtonComp extends BorderContainer {

23、 private var textInput:TextInput; private var button:Button; private var group:HGroup; private var _btnLabel:String="确定"; private var _text:String; public function InputButtonComp() { super(); setStyle("borderVisible", false); } //添加子组件,并指定初始状态 override protect

24、ed function createChildren():void{ super.createChildren(); if(!group){ group = new HGroup(); group.percentWidth = 100; group.percentHeight = 100; } if(!textInput){ textInput = new TextInput(); textInput.percentWidth=75; textInput.percentHeight=100;

25、textInput.editable = true; } if(!button){ button = new Button(); button.label = _btnLabel; button.percentWidth = 25; button.percentHeight = 100; button.addEventListener("click",buttonClickHandle);//单击响应 button.addEventListener(KeyboardEvent.KEY_DOWN,buttonEnterH

26、andle);//回车键响应 } addElement(group); group.addElement(textInput); group.addElement(button); } //提交组件的变化 override protected function commitProperties():void{ mitProperties(); textInput.text = text; invalidateDisplayList(); } //默认宽度和长度 override prote

27、cted function measure():void{ super.measure(); } override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void{ super.updateDisplayList(unscaledWidth,unscaledHeight); //button.move(textInput.width,0); } //分发按钮单击响应事件 private function button

28、ClickHandle(event:Event):void{ this.dispatchEvent(new InputButtonCompEvent("buttonClick",textInput.text)); } //分发按钮回车键提交响应事件 private function buttonEnterHandle(event:KeyboardEvent):void{ if(event.charCode == 13){ this.dispatchEvent(new InputButtonCompEvent("buttonClick",textInp

29、ut.text)); } } public function get text():String { return _text; } public function set text(value:String):void { _text = value; } } } ============================================================= InputButtonCompEvent.as package events{ import flash.events

30、Event; public class InputButtonCompEvent extends Event { private var _eventInfo:Object; //public static const INPUTBUTTON_CLICK:String ="BUTTONCLICK"; public function InputButtonCompEvent(type:String,eventInfo:Object=null,bubbles:Boolean=false,cancelable:Boolean=false) {

31、 super(type,bubbles,cancelable); this.eventInfo = eventInfo; } public function get eventInfo():Object { return _eventInfo; } public function set eventInfo(value:Object):void { _eventInfo = value; } override public function clone():Event{ return new InputButtonCompEvent(type, eventInfo, false, false); } } }

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服