Flex中Tree的用法备忘(增删改查节点)

本文介绍了一种使用 Flex 中的 XMLTree 控件构建动态树形结构的方法。通过解析 XML 数据源并将其显示为树形结构,用户可以方便地浏览和操作数据。文章详细解释了如何初始化 Tree 控件、响应选择变化、添加和删除节点等操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<?xml version="1.0" encoding="utf-8" ?> 
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="doInit()" fontSize="15">
<mx:HDividedBox right="5" left="5" bottom="5" top="114">
<mx:TextArea height="100%" width="100%" wordWrap="false" id="textarea">
<mx:text>
<![CDATA[ 
<node label="菜单">
 <node label="瑰姿艳逸"/>
 <node label="气若幽兰"/>
 <node label="华容婀娜"/>
    <node label="翩若惊鸿"/>
    <node label="其他">
        <node label="婉若游龙"/>
        <node label="荣曜秋菊"/>
        <node label="华茂春松">
         <node label="明眸善睐"/>
         <node label="腰如约素"/>
         <node label="瑰姿艳逸"/>
        </node>
    </node>
</node>
 
  ]]> 
  </mx:text>
  </mx:TextArea>
  <mx:Tree width="100%" height="100%" labelField="@label" id="tree" change="onChange()" allowMultipleSelection="true" /> 
  </mx:HDividedBox>
  <mx:Button x="10" y="10" label="设置Tree的Model" click="refresh1()" /> 
<mx:Script>
<![CDATA[ 
  import mx.controls.Alert;
  import flash.utils.setTimeout;
  import mx.collections.*;
  private function onChange():void {
   if(tree.selectedItem!=null) {
    var xml:XML=tree.selectedItem as XML;
    addText.text=xml.@label;
   }
  }
  private function doInit():void {
   refresh1();
  }
  private function refresh1():void {
   var list:XMLList=null;
   try {
    list=new XMLList(textarea.text);
   } catch (e:Error) {
    Alert.show("xml模型非法");
   }
   if(list!=null) {
    tree.dataProvider=list;
    tree.validateNow();
    setTimeout(expandAll,100);  
   }    
  }
  private function expandAll():void {
   tree.selectedIndex=0;
   //trace(tree.selectedIndex);
   if(tree.selectedItem!=null) {
    //trace(tree.selectedItem);
    tree.expandChildrenOf(tree.selectedItem,true);
   }
  }
  private function addAfter():void {
   var xml:XML=tree.selectedItem as XML;
   var text:String=addText.text;
   if(xml!=null && text.length>0) {
    var parent:XML=xml.parent();
    if(parent!=null) {
     var child:XML=new XML("<node label=\"\"/>");
     child.@label=text;
     parent.insertChildAfter(xml,child);
    } else {
     Alert.show("不能选中根节点");
    }
   } else {
    Alert.show("需要先选中节点和填入文字");
   }
  }
  private function addBefore():void {
   var xml:XML=tree.selectedItem as XML;
   var text:String=addText.text;
   if(xml!=null && text.length>0) {
    var parent:XML=xml.parent();
    if(parent!=null) {
     var child:XML=new XML("<node label=\"\"/>");
     child.@label=text;
     parent.insertChildBefore(xml,child);
    } else {
     Alert.show("不能选中根节点");
    }
   } else {
    Alert.show("需要先选中节点和填入文字");
   }   
  }
  private function addSub():void {
   var xml:XML=tree.selectedItem as XML;
   var text:String=addText.text;
   if(xml!=null && text.length>0) {
    var child:XML=new XML("<node label=\"\"/>");
    child.@label=text;
    xml.appendChild(child);
    tree.expandChildrenOf(xml,true);
   } else {
    Alert.show("需要先选中节点和填入文字");
   }   
  }
  private function delSel():void {
   var xml:XML=tree.selectedItem as XML;
   if(xml!=null) {
    var list:Array=tree.selectedItems as Array;
    for(var k:int=0;k<list.length;k++) {
     xml=list[k] as XML;
     var parent:XML=xml.parent();
     if(parent!=null) {
      var children:XMLList=parent.children();
      for(var i:int=0;i<children.length();i++) {
       if(children[i]==xml) {
        delete children[i];
        break;
       }
      }
     } else {
      Alert.show("不能选中根节点");
     }
    }
   } else {
    Alert.show("需要先选中节点");
   }   
  }
  private function modifyLabel():void {
   var xml:XML=tree.selectedItem as XML;
   var text:String=addText.text;
   if(xml!=null && text.length>0) {
    xml.@label=text;
   } else {
    Alert.show("需要先选中节点");
   }   
  }
  private function selAll():void {
   var text:String=searchText.text;
   if(text.length>0) {
    var items:Array=[];
    var list:XMLList=new XMLList();
    list[0]=tree.dataProvider[0];    
    searchItems(list,text,items);
    tree.selectedItems=items;
   } else {
    Alert.show("输入查找的文字");
   }
  }
  private function searchItems(list:XMLList,find:String,items:Array):void {
   for(var i:int=0;i<list.length();i++) {
    var one:XML=list[i];
    var label:String=one.@label;
    if(label!=null && label.indexOf(find)>=0) {
     items.push(one);
    }
    searchItems(one.children(),find,items);
   }
  }
  
 
  ]]> 
  </mx:Script>
  <mx:Label x="10" y="46" text="增加节点:" /> 
  <mx:TextInput x="90" y="44" width="127" id="addText" /> 
  <mx:Button x="225" y="44" label="增加为弟" click="addAfter()" /> 
  <mx:Button x="323" y="44" label="增加为哥" click="addBefore()" /> 
  <mx:Button x="421" y="44" label="增加为孩子" click="addSub()" /> 
  <mx:Button x="193" y="10" label="删除选中节点" click="delSel()" /> 
  <mx:Button x="563" y="44" label="修改标签" click="modifyLabel()" /> 
  <mx:TextInput x="124" y="76" width="127" id="searchText" text="华" /> 
  <mx:Text x="259" y="78" text="的节点" /> 
  <mx:Button x="10" y="76" label="选中包含:" click="selAll()" /> 
  </mx:Application>


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值