博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[Flex] 组件Tree系列 —— 实现右键拓展功能
阅读量:4616 次
发布时间:2019-06-09

本文共 12586 字,大约阅读时间需要 41 分钟。

主程序mxml:

1 
2 3
4 5
9
10 28 29 30 31 32 33 ; 34 if (!rightClickRegisted){ 35 TreeRightClickManager.regist(); 36 rightClickRegisted = true; 37 } 38 //加载右击事件 39 tree.addEventListener(TreeRightClickManager.RIGHT_CLICK,treeRightClickHandler); 40 } 41 42 /** 43 *树右击事件 44 **/ 45 private function treeRightClickHandler(event:ContextMenuEvent):void 46 { 47 tree_onRightClicked(event); 48 tree_removeMenu(); 49 tree_InitMenu(); 50 } 51 52 53 private function tree_onRightClicked(e:ContextMenuEvent):void 54 { 55 var rightClickItemRender:IListItemRenderer; 56 var rightClickIndex:int; 57 if(e.mouseTarget is IListItemRenderer) 58 { 59 rightClickItemRender = IListItemRenderer(e.mouseTarget); } 60 61 else if(e.mouseTarget.parent is IListItemRenderer) 62 { 63 rightClickItemRender = IListItemRenderer(e.mouseTarget.parent); 64 } 65 if(rightClickItemRender != null) 66 { 67 rightClickIndex = tree.itemRendererToIndex(rightClickItemRender); 68 if(tree.selectedIndex != rightClickIndex) 69 { 70 tree.selectedIndex = rightClickIndex; 71 } 72 } 73 } 74 75 /** 76 * 删除右键菜单 77 **/ 78 private function tree_removeMenu():void 79 { 80 if(menu!=null) 81 { 82 menu.hide(); 83 menu.removeEventListener(MenuEvent.ITEM_CLICK,tree_MenuItemSelected); 84 menu=null; 85 } 86 } 87 88 /** 89 * 生成右键菜单 90 **/ 91 private var selectedId:String=""; 92 private var selectedLabel:String=""; 93 private function tree_InitMenu():void 94 { 95 var currentItem:XML=tree.selectedItem as XML; 96 selectedId=currentItem.@id; 97 selectedLabel=currentItem.@label; 98 var level:String=currentItem.@level; 99 100 menu = Menu.createMenu(this, tree_createMenuItems(level), false);101 menu.iconField="itemIcon";//右键菜单的图标102 menu.labelField="label"; //右键菜单的名称 103 menu.variableRowHeight = true; 104 menu.addEventListener(MenuEvent.ITEM_CLICK, tree_MenuItemSelected); //右键菜单的事件105 var point:Point = new Point(mouseX,mouseY); 106 point = localToGlobal(point); 107 menu.show(point.x,point.y); //显示右键菜单108 }109 110 111 /**112 * 根据节点不同,生成不同的菜单113 **/114 private function tree_createMenuItems(level:String):Array 115 116 { 117 var menuItems:Array = new Array();118 var menuXs:Object= new Object; 119 menuXs.label = '刷新';120 //menuXs.itemIcon = this.menu_TZ_add; //给菜单加图标121 menuItems.push(menuXs);122 var menuExpand:Object=new Object();123 menuExpand.label="展开当前节点";124 menuItems.push(menuExpand);125 var menuClose:Object=new Object();126 menuClose.label="关闭当前节点";127 menuItems.push(menuClose);128 var menuExpandAll:Object=new Object();129 menuExpandAll.label="展开所有节点";130 menuItems.push(menuExpandAll);131 var menuCloseAll:Object=new Object();132 menuCloseAll.label="关闭所有节点";133 menuItems.push(menuCloseAll);134 switch(level){135 case "0":136 var menuAddNj:Object = new Object; 137 menuAddNj.label = "添加明星";138 menuItems.push(menuAddNj);139 var menuDelNj:Object=new Object();140 menuDelNj.label="删除明星";141 menuItems.push(menuDelNj);142 break;143 case "1":144 var menuAddBj:Object=new Object();145 menuAddBj.label="添加年份";146 menuItems.push(menuAddBj);147 var menuDelBj:Object=new Object();148 menuDelBj.label="删除年份";149 menuItems.push(menuDelBj);150 var menuAddStu:Object=new Object();151 menuAddStu.label="添加影片";152 menuItems.push(menuAddStu);153 break;154 case "2":155 var menuEditStu:Object=new Object();156 menuEditStu.label="修改影片";157 menuItems.push(menuEditStu);158 var menuDelStu:Object=new Object();159 menuDelStu.label="删除影片";160 menuItems.push(menuDelStu);161 break;162 } 163 164 return menuItems;165 166 }167 /**168 * 点击菜单,相应方法 169 **/170 private function tree_MenuItemSelected(event:MenuEvent):void171 172 {173 var menuItem:Object = event.menu.selectedItem as Object;174 switch(menuItem.label)175 {176 case "展开当前节点":177 nodeExpand();178 break;179 case "关闭当前节点":180 nodeClose();181 break;182 case "展开所有节点":183 nodeExpandAll();184 break;185 case "关闭所有节点":186 nodeCloseAll();187 break;188 case "删除影片":189 delStuNode();190 break;191 case "添加影片":192 addStuNode();193 break;194 195 }196 }197 198 199 private function treeChanged(event:Event):void{200 var selectedTreeNode:XML;201 selectedTreeNode=Tree(event.target).selectedItem as XML;202 //Alert.show("您点击了:"+selectedTreeNode.@label,"提示");203 204 }205 206 /**207 * 展开当前节点208 **/209 private function nodeExpand():void{ 210 tree.expandItem(tree.selectedItem,true); 211 }212 213 /**214 * 关闭当前节点215 **/216 private function nodeClose():void{ 217 tree.expandItem(tree.selectedItem,false);218 219 } 220 221 /**222 * 展开所有节点223 **/224 private function nodeExpandAll():void{225 for each(var item:XML in tree.dataProvider) {226 tree.expandChildrenOf(item,true); 227 }228 }229 230 /**231 * 关闭所有节点232 **/233 private function nodeCloseAll():void{234 //方法1:studentTree.openItems = [];235 //方法2:236 for each(var item:XML in tree.dataProvider) {237 tree.expandChildrenOf(item,false);238 }239 }240 241 /**242 * 删除节点243 **/244 private function delStuNode():void{245 Alert.show("删除影片 ID="+selectedId+" 名称="+selectedLabel,"提示",4,null,ok);246 function ok():void247 {248 var delStuItemPar:Object=new Object();249 delStuItemPar=tree.selectedItem.parent();250 var delStuInx:int=tree.selectedItem.childIndex();251 tree.dataDescriptor.removeChildAt(delStuItemPar,tree.selectedItem,delStuInx,tree.dataProvider); 252 }253 254 }255 256 /**257 * 添加影片258 **/259 private function addStuNode():void{260 var node:XML=;261 (tree.selectedItem as XML).appendChild(node); 262 }263 264 ]]>265
266
267
268
269
270
271
272
View Code

 

com.render.TreeRightClickManager类:

 

1 package com.render  2 {  3     import flash.display.InteractiveObject;  4     import flash.events.ContextMenuEvent;  5     import flash.events.MouseEvent;  6     import flash.external.ExternalInterface;  7       8     import mx.core.Application;  9     import mx.core.FlexGlobals; 10      11     public class TreeRightClickManager 12     { 13         static private var rightClickTarget:*; 14         static public const RIGHT_CLICK:String = "rightClick"; 15         static private const javascript:XML =  16             ; 85          86         public function TreeRightClickManager() 87         { 88             return; 89         } 90          91         static public function regist() : Boolean 92         { 93             if (ExternalInterface.available) 94             { 95                 ExternalInterface.call(javascript, ExternalInterface.objectID); 96                 ExternalInterface.addCallback("rightClick", dispatchRightClickEvent); 97                 //Application.application.addEventListener(MouseEvent.MOUSE_OVER,mouseOverHandler); 98                 FlexGlobals.topLevelApplication.addEventListener(MouseEvent.MOUSE_OVER,mouseOverHandler); 99                 100             }101             return true;102         }103         104         static private function mouseOverHandler(event:MouseEvent) : void105         {106             rightClickTarget = InteractiveObject(event.target);  107             return;  108         }109         110         static private function dispatchRightClickEvent() : void111         {112             var event:ContextMenuEvent;113             if(rightClickTarget !=null)  114             {  115                 event =new ContextMenuEvent(RIGHT_CLICK,true,false, rightClickTarget as InteractiveObject, rightClickTarget as InteractiveObject);  116                 rightClickTarget.dispatchEvent(event);  117             }118             return;119         }120         121     }122 }
View Code

 

 

 

注:必须在index.template.html设置params.wmode = "opaque"以屏蔽flash右键

转载于:https://www.cnblogs.com/frost-yen/p/4308756.html

你可能感兴趣的文章
jfinal相关
查看>>
Photoshop | 快速抠头发(调整边缘/选择并遮住)
查看>>
转载:EM算法的最精辟讲解
查看>>
Python忽略warning警告错误
查看>>
Matlab中颜色线形和形状
查看>>
Matlab中ismember用法
查看>>
任意给定一个大于等于10的整数A,请写一程序,以最小的时间复杂度找出比A小并且最接近A的一个整数B。要求:A的每位之和与B的每位之和相等 例:如果A=123 那么B=114...
查看>>
wpf 自定义 无边框 窗体 resize 实现
查看>>
网站优化-HTML关键词代码使用
查看>>
Alpha版总结会议——班级派
查看>>
封装localStorage和cookie的方法
查看>>
as3效率提升
查看>>
Luogu P1563 [NOIp2016提高组]玩具谜题 | 模拟
查看>>
BeautifulSoup4的使用方法
查看>>
文件查看命令
查看>>
OpenCV探索之路(十五):角点检测
查看>>
5-36 复数四则运算
查看>>
记MFC关于子窗口、父窗口最大最小化的设置
查看>>
【转载】《代码大全2》读书笔记之…
查看>>
[Android]天气App 3 网络数据的请求和Json解析
查看>>