Flex tree 添加删除节点

1.节点图标可以通过在xml中指定 icon 属性实现。
例如:
    <mx:Script>  
    [Embed(source="/res/img/icons/dot1.png")]
    public static var feedIcon:Class
    </mx:Script>
   
    <mx:XML id="treeNode" source="TreeNode.xml" format="e4x"></mx:XML>
    <mx:Tree id="tree" iconField="@icon" labelField="@label" dataProvider="{treeNode.node}"></mx:Tree>
   
    TreeNode.xml 的内容:
   
<?xml version='1.0' encoding='utf-8'?>
<menus>
 <node  label="节点" >
   <node icon="feedIcon" label="自定义图标节点"/>
 </node>
</menus>    

2.删除按钮的实现

首先为Tree指定Render类
<mx:Tree id="tree" itemRenderer="TreeRender"  iconField="@icon" labelField="@label" dataProvider="{treeNode.node}"></mx:Tree>

TreeRender类:

public class TreeRender extends TreeItemRenderer 

   public function TreeRender() 
   { 
       super(); 
   } 
    
   protected var delShape:Image;
    
   override protected function createChildren():void 
   { 
       super.createChildren(); 
       delShape= new Image();
       delShape.source="close.png";
       delShape.addEventListener(MouseEvent.CLICK, changeHandler);
       addChild(delShape);
   } 
    
   protected function changeHandler( event:Event ):void 
   { 
       Alert.show("确定要删除吗?", "提示", 3, this, delHandler);
   }
      
   private function delHandler(event:CloseEvent):void {
       if (event.detail==Alert.YES){
               //删除dataProvider中对应节点,算法根据自身情况去写,我这儿只是个例子,不一定适合你
           var tree:Tree=this.owner as Tree;
           var list:XMLListCollection=tree.dataProvider as XMLListCollection;
           var dataSource:XML=list.source.parent();
               for(var i:int=0;i<dataSource.elements("node").length();i++){
                 var xml:XML=dataSource.elements("node")[i];
                 if(xml.attribute("label")==this.label.text){
                   delete dataSource.elements("node")[i];
                 }
               }
         }
         
           //将删除节点后的XMLListCollection重新写入到文件
           var file:File=new File(File.applicationDirectory.nativePath+"/TreeNode.xml");
           var fileIn:FileStream=new FileStream();
           fileIn.open(file,FileMode.WRITE);
           fileIn.writeUTFBytes("<?xml version='1.0' encoding='utf-8'?>/n"+dataSource.toXMLString());
           fileIn.close();
           Alert.show("删除成功!", "提示");
       }
   }
    
   override protected function commitProperties():void 
   { 
       super.commitProperties(); 
   } 
    
   override protected function measure():void 
   { 
       super.measure(); 
       measuredWidth += delShape.getExplicitOrMeasuredWidth(); 
   } 
    
   override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void 
   { 
       super.updateDisplayList(unscaledWidth, unscaledHeight);
       var startx:Number = data ? TreeListData( listData ).indent : 0; 
        
       if (disclosureIcon) 
       { 
           disclosureIcon.x = startx; 
           startx = disclosureIcon.x + disclosureIcon.width; 
           disclosureIcon.setActualSize(disclosureIcon.width,disclosureIcon.height); 
           disclosureIcon.visible = data ? TreeListData( listData ).hasChildren : false; 
       } 
        
       if (icon) 
       { 
           icon.x = startx; 
           startx = icon.x + icon.measuredWidth; 
           icon.setActualSize(icon.measuredWidth, icon.measuredHeight); 
       } 
        
       delShape.move(unscaledWidth-delShape.width, ( unscaledHeight - delShape.height ) / 2 );
       delShape.setActualSize(delShape.measuredWidth, delShape.measuredHeight); 
   } 
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值