Flex tree 添加删除节点

    技术2022-05-18  31

    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)