`
luhantu
  • 浏览: 204461 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Flex Tree & DataGrid 右键菜单

    博客分类:
  • Flex
阅读更多

 项目中经常遇到右键菜单的问题,特别是对于Tree 或者 DataGrid 组建的右键菜单问题。

常见的问题譬如是:Tree 组件对于子节点删除、修改,在folder上显示增加的操作。

                              DataGrid组件选中一项,然后修改或者删除等操作。


1.对于Tree 组件,要对           Tree.contextMenu.addEventListener(ContextMenuEvent.MENU_SELECT,onContextMenuSelectedHandler);

然后在侦听函数中查看ContextMenuEvent的mouseTarget,看看是否TreeItemRenderer,并且TreeItemRenderer的data,就可以知道选中是那个节点,并且知道此节点是否在子节点还是根节点。


2.对于DataGrid组件,要知道右键单击是选中是那一行,要在mouseOver时候调用它的protected 方法:mouseEventToItemRenderer 知道是哪一个ItemRenderer。然后在它的contextMenu监听:

contextMenu.addEventListener(ContextMenuEvent.MENU_SELECT,contextMenu_menuSelectHandler);

在侦听方法中调用它的protected 方法:itemRendererToIndex 把ItemRenderer 转为index值。这个时候就可以让DataGrid选中这个Index,然后用selectedIndex值去处理当前选中的项了。


(注意:1.最多可以向 Flash Player 中的上下文菜单添加 15 个自定义项。AIR 中对上下文菜单中的项数没有明确限制。

2.必须在使用 ContextMenu() 构造函数创建 ContextMenu 对象后才能调用其方法。

        3.还有一点需要注意,就是ContextMenuItem 还有一些限制,具体参考ContextMenuItem API )

 

 

Tree 代码:

 

<?xml version="1.0" encoding="utf-8"?>
<s:VGroup xmlns:fx="http://ns.adobe.com/mxml/2009" 
		  xmlns:s="library://ns.adobe.com/flex/spark" 
		  xmlns:mx="library://ns.adobe.com/flex/mx" width="100%" height="300" xmlns:render="render.*">
	<fx:Script>
		<![CDATA[
			import mx.controls.Alert;
			import mx.controls.listClasses.IListItemRenderer;
			import mx.events.FlexEvent;
			public var newBuildMenuItem:ContextMenuItem;//菜单项变量
			private var itemRendererUnderPoint:IListItemRenderer;
			protected function tree1_creationCompleteHandler(event:FlexEvent):void
			{
				createTreeMenuItem();  
				tree.contextMenu = getTreeContxtMenu();  
				tree.contextMenu.addEventListener(ContextMenuEvent.MENU_SELECT,onContextMenuSelectedHandler);
				
			}
			
			private function onContextMenuSelectedHandler(event:ContextMenuEvent):void
			{
				var tag:Object=event.mouseTarget;
				if(tag && tag.parent && tag.parent.hasOwnProperty("data") && tag.parent.data && (tag.parent.data is XML))
				{
					if((tag.parent.data as XML).children() && (tag.parent.data as XML).children().length() > 0)
					{
						newBuildMenuItem.visible = true;
					}
					else
					{
						newBuildMenuItem.visible = false;
					}
				}
			}
			
			public function createTreeMenuItem(): void//菜单项创建函数,并添加菜单监听器
			{   
				newBuildMenuItem = new ContextMenuItem("Add New Folder"); 
				newBuildMenuItem.visible = false;
				newBuildMenuItem.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, newBuildHandler2);   
			}   
			
			private function getTreeContxtMenu(): ContextMenu//将菜单项目添加到菜单中
			{   
				var contextMenu: ContextMenu = new ContextMenu();   
				contextMenu.hideBuiltInItems();   
				contextMenu.customItems.push(newBuildMenuItem);   
				return contextMenu;   
			}  
			
			public function newBuildHandler2(event:Event):void//点击菜单执行函数
			{
				Alert.show("Add New Folder","Notice");
			}
		]]>
	</fx:Script>
	<fx:Declarations>
		<fx:XMLList id="treeData">
			<node label="Mail Box">
				<node label="Inbox">
					<node label="Marketing"/>
					<node label="Product Management"/>
					<node label="Personal"/>
				</node>
				<node label="Outbox">
					<node label="Professional"/>
					<node label="Personal"/>
				</node>
				<node label="Spam"/>
				<node label="Sent"/>
			</node>
		</fx:XMLList>
		
	</fx:Declarations>
	<render:ContextAdvancedDataGrid width="100%" height="100%"/>//需要ContextAdvancedDataGrid.as 文件哦!
	<mx:Tree id="tree" width="50%" height="100%" labelField="@label"
			 showRoot="false" dataProvider="{treeData}"
			 initialize="tree1_creationCompleteHandler(event)"
			 />
</s:VGroup>

 

ContextAdvancedDataGrid.as 文件(DataGrid 组件)

 

<?xml version="1.0" encoding="utf-8"?>
<mx:AdvancedDataGrid xmlns:fx="http://ns.adobe.com/mxml/2009" 
					 xmlns:s="library://ns.adobe.com/flex/spark" 
					 xmlns:mx="library://ns.adobe.com/flex/mx" initialize="initializeHandler();">
	<fx:Script>
		<![CDATA[
			import mx.collections.ArrayCollection;
			import mx.controls.listClasses.IListItemRenderer;
			
			[Bindable]
			private var dataCollection:ArrayCollection;
			
			private var itemRendererUnderPoint:IListItemRenderer;
			private var newBuildMenuItem:ContextMenuItem;//菜单项变量
			override protected function mouseOverHandler(event:MouseEvent):void
			{
				itemRendererUnderPoint = super.mouseEventToItemRenderer(event);
				// Don't show rollOver effect for Header Items
				if (super.isHeaderItemRenderer(itemRendererUnderPoint))
					return;
				super.mouseOverHandler(event);
			}
			
			private function initializeHandler():void
			{
				var dataArray:Array = 
					[
						{label: "C", displayCode: 1}, 
						{label: "G", displayCode: 2}, 
						{label: "E", displayCode: 1}, 
						{label: "Q", displayCode: 2}, 
						{label: "T", displayCode: 1}, 
					];
				
				dataCollection = new ArrayCollection(dataArray);
				
				createContextMenu();
			}
			
			private function createContextMenu():void
			{
				contextMenu = new ContextMenu();
				contextMenu.hideBuiltInItems();
				contextMenu.addEventListener(ContextMenuEvent.MENU_SELECT,contextMenu_menuSelectHandler);
			}
			
			private function contextMenu_menuSelectHandler(event:ContextMenuEvent):void
			{
				if (itemRendererUnderPoint != null)
				{
					var rightClickIndex:int = super.itemRendererToIndex(itemRendererUnderPoint);
					newBuildMenuItem = new ContextMenuItem("新建");
					contextMenu.customItems.push(newBuildMenuItem);  
					if (selectedIndex != rightClickIndex)
						selectedIndex = rightClickIndex;
				}
				else
				{
					contextMenu.customItems = new Array();
				}
			}
			
		]]>
	</fx:Script>
	<fx:Declarations>
		<!-- Place non-visual elements (e.g., services, value objects) here -->
	</fx:Declarations>
	<mx:dataProvider>
		<mx:HierarchicalData source="{dataCollection}" />
	</mx:dataProvider>
</mx:AdvancedDataGrid>
分享到:
评论

相关推荐

    Flex自定义右键菜单

    在Flex开发中,自定义右键菜单是一项常见的需求,它能为用户界面提供更丰富的交互体验。Flex是一款基于ActionScript 3.0的开源框架,主要用于构建富互联网应用程序(RIA)。在这里,我们将深入探讨如何在Flex中实现...

    WPF分页DataGrid(二)列右键菜单实现

    在"WPF分页DataGrid"中介绍了如何实现分页功能,本文中介绍如果实现右键菜单。点击菜单项Age,将Age列隐藏,再点击则显示;并实现移动列后,同步显示。 详见:...

    EasyUI datagrid+tree右键+window弹出层

    在这个"EasyUI datagrid+tree右键+window弹出层"的示例中,我们将深入探讨这三个核心组件的综合应用。 1. EasyUI Datagrid(数据网格): Datagrid是EasyUI中的一个关键组件,用于展示和管理表格数据。它可以实现...

    Flex4.5导入Excel/csv到DataGrid及DataGrid右键

    本知识点将详细介绍如何在Flex 4.5环境中将Excel和CSV文件导入到DataGrid中,以及如何自定义DataGrid选中行的右键菜单,从而提升用户界面的交互性和实用性。 首先,我们需要了解Flex 4.5中的DataGrid组件。DataGrid...

    EasyUI:基本布局&tree菜单数据的绑定&DataGrid数据查询&数据绑定&分页

    在这个主题中,我们将探讨 EasyUI 的几个核心知识点:基本布局、tree 菜单数据的绑定、DataGrid 数据查询和数据绑定以及分页功能。 首先,我们来看 EasyUI 的基本布局。EasyUI 提供了一套灵活的布局系统,允许...

    在Flex中给datagrid添加右键菜单项的具体实现

    在Flex开发中,给DataGrid添加右键菜单项是一个常见的需求,这允许用户通过鼠标右键触发特定的操作,如编辑、删除或自定义功能。以下是一个详细的教程,讲解如何在Flex项目中实现这一功能。 首先,我们需要创建一个...

    Jquery EasyUI Datagrid右键菜单实现方法

    本文将详细介绍如何在Jquery EasyUI的Datagrid组件中实现右键菜单的功能。 首先,我们需要准备HTML结构,用于展示右键菜单。通过HTML代码,我们可以定义一个隐藏的菜单DIV,并在其中加入具体的菜单项,例如删除和...

    Flex4实现的右键完整功能

    "Flex4实现的右键完整功能"这个主题聚焦于如何利用Adobe Flex 4框架来增强数据网格(DataGrid)组件的交互性,特别是通过鼠标右键菜单实现数据的添加、删除和修改操作。Flex 4是ActionScript 3.0基础上的一个强大的...

    EasyUI的tree及datagrid真实使用范例

    EasyUI 是一个基于 jQuery 的前端框架,用于快速构建用户界面,尤其在开发 Web 应用时,它提供了丰富的组件库,其中包括我们今天要讨论的 Tree 和 DataGrid。这两个组件在数据展示和操作中扮演着重要角色。 Tree ...

    FLEX的datagrid合计、平均值

    在Flex开发中,Datagrid组件是用于展示数据集的一个强大工具,它允许用户以表格的形式查看和操作数据。本文将深入探讨如何在Flex的Datagrid中实现数据的合计与平均值计算,帮助开发者更好地理解和应用这些功能。 ...

    Asp.net2.0创建自定义右键菜单控件源码

    1. DataGrid:在DataGrid中,右键菜单可以提供编辑、删除、复制等针对行或单元格的操作。 2. ListView:对于ListView,右键菜单可以提供添加、编辑、排序等操作。 3. 其他控件:任何可以有上下文操作的控件,如...

    flex中的datagrid的分页定位以及高亮显示

    在Flex开发中,`Datagrid`组件是一种常用的展示数据列表的控件,而分页和数据高亮显示是提升用户体验的重要功能。本篇主要探讨如何在Flex的`Datagrid`中实现分页定位和高亮显示。 首先,分页定位涉及的主要任务是...

    Flex4之DataGrid四个的示例【客户端和服务器端】

    总结起来,"Flex4之DataGrid四个的示例【客户端和服务器端】"这一主题涵盖了使用Flex4的DataGrid组件展示和处理数据的基本技巧,包括客户端数据绑定、服务器端交互以及JSON数据的使用。通过具体的示例,开发者可以...

    Flex-DataGrid源码及资料

    在这个"Flex-DataGrid源码及资料"的压缩包中,包含了一些关键特性,如鼠标右键菜单、鼠标双击编辑、插入复选框以及数据集的双向绑定。下面将对这些功能进行详细介绍。 1. 鼠标右键:在Flex DataGrid中添加鼠标右键...

    C# 实现dataGridView选中一行右键出现菜单的示例代码

    `DataGridView`用于展示数据,而`ContextMenuStrip`则用于显示右键菜单。在设计界面时,可以通过属性窗口设置这两个控件的相关属性。 对于`dataGridView1`,我们需要设置以下属性: 1. `SelectionMode` 属性设置为 ...

    Flex4_DataGrid_Tree_条目渲染器_源码

    在Flex4中,数据展示是应用程序开发中的重要环节,而DataGrid和Tree组件则是Adobe Flex提供的两种常用的数据展示工具。这两个组件允许开发者以表格或树形结构显示数据,提供了丰富的功能和灵活性,使得用户可以更好...

    EasyUI tree 及 DataGrid

    EasyUI 是一个基于 jQuery 的前端框架,主要用于构建用户界面,特别是对于企业级应用而言,它提供了丰富的组件,如对话框、表单、菜单、树形控件(Tree)和数据网格(DataGrid)等。在本项目中,"EasyUI tree 及 ...

    flex组件之DataGrid高级用法实例源码

    在Flex编程领域,DataGrid组件是开发者们常用的数据展示工具,尤其在处理大量结构化数据时,它能提供高效、可定制化的展示效果。本文将深入探讨Flex DataGrid的高级用法,通过实例源码来解析其核心特性,帮助开发者...

Global site tag (gtag.js) - Google Analytics