`
ibvjc36f
  • 浏览: 13183 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

Flex右键菜单扫盲

 
阅读更多

  怎么添加右键?在 Flex 中,只有应用程序中的顶层组件才能拥有上下文菜单。例如,如果 DataGrid 控件是 TabNavigator 或 VBox 容器的子级,则 DataGrid 控件不能拥有其自己的上下文菜单。组件一般都有个"contextMenu"属性,对通过实例化 ContextMenu 类,可以控制上下文菜单中显示的项。为了向 ContextMenu 对象中添加新项,可以创建一个 ContextMenuItem 对象,然后将该对象添加到ContextMenu.customItems数组。对该对象进行侦听可以响应单击事件,例如:pasteMenuItem.addEventListener(ContextMenuEvent.MENU_ITEM_SELEC T, applMenuItemPasteHandler); 使该对象不可见可以设置其visiable属性,使其不可用可使用enable属性;
  separatorBefore指示指定的菜单项上方是否显示分隔条。
  相关使用代码如下: diagramBox.contextMenu=popupMenuFactory.getPopupMe nu(); ////////////////////////////////////////////////// ///////////////////////////// // Licensed Materials - Property of IBM // 5724-Z78 // ?? Copyright IBM Corporation 2007, 2010. All Rights Reserved. // // Note to U.S. Government Users Restricted Rights: // Use, duplication or disclosure restricted by GSA ADP Schedule // Contract with IBM Corp. ////////////////////////////////////////////////// ///////////////////////////// package { import bpm.graphic.SubProcess; import bpm.graphic.Task; import com.ibm.ilog.elixir.diagram.Diagram; import com.ibm.ilog.elixir.diagram.Node; import com.ibm.ilog.elixir.diagram.Renderer; import com.ibm.ilog.elixir.diagram.Subgraph; import com.ibm.ilog.elixir.diagram.editor.DiagramEditor; import flash.events.ContextMenuEvent; import flash.events.MouseEvent; import flash.external.ExternalInterface; import flash.geom.Point; import flash.ui.ContextMenu; import flash.ui.ContextMenuItem; import mx.core.FlexGlobals; import mx.resources.IResourceManager; /** * Creates the popup menu for the Diagram. */ public class DiagramMenuFactory { private var diageditor:DiagramEditor; private var resourceManager:IResourceManager; private var diagramPopupMenu:ContextMenu; // Custom menu items private var selectAllMenuItem:ContextMenuItem; private var deleteMenuItem:ContextMenuItem; private var cutMenuItem:ContextMenuItem; private var copyMenuItem:ContextMenuItem; private var pasteMenuItem:ContextMenuItem; private var groupSubMenuItem:ContextMenuItem; private var ungroupMenuItem:ContextMenuItem; private var layoutMenuItem:ContextMenuItem; private var connectMenuItem:ContextMenuItem; private var renameMenuItem:ContextMenuItem; private var conneMenuItem:ContextMenuItem; private var enterConnectMenuItem:ContextMenuItem; // Cache for labels used in popup menu private var deleteSelectedObjectsLabel:String; private var deleteObjectLabel:String; private var cutSelectedObjectsLabel:String; private var cutObjectLabel:String; private var copySelectedObjectsLabel:String; private var copyObjectLabel:String; private var layoutAllLabel:String; private var layoutObjectLabel:String; private var conneObjectLabel:String; private var enterConnectObjectLabel:String; // Renderer that is currently with the mouse public var currentObject:Object; private var currentMouseLocationX:Number=NaN; private var currentMouseLocationY:Number=NaN; private var menuLocationX:Number=NaN; private var menuLocationY:Number=NaN; public var projectId:String=""; /** * Factory to create the Diagram popup menu */ public function DiagramMenuFactory(resourceMgr:IResourceManager, editor:DiagramEditor, diagram:Diagram) { diageditor=editor; resourceManager=resourceMgr; diagram.addEventListener(MouseEvent.MOUSE_MOVE, diagramMouseMoveHandler); } private function diagramMouseMoveHandler(event:MouseEvent):void { currentMouseLocationX=event.stageX; currentMouseLocationY=event.stageY; currentObject=diageditor.graph.getHitRenderer(even t.target); } // -------------------------------------------------- --- // Popup Menu for the Diagram // -------------------------------------------------- --- private function populatePopupMenu():void { diagramPopupMenu=new ContextMenu(); diagramPopupMenu.hideBuiltInItems(); addCustomItems(diagramPopupMenu); diagramPopupMenu.addEventListener(ContextMenuEvent .MENU_SELECT, popupMenu_menuSelect); } /** * Enables or disables the menu items according to * the number of selected objects. */ private function popupMenu_menuSelect(evt:ContextMenuEvent):void { // Store the position of the mouse at the moment when the menu is opened menuLocationX=currentMouseLocationX; menuLocationY=currentMouseLocationY; var selObjs:Vector.; if (currentObject != null) { // The popup menu has been opened for a specific object. selObjs=diageditor.getSelectedObjects(); if (selObjs.indexOf(currentObject)  0); deleteMenuItem.caption=deleteSelectedObjectsLabel; copyMenuItem.caption=copySelectedObjectsLabel; cutMenuItem.caption=cutSelectedObjectsLabel; layoutMenuItem.caption=layoutAllLabel; layoutMenuItem.visible=true; layoutMenuItem.enabled=((diageditor.graph.numEleme nts > 0) && ((diageditor.graph.nodeLayout != null) || (diageditor.graph.linkLayout != null))); conneMenuItem.visible=false; enterConnectMenuItem.visible=false; } // Connect objects is only available if two nodes are selected selObjs=diageditor.getSelectedObjects(); if (selObjs.length == 2) { if (selObjs[0] is Node && selObjs[1] is Node) { connectMenuItem.visible=true; } else { connectMenuItem.visible=false; } } else { connectMenuItem.visible=false; } var hasSelection:Boolean=diageditor.hasSelection; deleteMenuItem.enabled=hasSelection; cutMenuItem.enabled=diageditor.canCopy; copyMenuItem.enabled=diageditor.canCopy; pasteMenuItem.enabled=diageditor.canPaste; groupSubMenuItem.enabled=FlexGlobals.topLevelAppli cation.canGroup; ungroupMenuItem.visible=diageditor.canUngroup; copyApplicationCustomItems(); } // The first visible item of the diagran context menu, // used by copyApplicationCustomItems to set/clear the separator. private var firstVisibleItem:ContextMenuItem=null; /** * Copies the custom menu items from the toplevel application's context menu * (typically the View Source and About Elixir Enterprise... items) */ private function copyApplicationCustomItems():void { var appMenu:ContextMenu=FlexGlobals.topLevelApplicatio n.contextMenu; if (appMenu) { var index:int=-1; // scan custom items in the application context menu for each (var item:ContextMenuItem in appMenu.customItems) { // has the item already been copied to the diagram context menu? index=-1; for (var i:int=0; i = 0) { if (firstVisibleItem) firstVisibleItem.separatorBefore=false; for (var j:int=index + 1; j =diageditor.getSelect edObjects(); var pasted:Renderer=null; for each (pasted in pastedObjects) { if (pasted is Node) { minx=Math.min(minx, Number(pasted.x)); miny=Math.min(miny, Number(pasted.y)); maxx=Math.max(maxx, Number(pasted.x + pasted.width)); maxy=Math.max(maxy, Number(pasted.y + pasted.height)); } } if (pasted != null) { var p:Point=pasted.parent.globalToLocal(new Point(menuLocationX, menuLocationY)); var dx:Number=p.x - minx; var dy:Number=p.y - miny; diageditor.translateSelectionOfDelta(dx, dy); } } /** * Group selected objects as children of a subgraph. */ private function applMenuItemGroupSubgraphHandler(event:ContextMenu Event):void { var subgraph:Subgraph=new SubProcess(); subgraph.collapsed=false; subgraph.width=resourceManager.getNumber("bpmedito r", "bpmeditor.subprocess.default.width"); subgraph.height=resourceManager.getNumber("bpmedit or", "bpmeditor.subprocess.default.height"); subgraph.label=resourceManager.getString("bpmedito r", "bpmeditor.subprocess.default.label"); FlexGlobals.topLevelApplication.groupObjects(subgr aph); } /** * Ungroup any selected subgraphs. */ private function applMenuItemUngroupHandler(event:ContextMenuEvent) :void { diageditor.ungroup(); } /** * Perform layout on the whole diagram or on the selected subgraph. */ private function applMenuItemLayoutHandler(event:ContextMenuEvent): void { if (currentObject == null) { FlexGlobals.topLevelApplication.layoutAll(); } else { FlexGlobals.topLevelApplication.layoutSelectedSubg raph(); } } /** * Returns the menu displayed for the diagram. */ public function getPopupMenu():ContextMenu { if (diagramPopupMenu == null) populatePopupMenu(); return diagramPopupMenu; } } } 
分享到:
评论

相关推荐

    Flex右键菜单 flex tree 右键菜单 源码

    1. Flex右键菜单: Flex中的右键菜单通常通过ContextMenu类来创建。ContextMenu类允许开发者定义一组菜单项,这些菜单项可以在用户右键点击时显示。首先,你需要创建一个ContextMenu实例,并添加自定义的MenuItem或...

    Flex右键菜单例子

    "Flex右键菜单例子"是一个专门针对Flex技术的右键菜单自定义解决方案。Flex是一种用于构建富互联网应用程序(RIA)的开放源代码框架,由Adobe公司开发。它基于ActionScript编程语言和MXML标记语言,主要用于创建交互式...

    Flex自定义右键菜单

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

    flex右键菜单代码

    这个“flex右键菜单代码”分享提供了一个实现Flex中右键菜单的示例,这对于提升用户体验和增强应用程序功能具有重要意义。 Flex是一个开源的、基于ActionScript和Flash Player的开发框架,主要用于创建富互联网应用...

    flex添加右键菜单实例

    在Flex编程中,右键菜单(ContextMenu)是一个重要的交互元素,它可以为用户提供额外的操作选项。在给定的实例中,我们看到如何在Flex应用中创建并添加自定义的右键菜单。下面将详细解释这个实例中的关键知识点。 ...

    Flex添加右键菜单

    在Flex开发中,有时我们需要为用户界面添加自定义的右键菜单,以便提供更多的交互功能。本教程将指导你如何在Flex项目中实现这一功能,主要涉及以下知识点: 1. **右键菜单库的引入**: 首先,你需要下载一个名为`...

    flex实现右键菜单

    本话题我们将探讨如何使用Flex技术来实现一个自定义的右键菜单。Flex是一种基于ActionScript 3.0的开放源码框架,主要用于构建富互联网应用程序(RIA)。 首先,我们需要理解Flex的基本架构。Flex使用MXML和...

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

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

    flex 右键菜单 屏蔽原来的

    本例探讨了如何创建并屏蔽原有的Flex右键菜单,同时讲解了事件监听器的注册过程。Flex是一个用于构建富互联网应用程序(RIA)的框架,基于ActionScript和MXML语言,它提供了丰富的组件库,其中包括用于创建菜单的`...

    自定义Flex右键菜单

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

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

    标题提到的"flex自定义右键菜单 完全屏蔽"是指在Flex应用程序中,不仅实现对默认右键菜单的完全屏蔽,还允许开发者根据自己的需求创建并应用自定义的右键菜单。这种方法避免了使用JavaScript进行跨域通信来实现屏蔽...

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

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

    支持火狐IE9的flex右键

    标题中的“支持火狐IE9的flex右键”指的是在Adobe Flex开发的Web应用程序中,实现对Firefox和Internet Explorer 9这两个浏览器的右键菜单功能的支持。Flex是一种基于ActionScript和MXML的开源框架,用于构建富互联网...

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

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

    Flex 实现右键菜单

    本文将深入探讨如何在Flex环境中实现自定义的右键菜单,包括屏蔽浏览器的默认右键菜单,创建XML格式的多级菜单,以及设置菜单出现位置的自适应策略。 首先,我们需要了解Flex屏蔽浏览器系统右键的基本方法。在...

    flex自制右键菜单

    本项目标题为"flex自制右键菜单",描述中提到作者从网上获取了相关代码并进行改写,实现了屏蔽Flex默认的右键菜单以及动态生成右键菜单的功能。下面我们将详细探讨Flex中如何实现这一目标。 首先,Flex是由Adobe...

    flex自定义右键菜单

    在Flex应用中,用户界面的交互性是关键,而右键菜单作为常见的用户交互元素,能够提供额外的功能选项,增强用户体验。本篇文章将深入探讨如何在Flex中自定义右键菜单。 一、Flex中的上下文菜单(Context Menu) ...

    flex 自定义右键菜单

    本文将深入探讨两种实现Flex自定义右键菜单的方法:系统右键菜单的扩展以及完全自定义的右键菜单。 1. **系统右键菜单** 系统右键菜单是在Flex应用中利用ActionScript 3.0直接添加到UI组件上的菜单项。这种实现...

    FLEX 完全屏蔽系统默认右键菜单,实现自定义菜单

    完全屏蔽flex自带的右键菜单,实现自定义右键菜单,附件有完整可运行的例子。 这个问题折腾了一天多,在网上搜了很多资料,几乎都是一样的,转来转去,且讲的不明不白。这里我提供了可运行的全部代码,让你轻松搞定...

Global site tag (gtag.js) - Google Analytics