1.tree的拖拉
?
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
????<mx:Script>
????????<![CDATA[
?????????import mx.events.ListEvent;
????????????import mx.controls.Alert;
????????????import mx.controls.Label;
????????????import mx.controls.List;
????????????import mx.collections.ArrayCollection;
????????????import mx.core.DragSource;
????????????import mx.controls.Tree;
????????????import mx.controls.DataGrid;
????????????import mx.controls.listClasses.ListBase;
????????????import mx.events.DragEvent;
????????????import mx.containers.Canvas;
????????????import mx.managers.DragManager;
????????????import mx.core.UIComponent;
???????
????????????[Bindable]
????????????private var dataGridProvider:ArrayCollection = new ArrayCollection();
???????????
????????????private function onDragEnter( event:DragEvent) : void
????????????{???????????
???????????????//Alert.show("22");
??????????????
????????????????if( event.dragInitiator is Tree ) {????//dragInitiator启动拖动的组件
????????????????????var ds:DragSource = event.dragSource;??//包含正在拖动的数据的 DragSource 对象。
????????????????????if( !ds.hasFormat("treeItems") ) return;?????// no useful data
????????????????????var items:Array = ds.dataForFormat("treeItems") as Array;
????????????????????for(var i:Number=0; i < items.length; i++) {
????????????????????????var item:XML = XML(items[i]);
????????????????????????if(?item.@type?!= "restaurant" ) return; // not what we want
????????????????????}
????????????????}
??????????????// If the Tree control passes or the dragInitiator is not a Tree control,
?????????????// accept the drop.
????????????DragManager.acceptDragDrop(UIComponent(event.currentTarget));
????????????}???????
???????????
????????????private function onDragOver( event:DragEvent ) : void
????????????{
??????????????
??????????????// Alert.show("11");
????????????????if( event.dragInitiator is Tree ) {
????????????????????DragManager.showFeedback(DragManager.COPY); //设置拖放操作的反馈指示符
????????????????} else {
????????????????????if (event.ctrlKey)
????????????????????DragManager.showFeedback(DragManager.COPY);
????????????????????else if (event.shiftKey)
????????????????????????DragManager.showFeedback(DragManager.LINK);
????????????????????else {
????????????????????????DragManager.showFeedback(DragManager.MOVE);
????????????????????}
????????????????}
????????????}???????
???????????
????????????private function onDragExit( event:DragEvent ) : void
????????????{
?????????????//??Alert.show("f");
????????????????var dropTarget:ListBase=ListBase(event.currentTarget);??
????????????dropTarget.hideDropFeedback(event);
????????????}
???????????
????????????private function onGridDragDrop( event:DragEvent ) : void
????????????{
????????????????var ds:DragSource = event.dragSource;
????????????????var dropTarget:DataGrid = DataGrid(event.currentTarget);
????????????????var arr:Array;
???????????????// Alert.show("r");
????????????????if( ds.hasFormat("items") ) {
????????????????????arr = ds.dataForFormat("items") as Array;
????????????????} else if( ds.hasFormat("treeItems") ) {
????????????????????arr = ds.dataForFormat("treeItems") as Array;
????????????????}
????????????????for(var i:Number=0; i < arr.length; i++) {
????????????????????var node:XML = XML(arr[i]);
????????????????????var item:Object = new Object();
????????????????????item.label =?node.@label;
????????????????????item.type??=?node.@type;
????????????????????dataGridProvider.addItem(item);
????????????????}
????????????????onDragExit(event);
????????????}
???????????
????????????private function onTreeDragComplete(event:DragEvent):void {
????????????????event.preventDefault();??//取消doubleClick 事件
????????????}???????
???????????
????????????private function selectAllMaybe( event:KeyboardEvent ) : void
????????????{
????????????????if( event.ctrlKey && event.keyCode == 65 ) {
????????????????????var l:List = List(event.currentTarget);
????????????????????var allItems:Array = new Array(l.dataProvider.length);
????????????????????for(var i:Number=0; i < allItems.length; i++) {
????????????????????????allItems[i] = i;
????????????????????}
????????????????????l.selectedIndices = allItems;
????????????????}
????????????}
???????????
?????????????[Bindable]??
????????????public var selectedNodeArr:Object;??
????????????public function handle(e:ListEvent):void{
???????????
????????????trace("11");
??????????????// dataGridProvider=Tree(e.target).selectedItem as ArrayCollection;??
????????????trace(Tree(e.target).selectedItem as Object);
????????????}
???????????
????????]]>
????</mx:Script>
????<mx:XML id="treeData" xmlns="">
????????<root>
????????????<node label="Massachusetts" type="state" data="MA">
????????????????<node label="Boston" type="city" >
????????????????????<node label="Smoke House Grill" type="restaurant" />
????????????????????<node label="Equator" type="restaurant" />
????????????????????<node label="Aquataine" type="restaurant" />
????????????????????<node label="Grill 23" type="restaurant" />
????????????????</node>
????????????????<node label="Provincetown" type="city" >
????????????????????<node label="Lobster Pot" type="restaurant" />
????????????????????<node label="The Mews" type="restaurant" />
????????????????</node>
????????????</node>
????????????<node label="California" type="state" data="CA">
????????????????<node label="San Francisco" type="city" >
????????????????????<node label="Frog Lane" type="restaurant" />
????????????????</node>
????????????</node>
????????</root>
????</mx:XML>
???????
????<mx:Label x="34" y="40" text="Drag items from this Tree"/>
????<mx:Label x="34" y="55" text="(items are copied)"/>
????<mx:Tree x="34" y="81" width="181" height="189"
????????dataProvider="{treeData.node}"
????????labelField="@label"
????????dropEnabled="false"
????????dragEnabled="true"
????????dragComplete="onTreeDragComplete(event)"
????????dragMoveEnabled="false"
?????????change="handle(event)"
????????/>
????????<!--
????????dropEnabled : Boolean
用于指定是否可将拖动项目拖放到图表上的标志。??
?
dragEnabled : Boolean
指定是否可以将项目拖出此图表并将其拖放到其它控件上。
?-->
????<mx:Label x="291" y="55" text="Drop items from Tree here"/>
????<mx:DataGrid x="291" y="81" height="189"
????????dragEnabled="true"
????????dataProvider="{dataGridProvider}"
????????dragEnter="onDragEnter(event)"
????????dragOver="onDragOver(event)"
????????dragDrop="onGridDragDrop(event)"
????????dragExit="onDragExit(event)">
????????<mx:columns>
????????????<mx:DataGridColumn headerText="Label" dataField="label"/>
????????????<mx:DataGridColumn headerText="Type" dataField="type"/>
???????</mx:columns>???</mx:DataGrid></mx:Application>