好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

Eclipse 插件开发 -- 深入理解菜单(Menu)功能及其扩展点.docx

19页
  • 卖家[上传人]:s9****2
  • 文档编号:539170495
  • 上传时间:2024-03-09
  • 文档格式:DOCX
  • 文档大小:183.14KB
  • / 19 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 引言Eclipse 具有丰富的菜单功能,给开发人员提供了很好的用户体验总体而言,Eclipse 菜单种类包括视图 / 编辑器菜单,主菜单(Main Menu),视图 / 编辑器菜单(ViewPart/EditorPart Menu)和上下文菜单(Context Menu)插件开发人员通过灵活应用这些菜单,可以给用户提供很好的体验由于视图和编辑器菜单功能类似,因此本文重点讲述视图菜单(视图下拉菜单及其工具栏菜单),除此之外,还将讲述主菜单和上下文菜单如图 1 所示为 Project Explorer 视图的菜单,包括视图下拉菜单和工具栏菜单(折叠树节点)通常而言,出现在视图工具栏的菜单都会出现在视图的下拉菜单,也就是说,比较常用的视图菜单放在视图的工具栏图 1. Project Explorer 视图的菜单如图 2 所示为 Project Explorer 视图中的上下文菜单,只有当我们右键点击时才会出现通常而言,出现频率较高的菜单项才会出现在菜单中上下文菜单具有很强的灵活项,它可以随着我们点击的对象不同,弹出的菜单也会有相应的变化图 2. Project Explorer 视图中的上下文菜单如图 3 所示为 Eclipse 的主菜单,包括最上面的主菜单项(不可移动)及其下面的工具栏菜单(可以移动,并且 Eclipse 提供了显示 / 不显示这些菜单的功能),Eclipse 并不建议我们为每一个插件都添加新的主菜单,这样容易造成冗余,而且不方便用户操作。

      通常,我们可以把菜单项添加到 Eclipse 已有的菜单,如插件的查找功能可以添加一个查找菜单项到 Eclipse 的 Search 主菜单上图 3. Eclipse 的主菜单前面讲到 Eclipse 的各种菜单,那么,如何在开发插件或 RCP 应用程序的时候添加这些菜单?本文下面的篇幅将详细介绍如何扩展 Eclipse 的菜单功能,使读者深入了解 Eclipse 的菜单功能,并能够开发具有这些菜单的应用程序因此,必须掌握三方面的内容:菜单种类,菜单的扩展点,菜单控制(显示 / 隐藏或启用 / 禁用菜单项)下面从概念上介绍这三方面内容,下一小节将会进行详细介绍菜单种类正如前面所讲到的,Eclipse 的菜单包括视图菜单,主菜单及上下文菜单三个种类菜单项的扩展点Eclipse 提供了两种扩展点供用户添加菜单项到相应的位置这两种扩展点为 mands(本文简称为 Commands 方式)和 org.eclipse.ui.actionSets(本文简称为 Actions 方式)Actions 方式为界面上不同区域的表现方式提供了相应的扩展点,并且没有分离其界面表现和内在实现恰恰相反,Commands 方式通过三步有效的达到界面表现和内部实现的分离:首先,通过 mands 扩展点创建命令和类别(Category),并且可以把某些命令放在一个类别(Category)中;然后,通过 org.eclipse.ui.menus 指定命令出现在界面的哪个区域(视图菜单 / 主菜单 / 上下文菜单);最后通过 org.eclipse.ui.handlers 指定命令的实现。

      因此,Eclipse 推荐新开发的插件使用 Commands 来创建您的界面菜单当然,由于 Actions 在现有的插件中用得比较多,如果我们需要扩展或基于之前的插件开发,也需要对其进行了解除此之外,针对上下文菜单,虽然 Commands 和 Actions 方式均可以创建上下文菜单,但是 Eclipse 还提供了另外一种创建上下文菜单的扩展点 org.eclipse.ui.popupMenus(本文简称为 popupMenus 方式),本文将就这三种扩展点做详细的介绍菜单控制菜单控制是一个非常常见的功能,例如,随着选定的内容或当前窗口的不同,菜单中的菜单项会有相应的变化(显示 / 隐藏或启用 / 禁用菜单项),因此,如何控制菜单是插件开发人员必须掌握的知识Eclipse 为菜单控制提供了两种方法,一种是通过扩展点;另一种是通过 API 的方式编写程序控制回页首Eclipse 菜单功能及其扩展点至此,我们对 Eclipse 菜单有了感观的认识由上一节我们可知,要深入理解 Eclipse 菜单功能,我们需要从三个方面去掌握:菜单种类,菜单的扩展点和菜单控制下面将进行详细讲述菜单种类针对各种菜单,Eclipse 提供了相应的扩展点,因此,开发人员可以通过这些扩展点把菜单放到界面的不同区域,详细内容请参考 2.2 小节。

      菜单的扩展点视图菜单的扩展点采用 Commands 方式创建视图菜单,需要引入 org.eclipse.ui.menus 扩展点;而 Actions 方式需要引入 org.eclipse.ui.actionSets.1、视图菜单(Commands 方式):MenuContribution locationURI = “[Scheme]:[id]?[argument-list]”其中,Scheme 为该菜单项出现的区域,menu 为视图的下拉菜单,toolbar 为视图的工具栏菜单;id 为菜单区域 ID;argument-list 为该菜单项出现在指定菜单的位置例如:在 ProbelmView 的下拉菜单加一个菜单项,其 MenuContribution 的 locationURI 应为:menu:org.eclipse.ui.views.ProblemView?after=additions;在 ProblemView 的工具栏菜单中加入一个菜单项,其 locationURI 应为:toolbar:org.eclipse.ui.views.ProblemView?after=additions。

      2、视图菜单(Actions 方式):采用 Actions 方式创建菜单,需要引入 org.eclipse.ui.actionSets 扩展点,并通过设定 action 的 menubarPath 指定下拉菜单 / 菜单项出现的位置;通过设定 action 的 toolbarPath 设定工具栏菜单 / 菜单项出现的位置例如,添加一个下拉菜单项到 Problems 视图中,其 menubarPath 应为:org.eclipse.ui.views.ProblemView/additions主菜单的扩展点1、主菜单(Commands 方式)通过 Commands 方式把菜单项添加到主菜单及其工具栏上,和视图菜单一样,也是通过扩展点 org.eclipse.ui.menus 实现,需要设定其 menuContribution 的 locationURI例如,添加一个菜单(菜单可以包含若干个菜单项)到主菜单一栏中,其 locationURI 为:menu:org.eclipse.ui.main.menu?after=additions添加一个菜单到工具栏之中,其 locationURI 为:toolbar:org.eclipse.ui.main.toolbar?after=additions当然,我们也可以把菜单项添加到已经存在的菜单当中,例如添加一个菜单项到 Eclipse 的 Search 主菜单当中,其 locationURI 为:menu:org.eclipse.search.menu?dialogGroup2、主菜单(Actions 方式)通过 Actions 方式把菜单项添加到主菜单及其工具栏上,和视图菜单一样,也是通过扩展点 org.eclipse.ui.actionSets 实现,需要设定 action 的 menubarPath 和 toolbarPath 实现。

      例如,添加一个菜单项到 Eclipse 的 Search 主菜单中,其 menubarPath 应为:org.eclipse.search.menu/dialogGroup注意:如果采用上述方式添加一个菜单项到 Search 主菜单,当我们运行时并没有出现添加的菜单项,这时候需要换一个 workspace,其原因是 Eclipse 缓存了与其相关的某些信息在 workspace 当中上下文菜单的扩展点上下文菜单除了通过 Commands 和 Actions 方式添加,还可以使用扩展点 org.eclipse.ui.popupMenus 方式添加,下面分别进行介绍1、上下文菜单(Commands 方式)Commands 方式与添加视图菜单和主菜单的方式一样,通过设定其 menuContribution 的 locationURI 来实现例如,添加一个上下文菜单到 Problems 视图中,其 locationURI 为:popup:org.eclipse.ui.views.ProblemView?after=additions如果我们想让某个上下文菜单项出现在任何区域,则可以使用下面的 locationURI:popup:org.eclipse.ui.popup.any?after=additions2、上下文菜单(Actions 方式)Actions 方式没有直接提供扩展点添加上下文菜单,但是我们可以通过编程的方式实现,如下代码清单 1 为 TreeViewer 添加上下文菜单,通过 IMenuManager 的 add 方法添加 actions。

      清单 1. 通过 Actions 方式编程实现添加上下文菜单 private void hookContextMenu() { IMenuManager fMenuMgr = new MenuManager(“#PopupMenu”); fMenuMgr.setRemoveAllWhenShown(true); // 添加 Actions fMenuMgr.add(action … ) fMenuMgr.createContextMenu(treeViewer.getControl()); treeViewer.getControl().setMenu(fMenu); getSite().registerContextMenu(fMenuMgr, treeViewer); }3、上下文菜单(popupMenus 方式)通过 popupMenus 扩展点实现上下文菜单,需要设定 objectContribution 的 objectClass 属性把上下文菜单添加到相应的区域例如,如果我们想当用户点击 Eclipse 中的资源时,弹出的上下文菜单包括某个菜单项,我们可以设定 objectClass 属性为:org.eclipse.core.resources.IResource通过 Commands 方式创建菜单项通过 Commands 方式创建菜单项,首先需要创建 Command,通过扩展点 mands,然后我们可以把这个 Command 放到任何区域,上一小节已经讲到,通过 org.eclipse.ui.menus 扩展点确定菜单创建的区域,最后通过扩展点 org.eclipse.ui.handlers 定义这个 command 的具体行为。

      在创建 Command 时,我们可以先创建一个 Category,并把相关的一些命令放到这个 Category 中,这样有利于管理代码清单 2 创建一个 Command(“Show in Glossary Explorer”),并放到一个 。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.