- 浏览: 251949 次
- 性别:
- 来自: 厦门
文章分类
最新评论
-
topbox163:
图片显示不了
Flex 学习曲线图 -
彭利贤:
你好,想请教您一些关于flash的问题,您可以加我qq吗 59 ...
全屏flash的尺寸分析 -
jingj6:
是开源的吗?
小日本做的非常强大的一款AS3 3D引擎 -
hugh52066:
LZ牛B。
Flex 学习曲线图 -
sweed0:
a dream~~
一个让人瞠目结舌的传奇电脑高手!
8.3 事件机制的高级应用
8.3.1 事件的优先级别和弱引用
- 事件的优先级 :
默认情况下,Flex会按照监听器注册的顺序来调用监听函数。
使用addEventListener 函数的priority 来实现 监听函数的优先级。priority 为整数类型,数字越大,级别越高。级别最高的最先被调用。
已经存在的监听器,无法被修改优先级。
使用MXML添加的事件监听函数无法指定优先级别,将采用默认的级别。
给一个对象注册多个监听器,即使每个监听器的优先级别不同,但也无法保证后一个执行时前面的监听函数已经执行完毕。设计时,后面的函数不应该以前者执行完毕为条件。
使用addEventListener 函数的priority 来实现 监听函数的优先级。priority 为整数类型,数字越大,级别越高。级别最高的最先被调用。
已经存在的监听器,无法被修改优先级。
使用MXML添加的事件监听函数无法指定优先级别,将采用默认的级别。
给一个对象注册多个监听器,即使每个监听器的优先级别不同,但也无法保证后一个执行时前面的监听函数已经执行完毕。设计时,后面的函数不应该以前者执行完毕为条件。
- 事件的弱引用
使用addEventListener 函数的最后一个参数 useWeakReference 来实现 监听函数的弱引用。默认为false,表示不使用弱引用。
弱引用和垃圾回收机制有关。
创建临时函数 :
var tmpFunc:Function = function():void{ }
因为默认监听器使用的是强引用,所以如果使用了tmpFunc 函数,然后将tmpFunc = null,代表清空tmpFunc,只是tmpFunc 这个引用为null,但是tmpFunc 引用的函数还是存在内存中。
使用了弱引用后,如果一个对象只存在弱引用,在执行垃圾回收时会将这些对象从内存中清除。
垃圾回收有自己的规律,而且是有周期的,并不会在第一时间将系统中的垃圾资源回收。一般在资源缺乏的情况下进行。
建议:当事件监听函数不再需要时,一定不要忘记使用removeEventListener 方法删除监听函数。
弱引用和垃圾回收机制有关。
创建临时函数 :
var tmpFunc:Function = function():void{ }
因为默认监听器使用的是强引用,所以如果使用了tmpFunc 函数,然后将tmpFunc = null,代表清空tmpFunc,只是tmpFunc 这个引用为null,但是tmpFunc 引用的函数还是存在内存中。
使用了弱引用后,如果一个对象只存在弱引用,在执行垃圾回收时会将这些对象从内存中清除。
垃圾回收有自己的规律,而且是有周期的,并不会在第一时间将系统中的垃圾资源回收。一般在资源缺乏的情况下进行。
建议:当事件监听函数不再需要时,一定不要忘记使用removeEventListener 方法删除监听函数。
8.3.2 创建自定义事件
创建自定义事件包括创建事件对象和派发事件两个部分。
派发事件:
使用EventDispatche 的dispatchEvent 方法:
dispatchEvent(event:Event);
其中event参数就是创建的事件对象。
在需要派发的组件设置事件:
派发事件:
使用EventDispatche 的dispatchEvent 方法:
dispatchEvent(event:Event);
其中event参数就是创建的事件对象。
在需要派发的组件设置事件:
- 定义一个事件类型常量:
public const CLICK_IMAGE:String = "clickImage";
- 在监听函数中派发事件:
internal function clickImage():void{
dispatchEvent(new Event(CLICK_IMAGE, false));
}
dispatchEvent(new Event(CLICK_IMAGE, false));
}
- 为事件注册监听函数
<mx:Image click="clickImage()" />
然后再需要使用事件的主程序:
- 在程序初始化时为组件的事件注册监听器,事件类型跟组件的事件类型一致:
internal funtion initApp():void{
imgPanel.addEventListener(ImgPanel.CLICK_IMAGE, clickHandler);
}
imgPanel.addEventListener(ImgPanel.CLICK_IMAGE, clickHandler);
}
- 设置监听函数:
internal function clickHandler(evt:Event):void{}
如果需要使用自定义的事件对象:
- 创建自定义对象的类:
-
- 类必须继承Event
public class ImageEvent extends Event{}
-
- 定义事件类型常量:
public const CLICK_IMAGE:String = "clickImage";
-
- 定义需要传递的参数为类属性:
public var time:String;
-
- 在构造函数中,定义参数,用来接收数据,这个数据将被符给类属性:
function ImageEvent(when:String):void{
//必须调用父类的构造方法,相当于创建了一个Event对象。
super(ImgPanel.CLICK_IMAGE, false, false);
time = when;
}
//必须调用父类的构造方法,相当于创建了一个Event对象。
super(ImgPanel.CLICK_IMAGE, false, false);
time = when;
}
- 使用自定义事件对象:
- 在派发事件部分,使用自定义对象为事件对象派发出去,修改为:
dispatchEvent(new ImageEvent("这里是参数值"));
-
- 在主程序的监听函数就可以使用自定义对象的数据了:
nternal function clickHandler(evt:ImageEvent):void{
evt.time; //time就是我们在自定义对象定义的属性。
}
evt.time; //time就是我们在自定义对象定义的属性。
}
Date 类的使用:
var date:Date = new Date();
date.getHours():获得小时
date.getMinutes():获得分钟
使用Metadata 标签给组件添加元数据:使事件成为组件的一个特殊属性。
在组件中可以这样使用:
<mx:Metadata>
<!-- 为事件定义元数据 -->
[Event(name="clickImage", type="events.ImageEvent")]
</mx:Metadata>
这样在使用组件的标签,就会出现 clickImage 属性,自动完成addEventListener 的工作。
var date:Date = new Date();
date.getHours():获得小时
date.getMinutes():获得分钟
使用Metadata 标签给组件添加元数据:使事件成为组件的一个特殊属性。
在组件中可以这样使用:
<mx:Metadata>
<!-- 为事件定义元数据 -->
[Event(name="clickImage", type="events.ImageEvent")]
</mx:Metadata>
这样在使用组件的标签,就会出现 clickImage 属性,自动完成addEventListener 的工作。
8.3.3 侦听事件管理--让你的控件可拖拽
Flex 组件内置了处理拖拽事件的接口,甚至有些控件以及实现了拖拽功能:List、DataGrid、Menu、TileList、Tree。
关于拖拽的有关属性,是这些控件共有的,默认值都是false:
关于拖拽的有关属性,是这些控件共有的,默认值都是false:
- allowDragSelection:是否可拖拽
- allowMultipleSelection:是否可多选,如果可以,按Ctrl 添加元素,Shift 反选元素。
- dragEnabled:是否可以拖动子元素
- dragMoveEnabled:是否移动元素位置,而不是复制元素,建议将这个设置为true。如果设置为false,将出现重复数据。
- dropEnabled:是否可以将物体放置进来
拖动功能限于在相同类型的控件间使用,且不同控件数据源的数据结构必须可以兼容。
在Flex 中,有几个专门的对象供开发者处理拖拽事件:
- DragManager:mx.managers 包中,管理拖拽事件
- DragSource:mx.core 包中,是Flex 框架的核心成员,处理拖拽中的数据传递
- DragEvent::mx.events 包中,拖拽操作中的事件对象
拖拽操作中至少有两个对象:提供数据的对象,接收数据的对象。提供数据的对象按照前后顺序分为以下事件:
- mouseDown:鼠标按下
- mouseMove:鼠标移到
- dragComplete:鼠标释放。判断目标是否能接受数据,如果可以,拖放成功。
接受方的事件:
- dragEnter:被拖动对象移动到目标范围时
- dragOver:鼠标移动到目标上
- dragDrop:鼠标在目标上松开
- dragExit:对象被拖离目标范围
开始拖拽对象,doDrag方法初始化拖拽动作中的所有数据:
DragManager.doDrag(
dragInitiator:派发拖拽事件的目标对象
dragSource:拖拽中的数据源,用来传递数据。通过定义DragSource对象来设置数据源,该对象的方法 addData(obj, "name") 可以添加数据。然后使用dataForFormat("name") 来获取数据,使用前用hasFormat("name) 来判断是否存在该对象。
mouseEvent:鼠标事件对象,包含了拖拽事件开始时的鼠标信息
dragImage:可选,一个可视化的Flex 组件,用来代替目标对象的显示,将在拖拽过程中一直跟随鼠标。如果没有指定,默认会使用一个矩形来代替。
xOffset:x坐标位移量,默认0,表示dragImage 和 目标对象左端的距离
yOffset:y坐标位移量,默认0,表示dragImage 和 目标对象顶端的距离
imageAlpha:默认0.5,表示 dragImage 的透明度,0-1
allowMove:是否允许移动,默认true,实际上这个属性不影响动作
);
acceptDragDrop(traget:IUIComponent)
表示对象同意接受拖拽到数据,如果不接受,物体将无法再该对象上拖放。traget 为设置的对象。
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="initApp()"> <mx:Style source="style.css" /> <mx:Script> <![CDATA[ import mx.managers.DragManager; import mx.core.DragSource; import mx.events.DragEvent; internal function initApp():void{ img.addEventListener(MouseEvent.MOUSE_DOWN,dragHandler); // canvas_1.addEventListener(DragEvent.DRAG_ENTER,enterHandler); canvas_1.addEventListener(DragEvent.DRAG_DROP,dropHandler); } // internal function dragHandler(evt:MouseEvent):void{ //拖拽的对象 var dragTarget:Image=Image(evt.currentTarget); //创建拖拽数据源 var ds:DragSource = new DragSource(); var obj:Object = new Object(); obj.name = "Image"+Math.random()*100; ds.addData(obj,"image"); //创建拖拽过程中显示的对象,可以是任意的组件 var imgProxy:Image = new Image(); imgProxy.source = img.source; imgProxy.width = 72; imgProxy.height = 22; //开始拖拽 DragManager.doDrag(dragTarget, ds, evt, imgProxy,0,0,0.8); } // internal function enterHandler(evt:DragEvent):void{ DragManager.acceptDragDrop(Canvas(evt.target)); } internal function dropHandler(evt:DragEvent):void{ // var newImg:Image = new Image(); newImg.source = img.source; canvas_1.addChild(newImg); newImg.x = canvas_1.mouseX; newImg.y = canvas_1.mouseY; var obj:Object = evt.dragSource.dataForFormat("image"); newImg.toolTip = obj.name; } ]]> </mx:Script> <mx:Canvas id="canvas_1" styleName="box" x="50" y="150" width="265" height="231"> </mx:Canvas> <mx:Image id="img" x="51" y="97" source="FlexLogo.gif"/> </mx:Application>
评论
6 楼
Army
2009-03-02
je的收藏按钮在哪来着……
5 楼
happehope
2009-03-02
高手啊,研究的很仔细
4 楼
yexin218
2009-03-01
恩 不错 详细
3 楼
hesion10
2009-02-28
http://flex2.group.iteye.com/group/topic/9891
2 楼
hesion10
2009-02-28
不错.比好多书详细多了.比帮助文档人性多了.多谢了.
楼主可以帮我看看这个问题吗.谢~
楼主可以帮我看看这个问题吗.谢~
1 楼
haohanenying
2008-12-11
<div class='quote_title'>enboga 写道</div><div class='quote_div'><p><span style='font-size: small;'><strong id='cj3f12'>8.3 事件机制的高级应用</strong>
</span>
<br id='cj3f13'/>
<br id='f9xf'/>
<strong id='cj3f14'>8.3.1 事件的优先级别和弱引用</strong>
<br id='pkap'/>
</p>
<div id='pkap0'>
<ul id='lqb0'>
<li id='lqb00'><strong id='v6zp'>事件的优先级</strong>
:</li>
</ul>
</div>
<div id='lqb01' style='margin-left: 40px;'>默认情况下,Flex会按照监听器注册的顺序来调用监听函数。<br id='oru90'/>
使用addEventListener 函数的priority 来实现 监听函数的优先级。priority 为整数类型,数字越大,级别越高。级别最高的最先被调用。<br id='z:qc'/>
已经存在的监听器,无法被修改优先级。<br id='t4ad'/>
使用MXML添加的事件监听函数无法指定优先级别,将采用默认的级别。<br id='f3w4'/>
给一个对象注册多个监听器,即使每个监听器的优先级别不同,但也无法保证后一个执行时前面的监听函数已经执行完毕。设计时,后面的函数不应该以前者执行完毕为条件。<br id='t4ad0'/>
<br id='t4ad1'/>
</div>
<div id='lqb02'>
<ul id='lqb03'>
<li id='lqb04'><strong id='v6zp0'>事件的弱引用</strong>
</li>
</ul>
<div id='lqb05' style='margin-left: 40px;'>使用addEventListener 函数的最后一个参数 useWeakReference 来实现 监听函数的弱引用。默认为false,表示不使用弱引用。<br id='tq4h'/>
弱引用和垃圾回收机制有关。<br id='tq4h0'/>
<strong id='v6zp1'>创建临时函数</strong>
:<br id='v6zp2'/>
var tmpFunc:Function = function():void{ }<br id='v8i9'/>
因为默认监听器使用的是强引用,所以如果使用了tmpFunc 函数,然后将tmpFunc = null,代表清空tmpFunc,只是tmpFunc 这个引用为null,但是tmpFunc 引用的函数还是存在内存中。<br id='uz53'/>
使用了弱引用后,如果一个对象只存在弱引用,在执行垃圾回收时会将这些对象从内存中清除。<br id='hk-v'/>
垃圾回收有自己的规律,而且是有周期的,并不会在第一时间将系统中的垃圾资源回收。一般在资源缺乏的情况下进行。<br id='u8o6'/>
建议:当事件监听函数不再需要时,一定不要忘记使用removeEventListener 方法删除监听函数。<br id='hk-v0'/>
<br id='v8i90'/>
</div>
</div>
<div id='lqb07' style='margin-left: 40px;'><br id='pkap2'/>
</div>
<p><strong id='cj3f15'>8.3.2 创建自定义事件</strong>
<br id='hkge'/>
</p>
<div id='yu45' style='margin-left: 40px;'>创建自定义事件包括创建事件对象和派发事件两个部分。<br id='fzs8'/>
派发事件:<br id='fzs80'/>
使用EventDispatche 的dispatchEvent 方法:<br id='p7-x'/>
dispatchEvent(event:Event);<br id='p7-x0'/>
其中event参数就是创建的事件对象。<br id='moc8'/>
<br id='zl8v'/>
在需要派发的组件设置事件:<br id='v1qe'/>
</div>
<div id='v1qe0' style='margin-left: 40px;'>
<ul id='v1qe1'>
<li id='v1qe2'>定义一个事件类型常量:<br id='df3s'/>
</li>
</ul>
</div>
<div id='df3s0' style='margin-left: 40px;'>
<div id='df3s1' style='margin-left: 40px;'>public const CLICK_IMAGE:String = "clickImage";</div>
</div>
<div id='zl8v0' style='margin-left: 40px;'>
<ul id='zl8v1'>
<li id='v1qe3'>在监听函数中派发事件:</li>
</ul>
</div>
<div id='df3s2' style='margin-left: 80px;'>internal function clickImage():void{<br id='df3s3'/>
dispatchEvent(new Event(CLICK_IMAGE, false));<br id='df3s4'/>
}<br id='df3s5'/>
</div>
<div id='df3s6' style='margin-left: 40px;'>
<ul id='df3s7'>
<li id='t_2l'>为事件注册监听函数</li>
</ul>
</div>
<div id='czz.' style='margin-left: 40px;'>
<div id='czz.0' style='margin-left: 40px;'><mx:Image click="clickImage()" /><br id='czz.1'/>
</div>
</div>
<div id='v1qe5' style='margin-left: 40px;'><br id='jkx4'/>
然后再需要使用事件的主程序:<br id='jkx40'/>
</div>
<div id='jkx41' style='margin-left: 40px;'>
<ul id='jkx42'>
<li id='jkx43'>在程序初始化时为组件的事件注册监听器,事件类型跟组件的事件类型一致:</li>
</ul>
</div>
<div id='jkim' style='margin-left: 40px;'>
<div id='jkim0' style='margin-left: 40px;'>internal funtion initApp():void{<br id='jkim1'/>
imgPanel.addEventListener(ImgPanel.CLICK_IMAGE, clickHandler);<br id='jkim2'/>
}<br id='jkim3'/>
</div>
</div>
<div id='jkim4' style='margin-left: 40px;'>
<ul id='jkim5'>
<li id='kk90'>设置监听函数:</li>
</ul>
</div>
<div id='basv' style='margin-left: 40px;'>
<div id='basv0' style='margin-left: 40px;'>internal function clickHandler(evt:Event):void{}<br id='gev1'/>
<br id='gev10'/>
</div>
</div>
<div id='gev11' style='margin-left: 40px;'>
<div id='gev12'>如果需要使用自定义的事件对象:<br id='gev13'/>
</div>
</div>
<div id='fyo9' style='margin-left: 40px;'>
<div id='fyo90'>
<ul id='fyo91'>
<li id='fyo92'>创建自定义对象的类:</li>
</ul>
</div>
</div>
<div id='wqyp' style='margin-left: 40px;'>
<div id='wqyp0'>
<ul id='wqyp1'>
<li>
<ul id='wqyp2'>
<li id='wqyp3'>类必须继承Event</li>
</ul>
</li>
</ul>
</div>
</div>
<div id='n2eh' style='margin-left: 80px;'>
<div id='n2eh0'>
<div id='n2eh1' style='margin-left: 40px;'>public class ImageEvent extends Event{}<br id='n2eh2'/>
</div>
</div>
</div>
<div id='n2eh3' style='margin-left: 40px;'>
<div id='n2eh4'>
<ul id='n2eh5'>
<li>
<ul id='n2eh6'>
<li id='wqyp4'>定义事件类型常量:</li>
</ul>
</li>
</ul>
</div>
</div>
<div id='n2eh7' style='margin-left: 80px;'>
<div id='n2eh8'>
<div id='n2eh9' style='margin-left: 40px;'>public const CLICK_IMAGE:String = "clickImage";</div>
</div>
</div>
<div id='n2eh10' style='margin-left: 40px;'>
<div id='n2eh11'>
<ul id='n2eh12'>
<li>
<ul id='n2eh13'>
<li id='yjad'>定义需要传递的参数为类属性:</li>
</ul>
</li>
</ul>
</div>
</div>
<div id='n2eh14' style='margin-left: 80px;'>
<div id='n2eh15'>
<div id='n2eh16' style='margin-left: 40px;'>public var time:String;<br id='n2eh17'/>
</div>
</div>
</div>
<div id='n2eh18' style='margin-left: 40px;'>
<div id='n2eh19'>
<ul id='n2eh20'>
<li>
<ul id='n2eh21'>
<li id='yjad0'>在构造函数中,定义参数,用来接收数据,这个数据将被符给类属性:</li>
</ul>
</li>
</ul>
</div>
</div>
<div id='uykn' style='margin-left: 80px;'>
<div id='uykn0'>
<div id='uykn1' style='margin-left: 40px;'>function ImageEvent(when:String):void{<br id='qfgk'/>
//必须调用父类的构造方法,相当于创建了一个Event对象。<br id='wicu'/>
super(ImgPanel.CLICK_IMAGE, false, false); <br id='knmx'/>
time = when;<br id='wicu0'/>
}<br id='uykn2'/>
</div>
</div>
</div>
<div id='uykn3' style='margin-left: 40px;'>
<div id='uykn4'><br id='n2eh22'/>
</div>
</div>
<div id='wqyp6' style='margin-left: 40px;'>
<div id='wqyp7'>
<ul id='wqyp8'>
<li id='fyo93'>使用自定义事件对象:
<ul id='h2e4'>
<li id='h2e40'>在派发事件部分,使用自定义对象为事件对象派发出去,修改为:</li>
</ul>
</li>
</ul>
</div>
</div>
<div id='sxlq' style='margin-left: 80px;'>
<div id='sxlq0'>
<div id='sxlq1' style='margin-left: 40px;'>dispatchEvent(new ImageEvent("这里是参数值"));<br id='k3_t'/>
</div>
</div>
</div>
<div id='k3_t0' style='margin-left: 40px;'>
<div id='k3_t1'>
<div id='k3_t2'>
<ul id='k3_t3'>
<li>
<ul id='k3_t4'>
<li id='k3_t5'>在主程序的监听函数就可以使用自定义对象的数据了:</li>
</ul>
</li>
</ul>
</div>
</div>
</div>
<div id='qirw' style='margin-left: 80px;'>
<div id='qirw0'>
<div id='qirw1'>
<div id='qirw2' style='margin-left: 40px;'>nternal function clickHandler(evt:ImageEvent):void{<br id='nksm'/>
evt.time; //time就是我们在自定义对象定义的属性。<br id='nksm0'/>
}<br id='uwr6'/>
<br id='uwr60'/>
</div>
</div>
</div>
</div>
<div id='uwr61' style='margin-left: 40px;'>
<div id='uwr62'>
<div id='uwr63'>
<div id='uwr64'>Date 类的使用:<br id='k3oo'/>
var date:Date = new Date();<br id='k3oo0'/>
date.getHours():获得小时<br id='xd:8'/>
date.getMinutes():获得分钟<br id='xd:80'/>
<br id='bwia'/>
<br id='xd:81'/>
使用Metadata 标签给组件添加元数据:使事件成为组件的一个特殊属性。<br id='dylh'/>
在组件中可以这样使用:<br id='s911'/>
<mx:Metadata><br id='s9110'/>
<!-- 为事件定义元数据 --><br id='s9111'/>
[Event(name="clickImage", type="events.ImageEvent")]<br id='s9112'/>
</mx:Metadata><br id='s9113'/>
<br id='s9114'/>
这样在使用组件的标签,就会出现 clickImage 属性,自动完成addEventListener 的工作。<br id='s9115'/>
<br id='s9116'/>
<br id='uwr65'/>
</div>
</div>
</div>
</div>
<p><br id='f9xf1'/>
</p>
<p> </p>
<p><strong id='cj3f16'>8.3.3 侦听事件管理--让你的控件可拖拽<br id='c.of'/>
</strong>
</p>
<div id='c.of0' style='margin-left: 40px;'>Flex 组件内置了处理拖拽事件的接口,甚至有些控件以及实现了拖拽功能:List、DataGrid、Menu、TileList、Tree。<br id='ppw2'/>
<br id='ppw20'/>
关于拖拽的有关属性,是这些控件共有的,默认值都是false:<br id='ppw21'/>
</div>
<div id='ppw22' style='margin-left: 40px;'>
<ul id='ppw23'>
<li id='ppw24'>allowDragSelection:是否可拖拽</li>
<li id='ppw25'>allowMultipleSelection:是否可多选,如果可以,按Ctrl 添加元素,Shift 反选元素。<br id='eoky'/>
</li>
<li id='ppw26'>dragEnabled:是否可以拖动子元素</li>
<li id='ppw27'>dragMoveEnabled:是否移动元素位置,而不是复制元素,建议将这个设置为true。如果设置为false,将出现重复数据。</li>
<li id='ppw28'>dropEnabled:是否可以将物体放置进来</li>
</ul>
<br id='qkk7'/>
拖动功能限于在相同类型的控件间使用,且不同控件数据源的数据结构必须可以兼容。<br id='qkk70'/>
<br id='qedf'/>
在Flex 中,有几个专门的对象供开发者处理拖拽事件:<br id='tlih'/>
</div>
<div id='tlih0' style='margin-left: 40px;'>
<ul id='tlih1'>
<li id='tlih2'>DragManager:mx.managers 包中,管理拖拽事件</li>
<li id='tlih3'>DragSource:mx.core 包中,是Flex 框架的核心成员,处理拖拽中的数据传递<br id='xek1'/>
</li>
<li id='tlih4'>DragEvent::mx.events 包中,拖拽操作中的事件对象</li>
</ul>
<br id='kl7l'/>
拖拽操作中至少有两个对象:提供数据的对象,接收数据的对象。提供数据的对象按照前后顺序分为以下事件:<br id='zzjq'/>
</div>
<div id='zzjq0' style='margin-left: 40px;'>
<ul id='zzjq1'>
<li id='zzjq2'>mouseDown:鼠标按下</li>
<li id='zzjq3'>mouseMove:鼠标移到<br id='zzjq4'/>
</li>
<li id='zzjq5'>dragComplete:鼠标释放。判断目标是否能接受数据,如果可以,拖放成功。</li>
</ul>
<br id='nyha'/>
接受方的事件:<br id='cuwx'/>
</div>
<div id='z3jt' style='margin-left: 40px;'>
<ul id='z3jt0'>
<li id='z3jt1'>dragEnter:被拖动对象移动到目标范围时</li>
</ul>
</div>
<div id='z3jt2' style='margin-left: 40px;'>
<ul id='ndqm'>
<li id='ndqm0'>dragOver:鼠标移动到目标上</li>
<li id='ndqm1'>dragDrop:鼠标在目标上松开</li>
<li id='ndqm2'>dragExit:对象被拖离目标范围</li>
</ul>
<br id='rb6g'/>
开始拖拽对象,doDrag方法初始化拖拽动作中的所有数据:<br id='lkln'/>
DragManager.doDrag(<br id='rb6g0'/>
dragInitiator:派发拖拽事件的目标对象<br id='bupc'/>
dragSource:拖拽中的数据源,用来传递数据。通过定义DragSource对象来设置数据源,该对象的方法 addData(obj,
"name") 可以添加数据。然后使用dataForFormat("name") 来获取数据,使用前用hasFormat("name)
来判断是否存在该对象。<br id='bupc0'/>
mouseEvent:鼠标事件对象,包含了拖拽事件开始时的鼠标信息<br id='bupc1'/>
dragImage:可选,一个可视化的Flex 组件,用来代替目标对象的显示,将在拖拽过程中一直跟随鼠标。如果没有指定,默认会使用一个矩形来代替。<br id='bupc2'/>
xOffset:x坐标位移量,默认0,表示dragImage 和 目标对象左端的距离<br id='bupc3'/>
yOffset:y坐标位移量,默认0,表示dragImage 和 目标对象顶端的距离<br id='bupc4'/>
imageAlpha:默认0.5,表示 dragImage 的透明度,0-1<br id='bupc5'/>
allowMove:是否允许移动,默认true,实际上这个属性不影响动作<br id='rb6g1'/>
);<br id='lkln0'/>
</div>
<p><br id='u1wu'/>
<br id='ulse'/>
acceptDragDrop(traget:IUIComponent)<br id='ulse0'/>
表示对象同意接受拖拽到数据,如果不接受,物体将无法再该对象上拖放。traget 为设置的对象。<br id='pb9:'/>
<br id='q.7o'/>
</p>
<pre name='code' class='xml'><?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="initApp()">
<mx:Style source="style.css" />
<mx:Script>
<![CDATA[
import mx.managers.DragManager;
import mx.core.DragSource;
import mx.events.DragEvent;
internal function initApp():void{
img.addEventListener(MouseEvent.MOUSE_DOWN,dragHandler);
//
canvas_1.addEventListener(DragEvent.DRAG_ENTER,enterHandler);
canvas_1.addEventListener(DragEvent.DRAG_DROP,dropHandler);
}
//
internal function dragHandler(evt:MouseEvent):void{
//拖拽的对象
var dragTarget:Image=Image(evt.currentTarget);
//创建拖拽数据源
var ds:DragSource = new DragSource();
var obj:Object = new Object();
obj.name = "Image"+Math.random()*100;
ds.addData(obj,"image");
//创建拖拽过程中显示的对象,可以是任意的组件
var imgProxy:Image = new Image();
imgProxy.source = img.source;
imgProxy.width = 72;
imgProxy.height = 22;
//开始拖拽
DragManager.doDrag(dragTarget, ds, evt, imgProxy,0,0,0.8);
}
//
internal function enterHandler(evt:DragEvent):void{
DragManager.acceptDragDrop(Canvas(evt.target));
}
internal function dropHandler(evt:DragEvent):void{
//
var newImg:Image = new Image();
newImg.source = img.source;
canvas_1.addChild(newImg);
newImg.x = canvas_1.mouseX;
newImg.y = canvas_1.mouseY;
var obj:Object = evt.dragSource.dataForFormat("image");
newImg.toolTip = obj.name;
}
]]>
</mx:Script>
<mx:Canvas id="canvas_1" styleName="box" x="50" y="150" width="265" height="231">
</mx:Canvas>
<mx:Image id="img" x="51" y="97" source="FlexLogo.gif"/>
</mx:Application></pre>
<p> </p></div><br/>hao ding 学习
</span>
<br id='cj3f13'/>
<br id='f9xf'/>
<strong id='cj3f14'>8.3.1 事件的优先级别和弱引用</strong>
<br id='pkap'/>
</p>
<div id='pkap0'>
<ul id='lqb0'>
<li id='lqb00'><strong id='v6zp'>事件的优先级</strong>
:</li>
</ul>
</div>
<div id='lqb01' style='margin-left: 40px;'>默认情况下,Flex会按照监听器注册的顺序来调用监听函数。<br id='oru90'/>
使用addEventListener 函数的priority 来实现 监听函数的优先级。priority 为整数类型,数字越大,级别越高。级别最高的最先被调用。<br id='z:qc'/>
已经存在的监听器,无法被修改优先级。<br id='t4ad'/>
使用MXML添加的事件监听函数无法指定优先级别,将采用默认的级别。<br id='f3w4'/>
给一个对象注册多个监听器,即使每个监听器的优先级别不同,但也无法保证后一个执行时前面的监听函数已经执行完毕。设计时,后面的函数不应该以前者执行完毕为条件。<br id='t4ad0'/>
<br id='t4ad1'/>
</div>
<div id='lqb02'>
<ul id='lqb03'>
<li id='lqb04'><strong id='v6zp0'>事件的弱引用</strong>
</li>
</ul>
<div id='lqb05' style='margin-left: 40px;'>使用addEventListener 函数的最后一个参数 useWeakReference 来实现 监听函数的弱引用。默认为false,表示不使用弱引用。<br id='tq4h'/>
弱引用和垃圾回收机制有关。<br id='tq4h0'/>
<strong id='v6zp1'>创建临时函数</strong>
:<br id='v6zp2'/>
var tmpFunc:Function = function():void{ }<br id='v8i9'/>
因为默认监听器使用的是强引用,所以如果使用了tmpFunc 函数,然后将tmpFunc = null,代表清空tmpFunc,只是tmpFunc 这个引用为null,但是tmpFunc 引用的函数还是存在内存中。<br id='uz53'/>
使用了弱引用后,如果一个对象只存在弱引用,在执行垃圾回收时会将这些对象从内存中清除。<br id='hk-v'/>
垃圾回收有自己的规律,而且是有周期的,并不会在第一时间将系统中的垃圾资源回收。一般在资源缺乏的情况下进行。<br id='u8o6'/>
建议:当事件监听函数不再需要时,一定不要忘记使用removeEventListener 方法删除监听函数。<br id='hk-v0'/>
<br id='v8i90'/>
</div>
</div>
<div id='lqb07' style='margin-left: 40px;'><br id='pkap2'/>
</div>
<p><strong id='cj3f15'>8.3.2 创建自定义事件</strong>
<br id='hkge'/>
</p>
<div id='yu45' style='margin-left: 40px;'>创建自定义事件包括创建事件对象和派发事件两个部分。<br id='fzs8'/>
派发事件:<br id='fzs80'/>
使用EventDispatche 的dispatchEvent 方法:<br id='p7-x'/>
dispatchEvent(event:Event);<br id='p7-x0'/>
其中event参数就是创建的事件对象。<br id='moc8'/>
<br id='zl8v'/>
在需要派发的组件设置事件:<br id='v1qe'/>
</div>
<div id='v1qe0' style='margin-left: 40px;'>
<ul id='v1qe1'>
<li id='v1qe2'>定义一个事件类型常量:<br id='df3s'/>
</li>
</ul>
</div>
<div id='df3s0' style='margin-left: 40px;'>
<div id='df3s1' style='margin-left: 40px;'>public const CLICK_IMAGE:String = "clickImage";</div>
</div>
<div id='zl8v0' style='margin-left: 40px;'>
<ul id='zl8v1'>
<li id='v1qe3'>在监听函数中派发事件:</li>
</ul>
</div>
<div id='df3s2' style='margin-left: 80px;'>internal function clickImage():void{<br id='df3s3'/>
dispatchEvent(new Event(CLICK_IMAGE, false));<br id='df3s4'/>
}<br id='df3s5'/>
</div>
<div id='df3s6' style='margin-left: 40px;'>
<ul id='df3s7'>
<li id='t_2l'>为事件注册监听函数</li>
</ul>
</div>
<div id='czz.' style='margin-left: 40px;'>
<div id='czz.0' style='margin-left: 40px;'><mx:Image click="clickImage()" /><br id='czz.1'/>
</div>
</div>
<div id='v1qe5' style='margin-left: 40px;'><br id='jkx4'/>
然后再需要使用事件的主程序:<br id='jkx40'/>
</div>
<div id='jkx41' style='margin-left: 40px;'>
<ul id='jkx42'>
<li id='jkx43'>在程序初始化时为组件的事件注册监听器,事件类型跟组件的事件类型一致:</li>
</ul>
</div>
<div id='jkim' style='margin-left: 40px;'>
<div id='jkim0' style='margin-left: 40px;'>internal funtion initApp():void{<br id='jkim1'/>
imgPanel.addEventListener(ImgPanel.CLICK_IMAGE, clickHandler);<br id='jkim2'/>
}<br id='jkim3'/>
</div>
</div>
<div id='jkim4' style='margin-left: 40px;'>
<ul id='jkim5'>
<li id='kk90'>设置监听函数:</li>
</ul>
</div>
<div id='basv' style='margin-left: 40px;'>
<div id='basv0' style='margin-left: 40px;'>internal function clickHandler(evt:Event):void{}<br id='gev1'/>
<br id='gev10'/>
</div>
</div>
<div id='gev11' style='margin-left: 40px;'>
<div id='gev12'>如果需要使用自定义的事件对象:<br id='gev13'/>
</div>
</div>
<div id='fyo9' style='margin-left: 40px;'>
<div id='fyo90'>
<ul id='fyo91'>
<li id='fyo92'>创建自定义对象的类:</li>
</ul>
</div>
</div>
<div id='wqyp' style='margin-left: 40px;'>
<div id='wqyp0'>
<ul id='wqyp1'>
<li>
<ul id='wqyp2'>
<li id='wqyp3'>类必须继承Event</li>
</ul>
</li>
</ul>
</div>
</div>
<div id='n2eh' style='margin-left: 80px;'>
<div id='n2eh0'>
<div id='n2eh1' style='margin-left: 40px;'>public class ImageEvent extends Event{}<br id='n2eh2'/>
</div>
</div>
</div>
<div id='n2eh3' style='margin-left: 40px;'>
<div id='n2eh4'>
<ul id='n2eh5'>
<li>
<ul id='n2eh6'>
<li id='wqyp4'>定义事件类型常量:</li>
</ul>
</li>
</ul>
</div>
</div>
<div id='n2eh7' style='margin-left: 80px;'>
<div id='n2eh8'>
<div id='n2eh9' style='margin-left: 40px;'>public const CLICK_IMAGE:String = "clickImage";</div>
</div>
</div>
<div id='n2eh10' style='margin-left: 40px;'>
<div id='n2eh11'>
<ul id='n2eh12'>
<li>
<ul id='n2eh13'>
<li id='yjad'>定义需要传递的参数为类属性:</li>
</ul>
</li>
</ul>
</div>
</div>
<div id='n2eh14' style='margin-left: 80px;'>
<div id='n2eh15'>
<div id='n2eh16' style='margin-left: 40px;'>public var time:String;<br id='n2eh17'/>
</div>
</div>
</div>
<div id='n2eh18' style='margin-left: 40px;'>
<div id='n2eh19'>
<ul id='n2eh20'>
<li>
<ul id='n2eh21'>
<li id='yjad0'>在构造函数中,定义参数,用来接收数据,这个数据将被符给类属性:</li>
</ul>
</li>
</ul>
</div>
</div>
<div id='uykn' style='margin-left: 80px;'>
<div id='uykn0'>
<div id='uykn1' style='margin-left: 40px;'>function ImageEvent(when:String):void{<br id='qfgk'/>
//必须调用父类的构造方法,相当于创建了一个Event对象。<br id='wicu'/>
super(ImgPanel.CLICK_IMAGE, false, false); <br id='knmx'/>
time = when;<br id='wicu0'/>
}<br id='uykn2'/>
</div>
</div>
</div>
<div id='uykn3' style='margin-left: 40px;'>
<div id='uykn4'><br id='n2eh22'/>
</div>
</div>
<div id='wqyp6' style='margin-left: 40px;'>
<div id='wqyp7'>
<ul id='wqyp8'>
<li id='fyo93'>使用自定义事件对象:
<ul id='h2e4'>
<li id='h2e40'>在派发事件部分,使用自定义对象为事件对象派发出去,修改为:</li>
</ul>
</li>
</ul>
</div>
</div>
<div id='sxlq' style='margin-left: 80px;'>
<div id='sxlq0'>
<div id='sxlq1' style='margin-left: 40px;'>dispatchEvent(new ImageEvent("这里是参数值"));<br id='k3_t'/>
</div>
</div>
</div>
<div id='k3_t0' style='margin-left: 40px;'>
<div id='k3_t1'>
<div id='k3_t2'>
<ul id='k3_t3'>
<li>
<ul id='k3_t4'>
<li id='k3_t5'>在主程序的监听函数就可以使用自定义对象的数据了:</li>
</ul>
</li>
</ul>
</div>
</div>
</div>
<div id='qirw' style='margin-left: 80px;'>
<div id='qirw0'>
<div id='qirw1'>
<div id='qirw2' style='margin-left: 40px;'>nternal function clickHandler(evt:ImageEvent):void{<br id='nksm'/>
evt.time; //time就是我们在自定义对象定义的属性。<br id='nksm0'/>
}<br id='uwr6'/>
<br id='uwr60'/>
</div>
</div>
</div>
</div>
<div id='uwr61' style='margin-left: 40px;'>
<div id='uwr62'>
<div id='uwr63'>
<div id='uwr64'>Date 类的使用:<br id='k3oo'/>
var date:Date = new Date();<br id='k3oo0'/>
date.getHours():获得小时<br id='xd:8'/>
date.getMinutes():获得分钟<br id='xd:80'/>
<br id='bwia'/>
<br id='xd:81'/>
使用Metadata 标签给组件添加元数据:使事件成为组件的一个特殊属性。<br id='dylh'/>
在组件中可以这样使用:<br id='s911'/>
<mx:Metadata><br id='s9110'/>
<!-- 为事件定义元数据 --><br id='s9111'/>
[Event(name="clickImage", type="events.ImageEvent")]<br id='s9112'/>
</mx:Metadata><br id='s9113'/>
<br id='s9114'/>
这样在使用组件的标签,就会出现 clickImage 属性,自动完成addEventListener 的工作。<br id='s9115'/>
<br id='s9116'/>
<br id='uwr65'/>
</div>
</div>
</div>
</div>
<p><br id='f9xf1'/>
</p>
<p> </p>
<p><strong id='cj3f16'>8.3.3 侦听事件管理--让你的控件可拖拽<br id='c.of'/>
</strong>
</p>
<div id='c.of0' style='margin-left: 40px;'>Flex 组件内置了处理拖拽事件的接口,甚至有些控件以及实现了拖拽功能:List、DataGrid、Menu、TileList、Tree。<br id='ppw2'/>
<br id='ppw20'/>
关于拖拽的有关属性,是这些控件共有的,默认值都是false:<br id='ppw21'/>
</div>
<div id='ppw22' style='margin-left: 40px;'>
<ul id='ppw23'>
<li id='ppw24'>allowDragSelection:是否可拖拽</li>
<li id='ppw25'>allowMultipleSelection:是否可多选,如果可以,按Ctrl 添加元素,Shift 反选元素。<br id='eoky'/>
</li>
<li id='ppw26'>dragEnabled:是否可以拖动子元素</li>
<li id='ppw27'>dragMoveEnabled:是否移动元素位置,而不是复制元素,建议将这个设置为true。如果设置为false,将出现重复数据。</li>
<li id='ppw28'>dropEnabled:是否可以将物体放置进来</li>
</ul>
<br id='qkk7'/>
拖动功能限于在相同类型的控件间使用,且不同控件数据源的数据结构必须可以兼容。<br id='qkk70'/>
<br id='qedf'/>
在Flex 中,有几个专门的对象供开发者处理拖拽事件:<br id='tlih'/>
</div>
<div id='tlih0' style='margin-left: 40px;'>
<ul id='tlih1'>
<li id='tlih2'>DragManager:mx.managers 包中,管理拖拽事件</li>
<li id='tlih3'>DragSource:mx.core 包中,是Flex 框架的核心成员,处理拖拽中的数据传递<br id='xek1'/>
</li>
<li id='tlih4'>DragEvent::mx.events 包中,拖拽操作中的事件对象</li>
</ul>
<br id='kl7l'/>
拖拽操作中至少有两个对象:提供数据的对象,接收数据的对象。提供数据的对象按照前后顺序分为以下事件:<br id='zzjq'/>
</div>
<div id='zzjq0' style='margin-left: 40px;'>
<ul id='zzjq1'>
<li id='zzjq2'>mouseDown:鼠标按下</li>
<li id='zzjq3'>mouseMove:鼠标移到<br id='zzjq4'/>
</li>
<li id='zzjq5'>dragComplete:鼠标释放。判断目标是否能接受数据,如果可以,拖放成功。</li>
</ul>
<br id='nyha'/>
接受方的事件:<br id='cuwx'/>
</div>
<div id='z3jt' style='margin-left: 40px;'>
<ul id='z3jt0'>
<li id='z3jt1'>dragEnter:被拖动对象移动到目标范围时</li>
</ul>
</div>
<div id='z3jt2' style='margin-left: 40px;'>
<ul id='ndqm'>
<li id='ndqm0'>dragOver:鼠标移动到目标上</li>
<li id='ndqm1'>dragDrop:鼠标在目标上松开</li>
<li id='ndqm2'>dragExit:对象被拖离目标范围</li>
</ul>
<br id='rb6g'/>
开始拖拽对象,doDrag方法初始化拖拽动作中的所有数据:<br id='lkln'/>
DragManager.doDrag(<br id='rb6g0'/>
dragInitiator:派发拖拽事件的目标对象<br id='bupc'/>
dragSource:拖拽中的数据源,用来传递数据。通过定义DragSource对象来设置数据源,该对象的方法 addData(obj,
"name") 可以添加数据。然后使用dataForFormat("name") 来获取数据,使用前用hasFormat("name)
来判断是否存在该对象。<br id='bupc0'/>
mouseEvent:鼠标事件对象,包含了拖拽事件开始时的鼠标信息<br id='bupc1'/>
dragImage:可选,一个可视化的Flex 组件,用来代替目标对象的显示,将在拖拽过程中一直跟随鼠标。如果没有指定,默认会使用一个矩形来代替。<br id='bupc2'/>
xOffset:x坐标位移量,默认0,表示dragImage 和 目标对象左端的距离<br id='bupc3'/>
yOffset:y坐标位移量,默认0,表示dragImage 和 目标对象顶端的距离<br id='bupc4'/>
imageAlpha:默认0.5,表示 dragImage 的透明度,0-1<br id='bupc5'/>
allowMove:是否允许移动,默认true,实际上这个属性不影响动作<br id='rb6g1'/>
);<br id='lkln0'/>
</div>
<p><br id='u1wu'/>
<br id='ulse'/>
acceptDragDrop(traget:IUIComponent)<br id='ulse0'/>
表示对象同意接受拖拽到数据,如果不接受,物体将无法再该对象上拖放。traget 为设置的对象。<br id='pb9:'/>
<br id='q.7o'/>
</p>
<pre name='code' class='xml'><?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="initApp()">
<mx:Style source="style.css" />
<mx:Script>
<![CDATA[
import mx.managers.DragManager;
import mx.core.DragSource;
import mx.events.DragEvent;
internal function initApp():void{
img.addEventListener(MouseEvent.MOUSE_DOWN,dragHandler);
//
canvas_1.addEventListener(DragEvent.DRAG_ENTER,enterHandler);
canvas_1.addEventListener(DragEvent.DRAG_DROP,dropHandler);
}
//
internal function dragHandler(evt:MouseEvent):void{
//拖拽的对象
var dragTarget:Image=Image(evt.currentTarget);
//创建拖拽数据源
var ds:DragSource = new DragSource();
var obj:Object = new Object();
obj.name = "Image"+Math.random()*100;
ds.addData(obj,"image");
//创建拖拽过程中显示的对象,可以是任意的组件
var imgProxy:Image = new Image();
imgProxy.source = img.source;
imgProxy.width = 72;
imgProxy.height = 22;
//开始拖拽
DragManager.doDrag(dragTarget, ds, evt, imgProxy,0,0,0.8);
}
//
internal function enterHandler(evt:DragEvent):void{
DragManager.acceptDragDrop(Canvas(evt.target));
}
internal function dropHandler(evt:DragEvent):void{
//
var newImg:Image = new Image();
newImg.source = img.source;
canvas_1.addChild(newImg);
newImg.x = canvas_1.mouseX;
newImg.y = canvas_1.mouseY;
var obj:Object = evt.dragSource.dataForFormat("image");
newImg.toolTip = obj.name;
}
]]>
</mx:Script>
<mx:Canvas id="canvas_1" styleName="box" x="50" y="150" width="265" height="231">
</mx:Canvas>
<mx:Image id="img" x="51" y="97" source="FlexLogo.gif"/>
</mx:Application></pre>
<p> </p></div><br/>hao ding 学习
发表评论
-
如何使用Cairngorm3的导航库(Spring AS)
2011-08-29 17:39 2895一、概述 二、LIB库包配置 下载需要的LIB库 ... -
Flex学习笔记_06 使用行为对象和动画效果_ 放缩\调整大小效果
2008-09-28 16:47 38236.3.2 放缩效果和调整大 ... -
Flex学习笔记_06 使用行为对象和动画效果_模糊、发光效果
2008-09-27 22:33 31706.3.1 模糊效果和发光效 ... -
Flex学习笔记_06 使用行为对象和动画效果_认识行为对象、行为和组件
2008-08-17 01:30 22236.1 认识行为对象 6.1.1 什么是行为对象 行 ... -
Flex学习笔记_09 数据绑定_运用实例
2008-07-28 23:41 32419.3.1 实现界面的多语言切换 <?xml vers ... -
Flex学习笔记_09 数据绑定_晋级篇
2008-07-28 22:27 28719.2.1 函数和类级别的绑 ... -
Flex学习笔记_09 数据绑定_概念、使用
2008-07-21 23:32 20689.1 认识数据绑定 9.1.1 数据绑定的概念 ... -
Flex学习笔记_08 Flex的事件机制_事件工作流程
2008-07-15 09:05 27288.2 事件机制的工作流程 8.2.1 关于事件流 ... -
Flex学习笔记_08 Flex的事件机制_事件架构
2008-07-14 08:54 24858.1 一切从事件开始 8.1.1 关于事件 事件有 ... -
Flex学习笔记_07 ActionScript 3.0 编程基础_数据类型及其运算、程序流程
2008-07-13 19:21 46557.3 数据类型和数据运算 7.3.1 关于数据类型 ... -
Flex学习笔记_07 ActionScript 3.0 编程基础
2008-07-09 23:15 28847.1 了解 ActionScript 3.0 7.1 ... -
Flex学习笔记_06 使用组件处理数据和交互_03控件的实例应用
2008-07-06 14:26 25853. 控件的实例应用 3.1 制作一个简单的涂鸦板 ... -
Flex学习笔记_06 使用组件处理数据和交互_02导航类组件
2008-07-02 00:04 29992. 导航类组件 2.1 ToggleButtonBa ... -
Flex学习笔记_06 使用组件处理数据和交互_01常用组件(下)
2008-06-30 10:37 4614Flex学习笔记_06 使用组 ... -
Flex学习笔记_06 使用组件处理数据和交互_01常用组件(中)
2008-06-29 22:50 3969Flex学习笔记_06 使用组件处理数据和交互_01常用组件( ... -
Flex学习笔记_06 使用组件处理数据和交互_01常用组件(上)
2008-06-26 23:11 4535Flex学习笔记_06 使用组件处理数据和交互_01常用组件( ... -
Flex学习笔记_05 使用容器控制界面布局_03动态布局、导航容器、表单布局
2008-06-25 08:40 6713本文的相关文章: Flex学习笔记_05 使用容器控制界面布局 ... -
Flex学习笔记_05 使用容器控制界面布局_02窗口布局
2008-06-24 09:07 5148本文的相关文章: Flex学习笔记_05 使用容器控制界面布局 ... -
Flex学习笔记_05 使用容器控制界面布局_01管理程序的布局
2008-06-23 23:52 5654本文的相关文章: Flex学习笔记_05 使用容器控制界面布局 ... -
Flex学习笔记_04 MXML语言简介
2008-06-17 22:52 54511. MXML语法 MXML语言是专门用于Flex程序中, ...
相关推荐
Flex学习笔记_09 数据绑定_概念、使用 - Java&Flex - JavaEye技术网站 希望对爱好有帮助!!
本教程是作者精心编写的Flex学习资料,适合初学者入门,通过图文并茂的方式,帮助读者快速掌握Flex的基本概念和核心技能。 1. **Flex基础**:Flex提供了MXML和ActionScript两种编程方式。MXML是一种声明式语言,...
《FLEX学习笔记》 FLEX,全称为Flex Builder,是由Adobe公司开发的一款基于MXML和ActionScript的开源框架,用于构建富互联网应用程序(RIA)。它允许开发者创建具有交互性、响应性和丰富用户体验的Web应用。FLEX的...
在本文中,我们将深入探讨Flex学习过程中的基础语法,特别是从AS2到AS3的变化。 首先,ActionScript 3(AS3)是AS的一个重大升级,它引入了完全的面向对象编程(OOP)概念。这意味着AS3具有类、继承、封装和多态性...
本压缩包“Flex学习笔记.rar”显然是一份针对初学者的教程资料,旨在帮助新接触Flex的开发者快速上手。 在“FlexBeginner.pdf”这份文档中,你可以期待找到以下关键知识点: 1. **Flex概述**:介绍Flex技术的基本...
### Flex新手教程_入门级学习笔记 #### ActionScript核心概念 **ActionScript(简称AS)** 是一种面向对象的编程语言,主要用于开发Flex应用程序。掌握AS的基础知识对于学习Flex至关重要。 ##### 类和对象 (Class...
Flex是Adobe开发的一种用于构建富互联网应用程序(RIA)的开源框架,主要用来创建交互式的用户界面,而Java则是一种广泛应用的编程语言,常用于后端服务开发。这个系统可能将Flex作为前端展示层,Java作为后端数据...
这篇“Flex学习笔记”可能是作者在深入研究Flex技术过程中整理的心得体会和实践案例,结合了《Flex3权威指南》这本书的内容。 在Flex中,ActionScript是核心编程语言,它是基于ECMAScript的一个版本,专门针对富...
Flex事件机制是Adobe Flex应用程序开发中的核心组成部分,它允许组件之间进行有效的通信和交互。对于初级Flex程序员或爱好者来说,理解这一机制至关重要。在本文中,我们将深入探讨Flex事件的各个方面,包括事件流、...
Flex学习笔记1 - 容器布局对象状态的切换和数据绑定 在 Flex 应用程序中,容器布局对象状态的切换是非常常见的需求。例如,在购物车应用程序中,我们可能需要在不同的状态之间切换,例如从商品浏览状态到购物车状态...
本笔记将深入探讨Flex的基本概念、架构、组件、布局管理器以及事件处理机制,帮助初学者全面理解并掌握Flex开发。 1. **Flex简介**:Flex是一种开放源代码的框架,主要用于创建交互式的、基于Web的用户界面。它允许...
Flex是Adobe公司推出的一种用于构建富互联网...随着对Flex的深入学习,开发者将掌握更多高级特性,如数据绑定、动画效果、组件自定义以及与后端服务器的深度集成等,从而能够创建出更复杂、功能丰富的富互联网应用。
Flex学习笔记(flex必知必会).docFlex学习笔记(flex必知必会).doc
Flex学习笔记概述 Flex是一种由Adobe开发的企业级富互联网应用(RIA)的表示层解决方案,其主要目的是提供高度交互和动态的用户体验。Flex的核心在于它的编程语言MXML和ActionScript(AS),这两种语言结合在一起,...
Flex是Adobe公司开发的一种用于...总结,Flex学习笔记涵盖了从基本概念到高级特性的全面介绍,是学习Flex开发的宝贵资源。通过深入学习和实践,你可以掌握创建富互联网应用程序的技能,为用户提供引人入胜的交互体验。
根据提供的信息,我们可以总结出以下关于Flex学习笔记中的关键技术知识点: ### 1. Flex 基础设置 在Flex开发中,通常会涉及到基础样式的设置。例如,在给定的部分内容中提到了字体大小、颜色及背景色的设置。虽然...
Flex ActionScript 学习笔记是关于使用Adobe Flex技术并结合ActionScript 3.0进行开发的知识总结。ActionScript 3.0是随着Flash CS3一起推出的一种强大的编程语言,相较于之前的ActionScript版本,它有着显著的提升...