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); } }
