首先提供链接blog.sina.com.cn/s/blog_685ff0dc0100pmy6.html 感谢这位博主,参考他的博文之后做出来的。附件两张图片,一张为右键效果图,一张为右键菜单点击事件测试图
由于他的的代码是从项目中抠出来的,所以部分方法和对象连不上,贴上自己试验成功的代码。前期工作,如.as文件的下载和修改请参照上面的链接,xmlns部分的代码看这就行了(注释部分请跳过,为上面连接处的无用代码)
<?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" xmlns:local="*" minWidth="1000" minHeight="650" creationComplete="init()"> <s:layout> <s:BasicLayout/> </s:layout> <fx:Declarations> <!-- 将非可视元素(例如服务、值对象)放在此处 --> </fx:Declarations> <fx:Script> <![CDATA[ import com.siloon.plugin.rightClick.RightClickManager; import mx.controls.Alert; import mx.controls.Menu; import mx.controls.listClasses.IListItemRenderer; import mx.events.FlexEvent; import mx.events.MenuEvent; [Event(name="rightClick",type="flash.events.ContextMenuEvent")] [Embed("images/tree0.png")] private var treeImg0:Class;//此处请写自己的图片路径[Embed("自己图片路径")] [Embed("images/tree1.png")] private var treeImg1:Class; [Embed("images/tree2.png")] private var treeImg2:Class; [Embed("images/tree3.png")] private var treeImg3:Class; [Embed("images/tree4.png")] private var treeImg4:Class; [Embed("images/tree5.png")] private var treeImg5:Class; [Embed("images/tree6.png")] private var treeImg6:Class; protected var rightClickRegisted:Boolean=false; private var menu:Menu; protected function init():void { if(!rightClickRegisted){ RightClickManager.regist(); rightClickRegisted=true; } tree.addEventListener(RightClickManager.RIGHT_CLICK,LableRightClickHandler); } private function LableRightClickHandler(event:ContextMenuEvent):void{ label_onRightClicked(event); label_removeMenu(); label_InitMenu(); } private function label_onRightClicked(event:ContextMenuEvent):void{ var rightClickItemRender:IListItemRenderer; var rightClickIndex:int; if(event.mouseTarget is IListItemRenderer){ rightClickItemRender=IListItemRenderer(event.mouseTarget); } else if(event.mouseTarget.parent is IListItemRenderer){ rightClickItemRender=IListItemRenderer(event.mouseTarget.parent); } if(rightClickItemRender !=null){ } } private function label_removeMenu():void{ if(menu!=null){ menu.hide(); menu.removeEventListener(MenuEvent.ITEM_CLICK,label_MenuItemSelected); menu=null; } } private function label_InitMenu():void{ menu=Menu.createMenu(this,label_createMenuItems(),false); menu.iconField="itemIcon"; menu.labelField="label"; menu.variableRowHeight=true;//此处为不统一行高,看附件图片可以看到右键菜单高度不一 menu.addEventListener(MenuEvent.ITEM_CLICK,label_MenuItemSelected);//给菜单一个监听事件 var point:Point=new Point(mouseX,mouseY);//此部分为显示右键菜单 point =localToGlobal(point); menu.show(point.x,point.y); } private function label_createMenuItems():Array{//此处为添加右键菜单选项及图片 var menuItems:Array=new Array(); var menuItem1:Object=new Object; menuItem1.label="刷新"; menuItem1.itemIcon=this.treeImg0; menuItems.push(menuItem1); var menuItem2:Object=new Object; menuItem2.label="关闭"; menuItem2.itemIcon=this.treeImg1; menuItems.push(menuItem2); return menuItems; } private function label_MenuItemSelected(event:MenuEvent):void{//菜单被选中触发此方法 var menuItem:Object=event.menu.selectedItem as Object; switch(menuItem.label){ case"刷新":Alert.show("hello,event has worked!"); break; } } /* protected function init():void { // TODO Auto-generated method stub if(!rightClickRegisted){ RightClickManager.regist(); rightClickRegisted=true; } tree.addEventListener(RightClickManager.RIGHT_CLICK,treeRightClickHandler); } private function treeRightClickHandler(event:ContextMenuEvent):void{ tree_onRightClicked(event); tree_removeMenu(); tree_InitMenu(); } private function tree_onRightClicked(event:ContextMenuEvent):void{ var rightClickItemRender:IListItemRenderer; var rightClickIndex:int; if(event.mouseTarget is IListItemRenderer){ rightClickItemRender=IListItemRenderer(event.mouseTarget.parent); } if(rightClickItemRender !=null){ rightClickIndex=tree.itemRendererToIndex(rightClickItemRender); if(tree.selectedIndex !=rightClickIndex){ tree.selectedIndex=rightClickIndex; } } } private function tree_removeMenu():void{ if(menu!=null){ menu.hide(); menu.removeEventListener(MenuEvent.ITEM_CLICK,tree_MenuItemSelected); menu=null; } } private function tree_InitMenu():void{ menu=Menu.createMenu(this,tree_createMenuItems(),false); menu.iconField="itemIcon"; menu.labelField="label"; menu.variableRowHeight=true; menu.addEventListener(MenuEvent.ITEM_CLICK,tree_MenuItemSelected); var point:Point=new Point(mouseX,mouseY); point=localToGlobal(point); menu.show(point.x,point.y); } private function tree_createMenuItems():Array{ var menuItems:Array=new Array(); var menuItem:Object; menuItem=new Object; menuItem.label="刷新"; menuItem.itemIcon=this.treeImg0; menuItems.push(menuItem); var currentItem:XML=tree.selectedItem as XML; var depth:Number=GetDepth(currentItem); if(depth==0){ if(GetRootNode(currentItem).attribute("tag").toString()=="gyfasctz"||GetRootNode(currentItem).attribute("tag").toString()=="myfasctz"||GetRootNode(currentItem).attribute("tag").toString()=="szfasctz"){ FascRightMenu(menuItems); } else{ LctypeRightMenu(menuItems); } } return menuItems; } public function SetTreeIcon(item:Object):*{ var itemXml:XML=item as XML; switch(itemXml.attribute("imgIndex").toString()) { case "0": return treeImg0; break; case "1": return treeImg1; break; case "2": return treeImg2; break; case "3": return treeImg3; break; case "4": return treeImg4; break; case "5": return treeImg5; break; case "6": return treeImg6; break; default: break; } } private function FascRightMenu(menuItems:Array):void{ var menuItem:Object=new Object; menuItem.label="添加台账"; menuItem.itemIcon=this.treeImg1; menuItems.push(menuItem); } private function LctypeRightMenu(menuItems:Array):void { var menuItem:Object = new Object; menuItem.label = "新增一次审批"; menuItem.itemIcon = this.treeImg2; menuItems.push(menuItem); } private function tree_MenuItemSelected(event:MenuEvent):void{ var menuItem:Object=event.menu.selectedItem as Object; //................................... switch(menuItem.label) { case"刷新": //............... break; //.......................... } } private function GetDepth(item:XML):Number { if(item.parent()==null) { return -1;/**因为有root节点,不算其深度*/ /* } else { return GetDepth(item.parent())+1; }} private function GetRootNode(item:XML):XML { while(item.parent()!=null && (item.parent() as XML).parent()!=null) { item=item.parent(); } return item; } */ ]]> </fx:Script> <!-- <mx:Tree id="tree" left="10" top="151" bottom="10" width="272" doubleClickEnabled="true" dropShadowVisible="false" iconFunction="SetTreeIcon" labelField="@value" showRoot="false"> </mx:Tree--> <!-- <mx:Tree id="xmTree" left="9" top="6" width="272" height="141" doubleClickEnabled="true" dropShadowVisible="false" iconFunction="SetTreeIcon" labelField="@value" showRoot="false"> </mx:Tree>--> <s:Label id="tree" text="rightClick here" height="25%" width="100%" fontSize="20"/> </s:Application>