Tree 添加右键菜单,并确定这个选中的右键索引,以及菜单的操作

本文档详细介绍了如何在ActionScript中为Tree组件添加自定义右键菜单,包括创建、更新和删除菜单项,并展示了如何获取被选中的树节点以及执行相应的操作。同时,还涉及到右键点击索引的确定以及对不可操作节点的处理。

 

 

private var createItem: ContextMenuItem;  

private var deleteItem: ContextMenuItem;  

private var updateItem: ContextMenuItem;  

 

private function init():void

{

treeMenu();

}

 

/////////////////////////

 

private function rightClickEvent(e:Event):void{    

treeMenu();

        }

        

//这里是找到右键点击的索引值

        private function onRightClicked(e:ContextMenuEvent):Object

        {

         var rightClickItemRender:IListItemRenderer;  

   var rightClickIndex:int;

   if(e.mouseTarget is IListItemRenderer) {  

       rightClickItemRender = IListItemRenderer(e.mouseTarget);  

   }else if(e.mouseTarget.parent is IListItemRenderer) {  

       rightClickItemRender = IListItemRenderer(e.mouseTarget.parent);  

   }  

 

   if(rightClickItemRender != null) {  

       rightClickIndex = tree.itemRendererToIndex(rightClickItemRender);  

       if(tree.selectedIndex != rightClickIndex) {  

              tree.selectedIndex = rightClickIndex; 

}

       }  

//树节点的xml

       var globalItem:Object = tree.selectedItem; 

var node:XML = (globalItem as XML)

if (node.@id != undefined)

return globalItem;

else{

Alert.show("此节点不可操作");

return null;

   }  

   return null;

//    trace("通过右键单击获得选定的行: " + tree.selectedIndex);     

        }

//添加菜单

private function treeMenu(): void{  

                createTreeMenuItem();  

                tree.contextMenu = getTreeContxtMenu();  

            //    tree.contextMenu.addEventListener(ContextMenuEvent.MENU_SELECT, onRightClicked); 

        }  

  

public function createTreeMenuItem(): void{  

                createItem = new ContextMenuItem("新建");  

                createItem.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, createItemHandler);

                updateItem = new ContextMenuItem("更改");  

                updateItem.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, updateItemHandler);

                deleteItem = new ContextMenuItem("删除");  

                deleteItem.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, deleteItemHandler);

        }  

        

        private function createItemHandler(e:ContextMenuEvent):void{

        

         var item:Object = onRightClicked(e);

         //doCreate();

         if (item != null)

         {

         showAdd.visible = true;

         addNode.focusEnabled = true;      

         }

 

        }

        

        private function deleteItemHandler(e:ContextMenuEvent):void{

         var item:Object = onRightClicked(e);

         if (item != null)

         doDestory(item.@name);

         else

         return;

        }

        

        private function updateItemHandler(e:ContextMenuEvent):void{

         var item:Object = onRightClicked(e);

         if (item != null)

         {//这里是将要编辑节点的位置

         tree.editable = true;

          tree.editedItemPosition = {columnIndex:0, rowIndex:tree.selectedIndex};

          tree.addEventListener(ListEvent.ITEM_EDIT_END, itemEditEndHandler);

       }

         else

         return;

        }

          

        private function getTreeContxtMenu(): ContextMenu{  

            var contextMenu: ContextMenu = new ContextMenu();  

            contextMenu.hideBuiltInItems();  

            contextMenu.customItems.push(createItem);  

            contextMenu.customItems.push(deleteItem);  

            contextMenu.customItems.push(updateItem); 

            return contextMenu;  

        }          

        

private function itemEditBeginHandler(event: ListEvent): void{ 

var targetTree: Tree = Tree(event.target); 

var item:XML = new XML(targetTree.selectedItem); 

 

if(item.@editabled == "false"){

event.preventDefault(); //主要是这句 

//更改节点内容

 

public function itemEditEndHandler(event:ListEvent):void { 

event.preventDefault(); 

 

var newValue = event.currentTarget.itemEditorInstance.text; 

doUpdate(newValue);

tree.destroyItemEditor(); 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值