`

Flex使用拖放

阅读更多
   所有的Flex组件都支持拖放操作,一些子集组件还带有其他的拖放功能,为这些组件添加一个属性就可以实现拖放。在Flex里实现拖放是利用的拖放操作管理器及其提供的工具,如下介绍拖放操作管理器:

 
术语定义
拖拽初始器从中拖拽出组件的组件或项目
拖拽源拖拽的数据
格式拖拽源的属性,允许能否将一个对象释放到另一个对象上。拖拽源中的数据与格式相关联。格式的数据类型为就简单的字符串
拖拽处理 拖拽过程显示的图片
释放目标接受释放拖拽代理的组件


拖放操作有3个阶段:
A、 初始化
B、 拖拽
C、 释放

   根据拖放支持, Flex组件可以分为两类: 增强型拖放功能组件和非增强型拖放功能组件
下面是给予列表的控件都支持增强型的拖拽功能:

DataGrid
PrintDataGrid
Tree
Menu
List
HorizontalList
TileList
  对于开发者而言,当使用增强型拖放控件来实现拖拽时,工作会非常简单。很多情况下,只需要对参与拖放的组件设置一个属性即可。

   参见试验例子:

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
			   xmlns:s="library://ns.adobe.com/flex/spark"
			   xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"
			  >
	<s:layout>
		<s:BasicLayout/>
	</s:layout>
	<fx:Declarations>
		<!-- 将非可视元素(例如服务、值对象)放在此处 -->
		<fx:XMLList xmlns="">
			<mx:XMLList id="employees">
				<employee>
					<name>Christina Coenraets</name>
					<phone>555-219-2270</phone>
					<email>ccoenraets@fictitious.com</email>
					<active>true</active>
				</employee>
				<employee>
					<name>Joanne Wall</name>
					<phone>555-219-2012</phone>
					<email>jwall@fictitious.com</email>
					<active>true</active>
				</employee>
				<employee>
					<name>Maurice Smith</name>
					<phone>555-219-2012</phone>
					<email>maurice@fictitious.com</email>
					<active>false</active>
				</employee>
				<employee>
					<name>Mary Jones</name>
					<phone>555-219-2000</phone>
					<email>mjones@fictitious.com</email>
					<active>true</active>
				</employee>
			</mx:XMLList>

		</fx:XMLList>
	</fx:Declarations>
	
	<fx:Script>
		<![CDATA[
			import mx.collections.ArrayCollection;
			import mx.core.DragSource;
			import mx.core.IUIComponent;
			import mx.events.DragEvent;
			import mx.managers.DragManager;
			[Bindable]
			private var dataSource:ArrayCollection = new ArrayCollection([{name:"yao",age:23},
				{name:"sun",age:18},{name:"tom",age:40}]);
			
			[Bindable]
			private var targetList:ArrayCollection = new ArrayCollection();
			[Bindable]
			private var myTargetList:ArrayCollection = new ArrayCollection();
			private function init():void{
				//targetDr.dataProvider = targetGridDs;
			}
			
			private function doDragDrop(event:DragEvent):void{
				var dgRow:Object = new Object();
				dgRow = event.dragSource.dataForFormat("items");
				list.dataProvider.addItem(dgRow[0].name);
				event.preventDefault();
			}
			
			private function  dragIt(initiator:Label,dsData:String,event:MouseEvent,format:String):void{
				var ds:DragSource = new DragSource();
				ds.addData(dsData,format);
				DragManager.doDrag(initiator, ds, event);
			}
			
			private function dragEnter(event:DragEvent,format:String):void{
				if(event.dragSource.hasFormat(format)){
					DragManager.acceptDragDrop(IUIComponent(event.target));
				}
			}
			
			private function doDragDrop2(event:DragEvent,format:String):void{
			     var myLabelData:Object = new Object();
				 myLabelData = event.dragSource.dataForFormat(format);
				 mylist.dataProvider.addItem(myLabelData);
			}
		]]>
	</fx:Script>
	
	<mx:DataGrid x="102" y="111" dataProvider="{dataSource}" dragEnabled="true">
		<mx:columns>
			<mx:DataGridColumn headerText="名字" dataField="name"/>
			<mx:DataGridColumn headerText="年龄" dataField="age"/>
			
		</mx:columns>
	</mx:DataGrid>
	<mx:Spacer height="50" width="100%"/>
	<mx:DataGrid x="110" y="289" dropEnabled="true" id="targetDr"
				>
		<mx:columns>
			<mx:DataGridColumn headerText="列 1" dataField="name"/>
			<mx:DataGridColumn headerText="列 2" dataField="age"/>
			<mx:DataGridColumn headerText="列 3" dataField="col3"/>
		</mx:columns>
	</mx:DataGrid>
	<s:List x="339" y="111" dropEnabled="true" dataProvider="{targetList}"
			id="list" dragDrop="doDragDrop(event)"><!--list的dataProvider若不赋初值则会报错-->
	</s:List>
	<s:Label x="457" y="97" text="拖我呀" id="testLabel" name="myLabel"
			  mouseDown="dragIt(testLabel,'My data here',event,'myformat')"/>
	
	<s:List x="457" y="128" dragEnter="dragEnter(event,'myformat')" id="mylist"
			dragDrop="doDragDrop2(event,'myformat')" dataProvider="{myTargetList}">
	</s:List>
</s:Application>


  上文中的例子包括三个部分: 从dataGrid拖放到dataGrid, 从dataGrid拖放到list,从label拖放到List
  
   注意: 后两部分必须显式地初始化释放目标的dataProvider,也即list控件中的
dataProvider="{targetList}"和dataProvider="{myTargetList}">,否则会报引用空对象的错误。

——————————————拖拽的相关事件——————————————————
       拖拽初始事件
拖拽事件描述
mouseDown和mouseMove在没有使用dragEnabled组件时,MouseEvent类的事件也用来启动拖放过程。当用户鼠标选择控件并按下鼠标不放时,广播mouseDown事件,移动则...
dragComplete事件...

     释放目标事件
拖拽事件   描述
dragEnter 当拖拽代理从不妙外部移到目标上方时广播
dragOver在dragEnter事件后,当用户把鼠标移到目标上方时广播
dragDrop当在目标上方时释放鼠标广播
dragExit当把数据拖放到目标外部没有释放时广播


————————————非增强型的重要拖拽类————————————————
   DragSource类的方法
  请自行查看API

 
分享到:
评论

相关推荐

    Flex 3 拖放实现

    在 Flex 3 中,常用的方法是使用 `Clipboard` 类,它可以存储各种类型的数据,包括文本、图像和自定义对象。在源对象中,你将数据放入 `Clipboard`;在目标对象中,你从 `Clipboard` 中取出数据。 5. **Web 形式与 ...

    Flex3组件拖放教程

    ### Flex3组件拖放教程知识点总结 #### 一、关于组件拖放 拖放功能是Flex3中一种非常实用的功能,它可以实现用户界面元素的直观交互。通过拖放操作,用户能够选择一个对象(例如`List`控件或Flex中的`Image`控件)...

    Flex3+组件拖放教程

    `DragManager` 是Flex中全局的拖放管理器,负责处理所有的拖放操作,而`DragSource` 则是定义拖放源的类,它定义了被拖动的数据以及与之相关的视觉效果。 首先,要实现拖放操作,你需要设置一个可拖动的组件。这...

    flex中 Tree树节点内部拖动实例(此实例限制了什么节点可以拖动及拖动到什么位置)

    这个实例涉及的是在Flex中的Tree组件实现节点的内部拖放功能,这对于创建交互式用户界面,尤其是数据层级结构的展示非常有用。在本文中,我们将详细探讨如何在Flex的Tree组件中实现节点的拖放操作,并且限制可拖动的...

    flex 拖拽效果程序

    总之,Flex的拖放功能是提升用户交互体验的重要工具,通过合理使用DragManager和UIComponent的API,开发者可以轻松地创建出功能强大且用户体验优良的拖放程序。通过深入学习和实践,开发者可以掌握这一强大的功能,...

    flex 使用swc 包

    2. **组件**:Flex组件是UI元素,如按钮、文本框等,它们预先封装好了样式和行为,开发者可以直接拖放到应用程序中使用。 3. **资源**:包括图片、字体、样式表等,这些资源可以被多个组件或类共享。 4. **元数据**...

    Flex4权威指南+随书源代码+Flexbuild使用工具

    本博客提供的所有教程的资源原稿均来自于互联网,仅供学习交流之用,切勿进行...13. 使用拖放 14. 实现导航 15. 使用格式化器和验证器 16. 使用样式定制Flex应用 17. 使用皮肤定制Flex应用 18. 自定义ActionScript组件

    Flex拖拽控件效果

    在Flex中,实现拖放(Drag and Drop)功能主要涉及两个核心类:`DragManager`和`DragInitiator`。`DragManager`是系统级别的服务,负责管理整个应用的拖放操作,而`DragInitiator`通常是一个可拖动的UI组件,如...

    Flex拖拽库flex拖拽库

    3. 第三方库:除了Flex自身的拖放支持,还有一些第三方库,如DragAndDropLib,提供了更高级的功能和定制选项,例如复杂的拖放规则、多层嵌套的拖放等。 综上所述,Flex的拖放功能是其强大用户界面设计能力的一部分...

    Flex关于拖拽编程

    为了限制拖放范围,可以设置`allowDrop`属性或使用`dragConstraint`属性来指定拖动边界。`dragConstraint`可以是一个矩形区域,也可以是相对于拖动源的位置。 7. **结束拖放**: 拖放结束后,会触发`dragComplete...

    flex 拖拽的例子

    `.flexProperties`, `.project`, `.settings`, `libs`, `html-template`, `src` 可能包含了实现拖放功能的源代码、项目配置和资源文件,通过查看这些文件,可以更深入地学习和实践Flex拖放功能的实现。

    flex 拖拽功能 中文文档

    以下是一个使用Flex的拖放功能将一个`List`控件中的条目移动到另一个`List`控件的简单示例代码: ```xml &lt;!-- dragdrop\SimpleListToListMove.mxml --&gt; creationComplete="initApp();"&gt; &lt;![CDATA[ import mx...

    Flex基础培训-6-拖放与过滤

    ### Flex基础培训-6-拖放与过滤 #### 拖放操作概念 在现代的交互设计中,拖放操作是一种极为常见的数据处理方式。它不仅简化了用户的操作流程,还提高了应用程序的用户体验。例如,在Windows操作系统中,我们可以...

    flex_api (FLEX接口)

    开发者可以通过拖放或编写代码来使用这些组件,快速构建用户界面。Flex API提供对这些组件的访问和自定义,允许开发者扩展和定制组件行为。 5. **数据绑定** Flex API支持数据绑定,这意味着UI组件可以直接与数据...

    Flex教程 ppt格式 简单实用

    使用列表和表格.ppt第11章 使用组合框、步进器.ppt第12章 使用拖放.ppt第13章 界面布局.ppt第14章 使用图表.ppt第15章 使用定制组件.ppt第16章 定制界面.ppt第17章 数据处理和数据服务.ppt第18章 PRC服务.ppt第19章 ...

    flex3一个简单购物车拖拽的例子

    7. **Flex Builder**:Flex3的开发通常使用Flex Builder IDE,它提供了图形化的设计界面和代码编辑器,方便开发者快速构建和调试Flex应用程序。 通过学习这个示例,开发者可以理解如何在Flex3中实现拖放功能、如何...

    Flex4实现拖拽功能

    同时,可以使用DragManager的clearDragSource()方法来清除拖动源,避免意外的再次拖放。 ```actionscript targetContainer.addEventListener(DragEvent.DRAG_ENTER, handleDragEnter); function handleDragEnter...

    flex拓扑示例(可以拖动)

    Flex是Adobe公司开发的一种基于ActionScript ...通过学习这个"flex拓扑示例(可以拖动)",你可以深入了解Flex的拖放机制,提升你在Flex应用开发中的交互设计能力。同时,它也是理解Flex组件和事件模型的一个实用案例。

    flex中拖拉拽好实例objecthandles

    总的来说,"flex中拖拉拽好实例objecthandles"是一个关于Flex拖放机制的实践案例,特别强调了ObjectHandle组件的使用,这对于开发具有高度交互性的Flex应用来说是非常有价值的。通过分析和学习这个实例,开发者能够...

    Flex 拖拽例子 从不同组件间拖拽

    在Flex中,拖放(Drag and Drop)功能是一个常见的用户交互模式,允许用户通过鼠标操作将一个对象从一个位置移动到另一个位置,通常在不同的组件之间。这种功能在各种类型的应用程序中都很常见,例如文件管理器、...

Global site tag (gtag.js) - Google Analytics