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