flex动态添加树的叶子节点的实现

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、付费专栏及课程。

余额充值