转载自:http://blog.csdn.net/youqishini/article/details/8008459
每次使用网盘如“115网盘”时都可以使用定制的右键菜单很是方便,都想在WEB中怎么实现这个右键菜单呢?到现在也没有摸清楚。不过,右键菜单在Flex中却可以很容易就实现了。
Flex中创建右键菜单现实内容的类是ContextMenuItem类。ContextMenuItem 类表示上下文菜单中的项。每个ContextMenuItem 对象都有一个显示在上下文菜单中的标题(文本)。要向上下文菜单中添加新项,需要将其添加到 ContextMenu 对象的 customItems 数组。 利用 ContextMenuItem 类的属性,您可以启用或禁用特定菜单项,也可以显示或隐藏菜单项。可以为 menuItemSelect 事件编写事件处理函数,以便在用户选择菜单项时为其添加功能。
当然,定义右键菜单可以定制全局右键菜单,也可以定制特有的右键菜单,例如只有在DataGrid上才显示一个菜单,但是在其他地方则不显示。下面这段代码为本人写的一个小demo:
[html] view plaincopyprint?
<?xmlversionxmlversion="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" minWidth="955" minHeight="600" creationComplete="app_creationCompleteHandler(event)">
<fx:Script>
<![CDATA[
import flash.utils.clearInterval;
import flash.utils.setInterval;
import mx.collections.ArrayCollection;
import mx.collections.IList;
import mx.controls.Alert;
import mx.controls.dataGridClasses.DataGridItemRenderer;
import mx.core.FlexGlobals;
import mx.events.CloseEvent;
import mx.events.FlexEvent;
import mx.events.ListEvent;
[Bindable]private var contextMenuCustomItems:Array;
[Bindable]private var cm:ContextMenu;
[Bindable]private var songList:ArrayCollection=new ArrayCollection([
{showName:'恋上另一个人',songer:'游鸿明',filmName:'chirsyu_lslygr.flv'},
{showName:'一天一万年',songer:'游鸿明',filmName:'chirisyu_ytywn.flv'},
{showName:'下沙',songer:'游鸿明',filmName:'chirisyu_xs.flv'},
{showName:'五月的雪',songer:'游鸿明',filmName:'chirisyu_wydx.flv'},
{showName:'楼下那个女人',songer:'游鸿明',filmName:'chirisyu_lxngnr.flv'},
{showName:'白色恋人',songer:'游鸿明',filmName:'chirisyu_bslr.flv'}
]);
protected function app_creationCompleteHandler(event:FlexEvent):void
{
// TODOAuto-generated method stub
Alert.okLabel="确定";
Alert.yesLabel="是";
Alert.cancelLabel="否";
var aboutUserMenu:ContextMenuItem=new ContextMenuItem("关于我们",true,true);
aboutUserMenu.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT,aboutUserMenuHandler);
contextMenuCustomItems=FlexGlobals.topLevelApplication.contextMenu.customItems;
contextMenuCustomItems.push(aboutUserMenu);
var linkMenu:ContextMenuItem=new ContextMenuItem("联系作者",true,true);
linkMenu.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT,linkHandler);
contextMenuCustomItems.push(linkMenu);
}
private function aboutUserMenuHandler(event:ContextMenuEvent):void{
Alert.show("我的网盘 V1.0","提示");
}
protected function showList_clickHandler(event:MouseEvent):void
{
var obj:Object=showList.selectedItem;
var fileName:String=obj['showName']
if(fileName!=""){
createContextMenu("删除歌曲",buyHandler);
showList.contextMenu=cm;
}
}
private function linkHandler(event:ContextMenuEvent):void{
Alert.show("QQ:996475895","提示");
}
private function createContextMenu(menuName:String,fun:Function):void
{
cm = new ContextMenu();
cm.hideBuiltInItems();
var customItemsArr:Array = new Array();
var customMenuItem:ContextMenuItem = newContextMenuItem(menuName,true,true);
customMenuItem.addEventListener("menuItemSelect", fun);
customItemsArr.push(customMenuItem);
cm.customItems = customItemsArr;
}
private function buyHandler(event:ContextMenuEvent):void
{
var showName:String=showList.selectedItem['showName'];
Alert.show('确实要删除歌曲"'+showName+'"吗?',"提示",Alert.YES|Alert.CANCEL,this,yesOrCancleHandler,null,Alert.CANCEL);
}
private function yesOrCancleHandler(event:CloseEvent):void{
if(event.detail==Alert.YES){
var index:int=showList.selectedIndex;
songList.removeItemAt(index);
showList.dataProvider=songList;
}
}
]]>
</fx:Script>
<fx:Declarations>
<!-- Place non-visualelements (e.g., services, value objects) here -->
</fx:Declarations>
<mx:DataGrid id="showList" x="228" y="97" width="563" height="355"
click="showList_clickHandler(event)"dataProvider="{songList}" fontSize="16" fontWeight="bold">
<mx:columns>
<mx:DataGridColumn headerText="歌曲名" dataField="showName" width="250"/>
<mx:DataGridColumn headerText="演唱者" dataField="songer" />
<mx:DataGridColumn headerText="链接地址" dataField="filmName" visible="false" />
</mx:columns>
</mx:DataGrid>
</s:Application>
此文件创建了一个全局右键菜单和一个局部右键菜单:当鼠标没有选择DataGird数据时显示的是“关于我们”,“联系作者”这两个菜单,当选中了DataGird的一个数据时则显示“删除歌曲”右键菜单。
当然,右键菜单的命名也是有规则的,如下所示:
向上下文菜单添加的自定义菜单项不得超过 15 个。
每个标题至少必须包含一个可见字符。
控制字符、换行符和其他空白字符将被忽略。
任何标题的长度都不能超过 100 个字符。
与任何内置菜单项或其他自定义菜单项相同的标题将被忽略,不管匹配的菜单项是否可见。菜单标题在与内置标题或现有自定义标题比较时将不考虑大小写、标点符号或空白。
不允许使用以下标题,但可以将这些词与其它词结合使用以形成自定义标题(例如,尽管不允许使用“粘贴”,但却允许使用“粘贴感觉良好”):
Save
Zoom In
Zoom Out
100%
Show All
Quality
Play
Loop
Rewind
Forward
Back
Movie not loaded
About
Print
Show Redraw Regions
Debugger
Undo
Cut
Copy
Paste
Delete
Select All
Open
Open in new window
Copy link
不管是本身还是与其它词结合使用,以下任何一个词都不能出现在自定义标题中:
Adobe
Macromedia
Flash Player
Settings
注意:如果播放器运行在非英语系统上,标题字符串将同时与英语列表和对应的本地化字符串进行比较。例如我开始直接添加了“删除”。结果怎么都添加不上,原来“删除”与“Delete”是对应的。后来改成了“删除歌曲”才添加成功的!
不过有一个小小的遗憾的,如果将此DataGrid添加到一个容器如Panel中时,右键菜单则失效,原因是Flex只有顶级容器才能创建右键菜单,后续我在看看这种情况下的右键菜单创建。
每次使用网盘如“115网盘”时都可以使用定制的右键菜单很是方便,都想在WEB中怎么实现这个右键菜单呢?到现在也没有摸清楚。不过,右键菜单在Flex中却可以很容易就实现了。
Flex中创建右键菜单现实内容的类是ContextMenuItem类。ContextMenuItem 类表示上下文菜单中的项。每个ContextMenuItem 对象都有一个显示在上下文菜单中的标题(文本)。要向上下文菜单中添加新项,需要将其添加到 ContextMenu 对象的 customItems 数组。 利用 ContextMenuItem 类的属性,您可以启用或禁用特定菜单项,也可以显示或隐藏菜单项。可以为 menuItemSelect 事件编写事件处理函数,以便在用户选择菜单项时为其添加功能。
当然,定义右键菜单可以定制全局右键菜单,也可以定制特有的右键菜单,例如只有在DataGrid上才显示一个菜单,但是在其他地方则不显示。下面这段代码为本人写的一个小demo:
[html] view plaincopyprint?
<?xmlversionxmlversion="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" minWidth="955" minHeight="600" creationComplete="app_creationCompleteHandler(event)">
<fx:Script>
<![CDATA[
import flash.utils.clearInterval;
import flash.utils.setInterval;
import mx.collections.ArrayCollection;
import mx.collections.IList;
import mx.controls.Alert;
import mx.controls.dataGridClasses.DataGridItemRenderer;
import mx.core.FlexGlobals;
import mx.events.CloseEvent;
import mx.events.FlexEvent;
import mx.events.ListEvent;
[Bindable]private var contextMenuCustomItems:Array;
[Bindable]private var cm:ContextMenu;
[Bindable]private var songList:ArrayCollection=new ArrayCollection([
{showName:'恋上另一个人',songer:'游鸿明',filmName:'chirsyu_lslygr.flv'},
{showName:'一天一万年',songer:'游鸿明',filmName:'chirisyu_ytywn.flv'},
{showName:'下沙',songer:'游鸿明',filmName:'chirisyu_xs.flv'},
{showName:'五月的雪',songer:'游鸿明',filmName:'chirisyu_wydx.flv'},
{showName:'楼下那个女人',songer:'游鸿明',filmName:'chirisyu_lxngnr.flv'},
{showName:'白色恋人',songer:'游鸿明',filmName:'chirisyu_bslr.flv'}
]);
protected function app_creationCompleteHandler(event:FlexEvent):void
{
// TODOAuto-generated method stub
Alert.okLabel="确定";
Alert.yesLabel="是";
Alert.cancelLabel="否";
var aboutUserMenu:ContextMenuItem=new ContextMenuItem("关于我们",true,true);
aboutUserMenu.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT,aboutUserMenuHandler);
contextMenuCustomItems=FlexGlobals.topLevelApplication.contextMenu.customItems;
contextMenuCustomItems.push(aboutUserMenu);
var linkMenu:ContextMenuItem=new ContextMenuItem("联系作者",true,true);
linkMenu.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT,linkHandler);
contextMenuCustomItems.push(linkMenu);
}
private function aboutUserMenuHandler(event:ContextMenuEvent):void{
Alert.show("我的网盘 V1.0","提示");
}
protected function showList_clickHandler(event:MouseEvent):void
{
var obj:Object=showList.selectedItem;
var fileName:String=obj['showName']
if(fileName!=""){
createContextMenu("删除歌曲",buyHandler);
showList.contextMenu=cm;
}
}
private function linkHandler(event:ContextMenuEvent):void{
Alert.show("QQ:996475895","提示");
}
private function createContextMenu(menuName:String,fun:Function):void
{
cm = new ContextMenu();
cm.hideBuiltInItems();
var customItemsArr:Array = new Array();
var customMenuItem:ContextMenuItem = newContextMenuItem(menuName,true,true);
customMenuItem.addEventListener("menuItemSelect", fun);
customItemsArr.push(customMenuItem);
cm.customItems = customItemsArr;
}
private function buyHandler(event:ContextMenuEvent):void
{
var showName:String=showList.selectedItem['showName'];
Alert.show('确实要删除歌曲"'+showName+'"吗?',"提示",Alert.YES|Alert.CANCEL,this,yesOrCancleHandler,null,Alert.CANCEL);
}
private function yesOrCancleHandler(event:CloseEvent):void{
if(event.detail==Alert.YES){
var index:int=showList.selectedIndex;
songList.removeItemAt(index);
showList.dataProvider=songList;
}
}
]]>
</fx:Script>
<fx:Declarations>
<!-- Place non-visualelements (e.g., services, value objects) here -->
</fx:Declarations>
<mx:DataGrid id="showList" x="228" y="97" width="563" height="355"
click="showList_clickHandler(event)"dataProvider="{songList}" fontSize="16" fontWeight="bold">
<mx:columns>
<mx:DataGridColumn headerText="歌曲名" dataField="showName" width="250"/>
<mx:DataGridColumn headerText="演唱者" dataField="songer" />
<mx:DataGridColumn headerText="链接地址" dataField="filmName" visible="false" />
</mx:columns>
</mx:DataGrid>
</s:Application>
此文件创建了一个全局右键菜单和一个局部右键菜单:当鼠标没有选择DataGird数据时显示的是“关于我们”,“联系作者”这两个菜单,当选中了DataGird的一个数据时则显示“删除歌曲”右键菜单。
当然,右键菜单的命名也是有规则的,如下所示:
向上下文菜单添加的自定义菜单项不得超过 15 个。
每个标题至少必须包含一个可见字符。
控制字符、换行符和其他空白字符将被忽略。
任何标题的长度都不能超过 100 个字符。
与任何内置菜单项或其他自定义菜单项相同的标题将被忽略,不管匹配的菜单项是否可见。菜单标题在与内置标题或现有自定义标题比较时将不考虑大小写、标点符号或空白。
不允许使用以下标题,但可以将这些词与其它词结合使用以形成自定义标题(例如,尽管不允许使用“粘贴”,但却允许使用“粘贴感觉良好”):
Save
Zoom In
Zoom Out
100%
Show All
Quality
Play
Loop
Rewind
Forward
Back
Movie not loaded
About
Show Redraw Regions
Debugger
Undo
Cut
Copy
Paste
Delete
Select All
Open
Open in new window
Copy link
不管是本身还是与其它词结合使用,以下任何一个词都不能出现在自定义标题中:
Adobe
Macromedia
Flash Player
Settings
注意:如果播放器运行在非英语系统上,标题字符串将同时与英语列表和对应的本地化字符串进行比较。例如我开始直接添加了“删除”。结果怎么都添加不上,原来“删除”与“Delete”是对应的。后来改成了“删除歌曲”才添加成功的!
不过有一个小小的遗憾的,如果将此DataGrid添加到一个容器如Panel中时,右键菜单则失效,原因是Flex只有顶级容器才能创建右键菜单,后续我在看看这种情况下的右键菜单创建。
发表评论
-
在 Eclipse 中使用 Flex 和 PHP
2012-11-08 09:04 1130From Flex 开发人员中心 http://soluti ... -
如何让Flex的Tree显示水平滚动条
2012-10-25 16:23 3021from http://twaver.servasoft.co ... -
FPS 与 内存监视器
2012-09-27 09:42 1061FPS:帧数 显示的效果如:FPS:22 MEM:18.4m ... -
List控件的label文字过程闪动
2012-08-09 17:07 1223<mx:List labelField="t ... -
Sprite、MovicClip、Shape的区别
2012-01-30 15:02 1883先看下帮助文档的介绍 ... -
关于在Flex中直接加入Sprite问题
2012-01-12 16:09 984转自:http://hi.baidu.com/bysag/bl ... -
四个坐标确定两条直线求这两条直线的交点坐标
2012-01-11 18:41 29561.项目的一个需求:如题 //通过四个坐标点( ... -
关于flex的cookies---sharedobject
2011-12-11 21:38 3399最近有一个需求是关于要获取用户的mac地址,搜索了一通发现,比 ... -
flex 自适应
2011-11-15 09:26 3693在自己项目里的需求是:flex加载flash生成的swf,同时 ... -
flex组件之dataGrid数据刷新问题
2011-10-17 14:32 9579在用datagrid的时候,童鞋们可能会遇到这么的一个问题,就 ... -
Flex工程里TextField在fp10.1下不能输入中文的解决办法(转)
2011-10-17 14:30 1759http://www.lite3.cn/blog/?p=744 ... -
Flex event target和currentTarget属性的区别
2011-10-17 14:25 2552所有Event对象都有target和currentTarget ...
相关推荐
通过以上步骤,我们可以成功地在Flex应用中创建并使用自定义的右键菜单。这不仅提高了用户体验,也为Flex应用提供了更丰富的交互可能性。在实际开发中,可以根据具体需求调整菜单结构、添加更多的功能或优化性能。
在Flex中,我们可以使用ContextMenu类来创建一个基本的右键菜单。ContextMenu类是mx.controls.ContextMenu的子类,提供了添加菜单项、设置事件处理等功能。默认情况下,当用户右键点击一个组件时,会显示与其关联的...
在给定的实例中,我们看到如何在Flex应用中创建并添加自定义的右键菜单。下面将详细解释这个实例中的关键知识点。 首先,我们需要导入必要的类库,包括`mx.core.ContextualClassFactory`用于创建ContextMenuItem,`...
标题提到的"flex自定义右键菜单 完全屏蔽"是指在Flex应用程序中,不仅实现对默认右键菜单的完全屏蔽,还允许开发者根据自己的需求创建并应用自定义的右键菜单。这种方法避免了使用JavaScript进行跨域通信来实现屏蔽...
Flex中的右键菜单通常通过ContextMenu类来创建。ContextMenu类允许开发者定义一组菜单项,这些菜单项可以在用户右键点击时显示。首先,你需要创建一个ContextMenu实例,并添加自定义的MenuItem或BuiltInMenuItem...
在Flex中创建右键菜单主要涉及两个关键组件:`ContextMenu`和`ContextMenuEvent`。`ContextMenu`是显示在鼠标右键点击时的菜单,而`ContextMenuEvent`是触发菜单显示的事件。 1. **创建ContextMenu对象** 要创建一...
在Flex开发中,有时我们需要为用户界面添加自定义的右键菜单,以便提供更多的交互功能。本教程将指导你如何在Flex项目中实现这一功能,主要涉及以下知识点: 1. **右键菜单库的引入**: 首先,你需要下载一个名为`...
本项目标题为"flex自制右键菜单",描述中提到作者从网上获取了相关代码并进行改写,实现了屏蔽Flex默认的右键菜单以及动态生成右键菜单的功能。下面我们将详细探讨Flex中如何实现这一目标。 首先,Flex是由Adobe...
Flex提供了ContextMenu类,用于创建和管理右键菜单。首先,我们需要创建一个ContextMenuItem对象,然后将其添加到ContextMenu实例中。例如: ```actionscript var menuItem:ContextMenuItem = new ContextMenuItem...
本文将深入探讨如何在Flex环境中实现自定义的右键菜单,包括屏蔽浏览器的默认右键菜单,创建XML格式的多级菜单,以及设置菜单出现位置的自适应策略。 首先,我们需要了解Flex屏蔽浏览器系统右键的基本方法。在...
本文将深入探讨两种实现Flex自定义右键菜单的方法:系统右键菜单的扩展以及完全自定义的右键菜单。 1. **系统右键菜单** 系统右键菜单是在Flex应用中利用ActionScript 3.0直接添加到UI组件上的菜单项。这种实现...
"flex屏蔽系统右键菜单 & 自定义菜单"这个主题聚焦于如何禁用默认的系统右键菜单并创建自定义的右键菜单,以提供更个性化的用户体验。下面将详细介绍这个过程涉及的关键知识点。 1. Flex环境:Flex是Adobe开发的一...
"Flex右键菜单例子"是一个专门针对Flex技术的右键菜单自定义解决方案。Flex是一种用于构建富互联网应用程序(RIA)的开放源代码框架,由Adobe公司开发。它基于ActionScript编程语言和MXML标记语言,主要用于创建交互式...
总结来说,"flex右键菜单代码"是一个关于如何在Flex应用程序中实现右键菜单的示例,涉及到创建、填充菜单项以及绑定和处理菜单事件等技术细节。通过学习这个示例,开发者可以提高自己在Flex环境下的交互设计能力,...
这对于初学者来说是一份宝贵的学习资源,他们可以通过阅读和理解代码来学习如何在Flex4项目中创建和管理自定义的右键菜单。 描述中提到的“对初学者有用,一个简单的flex自定义右键菜单”表明这个示例是为初学者...
首先,让我们来看一下创建右键菜单的基本步骤。在Flex中,我们通常会使用`Menu`类来创建菜单项。例如,在MXML中,你可以定义一个按钮,当点击这个按钮时显示右键菜单: ```xml 显示菜单" fontSize="17" click=...
在Flex3的开发中,我们经常需要为Tree组件添加右键菜单,以提供更多的用户交互功能。右键菜单的实现不仅增加了用户界面的丰富性,也提升了用户体验。 首先,让我们理解Flex3 Tree组件的基本概念。Tree组件是基于MX...
本篇文章将深入探讨如何在Flex Tree组件中实现右键菜单。 首先,我们要了解Flex中的Event.MENU_SHOW事件,这是在用户打开右键菜单时触发的事件。为了监听这个事件,我们需要在Tree组件上添加事件监听器。代码示例...
在IT行业中,自定义Flex右键菜单是一项常见的需求,它涉及到用户交互体验的优化和界面定制化。Flex是一个基于ActionScript 3.0的开源框架,用于构建富互联网应用程序(RIA)。在这里,我们主要探讨如何在Flex项目中...