Flex tree增加,删除,查询并定位节点

转自:http://blog.csdn.net/likblog/article/details/7399708

直接上代码:

[html]  view plain copy print ?
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"  
  3.                xmlns:s="library://ns.adobe.com/flex/spark"  
  4.                xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"  
  5.                >  
  6.     <fx:Script>  
  7.         <![CDATA[ 
  8.             import mx.collections.XMLListCollection; 
  9.             import mx.controls.Alert; 
  10.              
  11.             [Bindable] 
  12.             [Embed(source="images/open.png")] 
  13.             public var folderOpen:Class; 
  14.              
  15.             [Bindable] 
  16.             [Embed(source="images/close.png")] 
  17.             public var folderClose:Class; 
  18.              
  19.             [Bindable] 
  20.             [Embed(source="images/file.png")] 
  21.             public var fileInfo:Class; 
  22.              
  23.             [Bindable] 
  24.             private var company:XML= 
  25.             <department> 
  26.                 <department name="部门A"> 
  27.                     <department name="小A" /> 
  28.                     <department name="小B" /> 
  29.                 </department> 
  30.                  
  31.                 <department name="部门B"> 
  32.                     <department name="小C"> 
  33.                         <department name="abc"> 
  34.                             <department name="efg"/> 
  35.                         </department> 
  36.                         <department name="opqr"/> 
  37.                         <department name="小D"> 
  38.                             <department name="ff"/> 
  39.                         </department> 
  40.                     </department> 
  41.                 </department> 
  42.             </department>; 
  43.              
  44.             [Bindable] 
  45.             private var companyData:XMLListCollection=new XMLListCollection(company.department); 
  46.              
  47.             private function addNode():void 
  48.             { 
  49.                 // 新建节点 
  50.                 var newNode:XML=<employee/>; 
  51.                 newNode.@name=empName.text; 
  52.                 // 添加节点 
  53.                 var xml:XML=XML(tree1.selectedItem); 
  54.                 if (xml.length() > 0) 
  55.                 { 
  56.                     xml[0].appendChild(newNode); 
  57.                     tree1.expandChildrenOf(tree1.selectedItem,true); 
  58.                 } 
  59.             } 
  60.              
  61.             private function removeNode():void 
  62.             { 
  63.                 if (tree1.selectedItem != null) 
  64.                 { 
  65.                     var node:XML=XML(tree1.selectedItem); 
  66.                     Alert.show("根节点不能删除!","[错误]"); 
  67.                     //if(tree.dataDescriptor.root){ 
  68.                         ///Alert.show("根节点不能删除!","[错误]"); 
  69.                         //return; 
  70.                     //} 
  71.                     var nodeP:XML=node.parent(); 
  72.                     var childrenList:XMLListCollection=new XMLListCollection(XMLList(nodeP).children()); 
  73.                     var i:Number=childrenList.getItemIndex(node); 
  74.                     childrenList.removeItemAt(i); 
  75.                     if(childrenList.length == 0) 
  76.                         tree1.selectedItem = nodeP; 
  77.                     else{ 
  78.                         if(i == childrenList.length) 
  79.                             i = i - 1; 
  80.                         tree1.selectedItem = childrenList.getItemAt(i) 
  81.                     } 
  82.                      
  83.                 }else{ 
  84.                     Alert.show("请选中一个节点再进行删除!"); 
  85.                 } 
  86.             } 
  87.              
  88.             /* 
  89.              * 根据节点名字模糊查询 
  90.             */ 
  91.             private function findNode(key:String):void { 
  92.                 //descendants()返回除了根节点以外的所有节点,然后根据条件筛选符合条件的结果集 
  93.                 var list:XMLList  = company.descendants().(@name.indexOf(key) != -1); 
  94.                 expandParents(list[0]); 
  95.                 tree1.selectedItem = list[0]; 
  96.             } 
  97.             /* 
  98.              * 展开 
  99.             */ 
  100.             private function expandParents(xmlNode:XML):void { 
  101.                 while (xmlNode.parent() != null) {   
  102.                     xmlNode = xmlNode.parent(); 
  103.                     tree1.expandItem(xmlNode,true, false); 
  104.                 } 
  105.             } 
  106.              
  107.             //展开所有 
  108.             private function expandAll():void { 
  109.                 tree1.expandChildrenOf(tree1.dataProvider[0],true); 
  110.             } 
  111.              
  112.             //收起所有 
  113.             private function closeAll():void { 
  114.                 tree1.expandChildrenOf(tree1.dataProvider[0],false); 
  115.             } 
  116.              
  117.         ]]>  
  118.     </fx:Script>  
  119.     <s:layout>  
  120.         <s:HorizontalLayout horizontalAlign="center" verticalAlign="middle"/>  
  121.     </s:layout>  
  122.     <s:Panel title="实现添加和删除节点"  
  123.               width="450"  
  124.               height="450"  
  125.               >  
  126.     <s:layout>  
  127.         <s:HorizontalLayout/>  
  128.     </s:layout>  
  129.         <mx:Tree id="tree1"   
  130.                  dataProvider="{company}"   
  131.                  labelField="@name"  
  132.                  height="300" showRoot="false"  
  133.                  width="260"  
  134.                  defaultLeafIcon="{fileInfo}"  
  135.                  folderOpenIcon="{folderOpen}"  
  136.                  folderClosedIcon="{folderClose}"  
  137.                  />  
  138.         <mx:VBox>  
  139.             <s:Button label="展开所有" click="expandAll()"/>  
  140.             <s:Button label="关闭所有" click="closeAll()"/>  
  141.             <mx:Button label="删除节点" click="removeNode();"/>  
  142.             <mx:HBox>  
  143.                 <s:TextInput id="empName"  
  144.                               width="60"  
  145.                               click="{empName.text = ''}"  
  146.                               prompt="新节点名"  
  147.                               />  
  148.                 <mx:Button label="添加节点"  
  149.                            click="addNode();"/>  
  150.             </mx:HBox>      
  151.             <mx:HBox>  
  152.                 <s:TextInput id="keyName"  
  153.                               width="60"  
  154.                               prompt="关键字"/>  
  155.                 <mx:Button label="查找节点"  
  156.                            click="findNode(keyName.text)"/>  
  157.             </mx:HBox>  
  158.         </mx:VBox>  
  159.     </s:Panel>  
  160. </s:Application>  
里面有设置展开和关闭和文件的图片
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值