- 浏览: 199833 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
sprite:
java -Xdebug -Xrunjdwp:transpor ...
izpack 调试 -
aosnowit:
这里有一套非常不错的 SparkSkin 主题皮肤,更新很频 ...
Flex Skin (Spark) -
sprite:
在windows 7下,需要用admin权限去运行cmd窗口, ...
izpack 调试 -
luhantu:
其实对于非常简单的背景色设置已经够用了……
Flex4 背景设置 -
clschen:
还有一个非主流的方式,直接设置opaqueBackground ...
Flex4 背景设置
项目中经常遇到右键菜单的问题,特别是对于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 取得浏览器hostname
2015-01-03 19:02 892Flash可以被嵌入其他的服务器网页中,如果要flash取得 ... -
Flex4 背景设置
2014-12-02 14:34 1113Flex的spark组件可以用skin来设置组件的背景,但是 ... -
Flex Chart 中用dataFunction对数据进行处理
2014-11-24 16:27 1532在flex中用chart对数据展示时,有时候数据中有空值,但 ... -
Flex DataGrid 动态改变headerRender 属性&itemRender 改变单元格颜色
2014-11-24 15:34 1186很多时候会用到动态改变datagrid的headerRend ... -
Flex SDK 中没有 en_GB 语言包
2014-06-12 17:24 830在Flex国际化中,如果支持en_GB,发现SDK 中根本没 ... -
Flex 在chrome中debug连接不上
2014-05-29 10:47 1282在Chrome 中debug总是连接不上的解决方案 1. ... -
Flex 特效机制
2013-08-15 20:59 844Flex的动画效果由一个工厂类(Factory)和一 ... -
Flex 绑定机制 (ChangeWatcher & BindingUtils )
2013-08-13 12:24 2779Flex的绑定机制也是一个亮点,对于数据和显示分离提供很好 ... -
Flex 深复制 浅复制
2013-08-09 15:26 1507对于基本类型,无所谓深浅复制。 深浅复制只要是对于引用类型 ... -
Flex States 应用
2013-08-09 11:23 1407这几天做项目重构,发现一个蹊跷的问题,A类基础B类,本来不 ... -
Loader 与SWFLoader 区别
2013-07-31 14:14 1417在Flex中可以通过Loader ... -
Flex ApplicationDomain
2013-07-31 11:09 974如果要说这个已经是一个非常长的篇幅,网上七零八落的介绍也非 ... -
Flex 截图
2013-07-26 13:44 2967Flex提供了两种方法截图,一个是BitmapData的dr ... -
继承父类并继承父类的控件
2013-07-25 15:40 1989在Flex当中,如果父类已经拥有了子元素,然后你再继承这个 ... -
Flex 带时间的DateField的
2013-07-19 17:32 4402需要做一个带时间的DateField控件。不做啰嗦,直接上 ... -
View Stack + TabBar 校验
2013-07-19 17:17 1214程序中用到view Stack + tabBar导航的导航的 ... -
Flex chart 改变图表元素的颜色
2013-06-08 16:08 4368Flex 有许许多多的chart组件,他们的父类都是Cha ... -
FlexUnit4
2013-09-25 13:30 939前些日子试用了FlexUnit4,发现真的非常的不错,非常 ... -
在flash中捕获所有的报错 (Catch All Exception in Flash)
2013-03-07 10:31 1868在Flash Player 10.1及以上版本中,adobe ... -
Flex3与Flex4 类结构图
2012-12-24 16:59 0Flex3 和 Flex4中的显示对象都是继承自UICompo ...
相关推荐
Flex自定义右键菜单
在"WPF分页DataGrid"中介绍了如何实现分页功能,本文中介绍如果实现右键菜单。点击菜单项Age,将Age列隐藏,再点击则显示;并实现移动列后,同步显示。 详见:...
用户在每次使用的时候,都需要去先选中一条或者多条数据,然后在去点按钮进行相关操作,这样其实还是很麻烦的,做项目的过程中,为了用户着想,做了一个右键菜单,用户想要删除或者编辑某一条数据直接在其位置上右键...
EasyUI:基本布局&tree菜单数据的绑定&DataGrid数据查询&数据绑定&分页
Flex Builder4.5导入Excel和CSV文件到DataGrid中,并自定义DataGrid选中行的右键
Flex中如何给datagrid添加右键菜单项,其实很简单,下面有个不错的教程,感兴趣的朋友可以参考下
flex中的datagrid的分页定位以及高亮显示
EasyUI datagrid+tree右键+window弹出层综合运用
flex动态生成datagrid表头,外加linechart的简单操作,值得学习!
FLEX的datagrid合计、平均值,很好的例子代码拿来就可以用
在FLEX4中开发带有过滤功能的DATAGRID组件
flex中dataGrid导出数据到excel中,不存在乱码问题
EasyUI的tree及datagrid的综合应用
flex组件之DataGrid高级用法实例源码
提供:Flex4 的 DataGrid 组件,Tree组件 的基本使用和事件。 并 附:自定义条目渲染器 使用
DataGridView中的右键菜单 及对单元格中内容类型的判断
右键对Datagrid空间进行,增删改操作,尽量将代码简单化
Flex 动态给DataGrid增加行,可编辑行数据
内含数据库 及存储过程 主要以easyUI+JQuery+Ajax 实现后台数据交互的tree 及DataGrid 希望能帮到你的学习!