zoukankan      html  css  js  c++  java
  • Flex 如何获得Tree 拖动节点的起始位置

    测试页面

    <?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">
     <fx:Declarations>
      <!-- 将非可视元素(例如服务、值对象)放在此处 -->
     </fx:Declarations>
     <fx:Script>
      <![CDATA[
       import mx.collections.ArrayCollection;
       import mx.core.DragSource;
       import mx.events.DragEvent;
       [Bindable]
       private var treeData:Object =
        {
         "name":"根节点",
         "value":"root",
         children:[
          {
           "name":"子1","value":1,
           "children":
           [
            {"name":"子11","value":11}
            ,{"name":"子12","value":12}
           ]
          }
          ,{
           "name":"子2","value":2,
           "children":
           [
            {"name":"子21","value":21}
            ,{"name":"子22","value":22}
           ]
          }
          ,{"name":"子3","value":3}
         ]
        };
       
       private var dragItems:Array=null;
       
       /**
        * 用户在放置目标上释放鼠标时由放置目标分派。
        可以使用此事件处理函数将拖动数据添加到放置目标。
        */
       protected function tree1_dragDropHandler(event:DragEvent):void
       {
        // TODO Auto-generated method stub
        //event.preventDefault();
        var tree:Tree = event.target as Tree;//树控件
        var draggedFormat:String = event.dragSource.formats[0];      
        var draggedItems:Array = event.dragSource.dataForFormat(draggedFormat) as Array;    
        var dropIndx:int = tree.calculateDropIndex(event);    
        var dragParm:DragParam = new DragParam();
        getDragParam(draggedItems,tree.dataProvider[0],dragParm);    
        
        tips.text = "dragged Item:"+draggedItems[0].name+
         "\n from  parent: "+dragParm.parent.name+"\n"+
         "from  childindx: "+dragParm.indx;
        
        dragItems = draggedItems;
        
       }
       
       /**
        * 在拖动操作完成时(将拖动的数据放到放置目标时或在没有执行放置操作的情况下结束拖放操作时)
        * 由拖动启动器(作为要拖动的数据源的组件)分派。
        */
       protected function tree1_dragCompleteHandler(event:DragEvent):void
       {
        if(dragItems!=null)
        {
         var tree:Tree = event.target as Tree;//树控件
         var dragParm:DragParam = new DragParam();
         getDragParam(dragItems,tree.dataProvider[0],dragParm);    
         
         tips.text += "\nto  parent: "+dragParm.parent.name+"\n"+
          "to  childindx: "+dragParm.indx;
        }
       }
       
       private function getDragParam(dragItems:Array,datasouce:Object,dragParam:DragParam):void
       {
        var dragItem:Object = dragItems[0];    
        if(dragItem.value == datasouce.value)//根节点
        {
         dragParam.indx = -1;
         dragParam.parent = null;
         return ;
        }
        
        if(("children" in datasouce)==false)
         return ;
        
        for(var i:int = 0 ;i<datasouce.children.length;i++)
        {
         var child:Object = datasouce.children[i];
         if(child.value == dragItem.value)
         {
          dragParam.indx = i;
          dragParam.parent = datasouce;
          break;
         }
         getDragParam(dragItems,child,dragParam);
        }
        
       }
       

       
      ]]>
     </fx:Script>
     <s:HGroup width="100%">
      <mx:Tree id="testTree" width="200" height="400" dragMoveEnabled="true"
         dropEnabled="true"
         dataProvider="{treeData}" dragEnabled="true"
         labelField="name"
         dragDrop="tree1_dragDropHandler(event)"
         dragComplete="tree1_dragCompleteHandler(event)"
         >
      </mx:Tree>
      <s:Label  id="tips" width="200" />
     </s:HGroup>
     
      
     
    </s:Application>

     辅助类 用处不大

    package
    {
    
    	public class DragParam
    	{
    		public function DragParam()
    		{
    		}
    		
    		
    		public var parent:Object;
    		
    		public var indx:int = -1;
    		
    		
    	}
    }
    

  • 相关阅读:
    Java 8 Stream流编程学习
    AMD R5 2400G插帧教程
    GCC编译Win图形程序不显示控制台方法
    Linux程序守护脚本
    远程桌面软件RDCMan汉化版
    Java基础知识点
    Java的String类常用方法
    Apache Commons 相关工具类使用
    基于OpenCV的双目视觉匹配测距系统
    异想家Ubuntu安装的软件
  • 原文地址:https://www.cnblogs.com/yixinliu/p/2348201.html
Copyright © 2011-2022 走看看