`
阅读更多
首先提供链接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>

 

  • 大小: 2.5 KB
  • 大小: 5.2 KB
分享到:
评论

相关推荐

    Flex 3完整的右键自定义菜单Demo

    本Demo "Flex 3完整的右键自定义菜单" 正是为此目的而设计,它展示了如何在Flex 3环境中创建、屏蔽默认菜单并实现自定义的右键上下文菜单。 在Flex 3中,我们主要使用mx.controls.ContextMenu类来创建自定义的右键...

    flex自定义右键菜单 完全屏蔽

    在Flex开发中,右键菜单的自定义与屏蔽是一项常见的需求。标题提到的"flex自定义右键菜单 完全屏蔽"是指在Flex应用程序中,不仅实现对默认右键菜单的完全屏蔽,还允许开发者根据自己的需求创建并应用自定义的右键...

    flex 自定义右键菜单 多级右键菜单

    在Flex开发中,自定义右键菜单和实现多级右键菜单是一项常见的需求,它能够为用户界面提供更丰富的交互体验。Flex是一个基于ActionScript 3.0的开放源代码框架,用于构建富互联网应用程序(RIA)。下面我们将深入...

    自定义Flex右键菜单

    在IT行业中,自定义Flex右键菜单是一项常见的需求,它涉及到用户交互体验的优化和界面定制化。Flex是一个基于ActionScript 3.0的开源框架,用于构建富互联网应用程序(RIA)。在这里,我们主要探讨如何在Flex项目中...

    flex右键例子源码

    在这个“flex右键例子源码”中,我们可以深入学习如何在Flex应用程序中实现自定义的右键菜单功能。 1. **ActionScriptProperties**: 这个文件通常包含关于ActionScript编译器的设置,如编译器警告级别、优化选项...

    flex自定义右键菜单

    本篇文章将深入探讨如何在Flex中自定义右键菜单。 一、Flex中的上下文菜单(Context Menu) Flex提供了ContextMenu类,用于创建和管理右键菜单。首先,我们需要创建一个ContextMenuItem对象,然后将其添加到...

    flex屏蔽系统右键菜单 & 自定义菜单

    "flex屏蔽系统右键菜单 & 自定义菜单"这个主题聚焦于如何禁用默认的系统右键菜单并创建自定义的右键菜单,以提供更个性化的用户体验。下面将详细介绍这个过程涉及的关键知识点。 1. Flex环境:Flex是Adobe开发的一...

    flex右键菜单RightClickManager 非Application也可以弹出

    在Flex中实现右键菜单通常有两种方式,一种是通过Flex内置的ContextMenuItem类,另一种是通过第三方库RightClickManager。原生的ContextMenuItem类允许开发者创建和定制右键菜单,但在某些情况下可能不够灵活,例如...

    flex tree控件

    这个“flex tree控件”主题主要关注如何自定义Tree控件的外观,特别是如何去掉默认的图标并添加线连接来增强视觉效果。下面我们将深入探讨Flex Tree控件的基本概念、自定义节点图标以及使用线条连接节点的方法。 1....

    flex3 插件(plugin)安装手顺

    在MyEclipse 上添加Flex3 插件,可以让开发者在MyEclipse 这个强大的Java IDE中进行Flex项目的开发。以下就是详细的安装步骤: 一、所需软件准备: 1. FlexBuilder3 插件版 (FB3_WWEJ_Plugin),通常需要注册并输入...

    flex组件介绍

    `PopupMenu`通常与鼠标右键关联,而`MenuBar`则位于应用程序的顶部,包含了应用程序的主要功能选项。 #### 基于容器的布局规则 Flex中的容器组件,如`VBox`、`HBox`和`Group`,用于组织和管理其他组件的布局。这些...

    create menu for flex .

    在Flex开发过程中,创建自定义的右键菜单是一项非常实用的功能,它能够为用户提供更多的交互选项。本文将基于提供的代码片段来详细解释如何在Flex项目中实现一个基本的右键菜单功能。 #### 标题与描述解析 标题和...

    Flex的RIA应用程序托盘和QQ提醒功能

    开发人员可以创建自定义的托盘图标并添加右键菜单,使用户能够执行特定的操作,如打开/关闭应用、查看通知等。 2. **QQ提醒功能**:这通常指的是在应用程序中实现类似QQ的消息提示窗口,它可以迅速吸引用户的注意力...

    flex3的cookbook书籍完整版dpf(包含目录)

    第一章.Flex与ActionScript基础(3) 1.1节.用FlexBuilder创建Flex项目 1.2节.用FlexBuilder创建Flex库项目 1.3节.创建ActionScript项目 1.4节.在FlexBuilder中设置MXML编译器选项 1.5节.在FlexBuilder外部编译Flex...

    AIR教程-AIR教程

    4. 为托盘图标添加右键菜单,如“退出”和“打开”等选项。 5. 为菜单项添加相应的事件监听器。 6. 完成以上步骤后,你的应用程序就能实现从窗口最小化到托盘,同时托盘图标具有可操作的右键菜单。 例如,你可能...

    Cairngorm框架配置

    2. 完成Web支持添加后,项目的图标会变为Web项目图标。 3. 进行Flex Server配置:右键项目 -&gt; Properties -&gt; Flex Server -&gt; Flex Build Path,确保已正确配置服务器相关信息。 ##### 2.5 测试Flex项目启动 完成...

    AntDesign组件库目录.docx

    - **图标按钮**: 可以将图标与文字相结合,形成图标按钮,提升用户界面的直观性。 - **按钮尺寸**: 支持不同的尺寸调整,如大、中、小等,以适应不同空间的设计需求。 - **不可用状态**: 可以设置按钮为不可用状态,...

    air 打包成 exe

    - 右键点击选择“添加到压缩文件”。 - 在弹出的对话框中,勾选“创建自解压格式压缩文件”,并选择“存储”作为压缩方式,这样可以确保文件不被压缩而保持原样。 - 进入“高级”选项卡中的“自解压选项”,在...

    ActionScript_3.0_Cookbook_中文完整版

    - **自定义类开发:** 提供了一系列技巧与方法,帮助开发者创建符合特定需求的类,从而提高代码复用性。 - **数据和类型格式化:** 介绍了如何对数字、日期等数据进行格式化处理,以便于显示或存储。 - **字符串操作:*...

    EADashboardHelper-crx插件

    如果不存在(显示效果更好)更新30/7/2019-调整了静态flex编辑器以提供对数据类型的更多控制(通过切换按钮分类为字符串,数字或对象/数组)-通过拖动底部使侧面菜单大小可调角落方框更新15/7/2019-通过单击图标可以...

Global site tag (gtag.js) - Google Analytics