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

被折叠的 条评论
为什么被折叠?



