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

合集下载

eclipse插件开发之扩展项目特性.

eclipse插件开发之扩展项目特性.

实现项目特性插件本节将从一个具体的实例出发,在Eclipse项目中添加用户自己的项目特性,扩展Eclipse的选项,让用户的插件具有一个产品的雏形。

项目扩展点用户已经了解了如何在Eclipse中添加视图、编辑器、透视图菜单和工具栏按钮。

本节将要介绍如何加入自己的项目相关特性,其中包括向导、项目特性、构建器和属性页。

项目特性扩展点如图1所示。

图1 项目特性扩展点项目特性扩展点及实现类“nature”为用户添加项目的特有特性,Eclipse中一个项目可以同时具有多个nature 特性。

例如用户要在Java项目的基础上扩展自己的项目,加入了自己项目的特有特性。

这样JDT就能认识用户新建的项目,用户也可以判断此Java项目是否是自己的扩展。

一般来说,用户期望用到JDT的强大功能,就要使自己的项目从Java项目扩展过来。

在插件中添加nature扩展点,步骤如下。

1. 在插件清单文件的Extensions页中添加“org.eclipse.core.resources.natures”扩展点,设置ID属性为“helloworldnature”。

2. 在“org.eclipse.core.resources.natures”节点下添加runtime子节点。

3. 在runtime节点下添加run节点,设置实现类class为“com.free.project. HelloWorldNature”。

扩展点在plugin.xml文件中的描述如下。

<extensionid="helloworldnature"point="org.eclipse.core.resources.natures"><runtime><run class="com.free.project.HelloWorldNature"/></runtime></extension>nature扩展点的实现类要实现“IProjectNature”接口,并要实现“IProjectNature”的如下几个方法。

eclipse扩展点

eclipse扩展点

Eclipse平台SDK支持的扩展点org.eclipse.ant.core.antTasks:将Ant的任务与你的插件中的类关联起来,以扩展Ant在Eclipse中运行时的能力。

org.eclipse.ant.core.antTypes:将Ant的数据类型与你插件中的类关联起来。

org.eclipse.ant.core.extraClasspathEntries:提供额外的类型库(JAR 文件)给Ant使用。

pare.contentMergeViewers:为一种或多种文件类型提供一个比较/合并查看器生成器。

pare.contentViewers:为一种或多种文件类型提供一个查看器生成器。

pare.structureCreators:提供一个类来为一种或多种文件类型创建树型结构。

pare.structureMergeViewers:为一种或多种结构化文件类型提供一个查看器生成器。

org.eclipse.core.resources.builders:注册一个使用符号ID和可读名字的增量构建器。

org.eclipse.core.resources.fileModificationValidator:为团队Provider提供一个用于处理保存验证和编辑验证操作的类。

org.eclipse.core.resources.markers:以可选的父类和属性来注册一个自定义标记,包含了一些已定义的父类。

org.eclipse.core.resources.moveDeleteHook:提供一个用于资源移动和删除操作的类。

只允许一个hook。

org.eclipse.core.resources.natures:安装一个能够在用户项目中使用的自定义nature。

org.eclipse.core.resources.teamHook:为团队Provider注册一个用于处理和链接创建校验类似的特定事件的类。

org.eclipse.core.runtime.applications:定义一个可以在Eclipse命令行中用-application选项调用的顶层程序。

Eclipse的使用简介及插件开发

Eclipse的使用简介及插件开发

Eclipse入门-- Eclipse的使用简介及插件开发-JSP教程(1)eclipse入门-- eclipse的使用简介及插件开发2001 年11 月ibm 宣布捐出了价值4 千万美金的开发软件给开放源码的eclipse 项目。

如此受青睐的eclipse 是什么样子呢,如何使用呢?本文的第一部分会使你对eclipse有一个初步的认识。

并且,eclipse这个号称未来能进行任何语言开发的ide集大成者,又将如何实现它的这一宏伟目标?第二部分介绍的eclipse的插件开发将是其中的关键所在。

eclipse 是替代ibm visual age for java(以下简称ivj)的下一代ide开发环境,但它未来的目标不仅仅是成为专门开发java程序的ide环境,根据eclipse的体系结构,通过开发插件,它能扩展到任何语言的开发,甚至能成为图片绘制的工具。

目前,eclipse已经开始提供c语言开发的功能插件。

更难能可贵的是,eclipse 是一个开放源代码的项目,任何人都可以下载eclipse的源代码,并且在此基础上开发自己的功能插件。

也就是说未来只要有人需要,就会有建立在eclipse之上的cobol,perl,python等语言的开发插件出现。

同时可以通过开发新的插件扩展现有插件的功能,比如在现有的java开发环境中加入tomcat服务器插件。

可以无限扩展,而且有着统一的外观,操作和系统资源管理,这也正是eclipse 的潜力所在。

虽然目前eclipse项目还没有最后完成,但从已有的版本中已经能领略到eclipse 设计主导思想和主要功能特点。

现在就了解eclipse不但能使广大程序员对这款业界期望很高的ide能一睹为快,更为重要的是如果能参加到eclipse项目的开发中或是阅读它的开放源代码,这对广大程序员来说无疑是一个千载难逢的提高编程水平的好机会。

eclipse计划提供多个平台的版本,象windows,linux,solaris,hp-ux和aix,以下只介绍windows版本。

Eclipse重构功能:扩展点的使用

Eclipse重构功能:扩展点的使用

Eclipse重构功能:扩展点的使用Eclipse中提供了几个扩展点,方便扩展重构功能。

基本的重构功能有,Rename,Move,Create,Delete,Copy.对应扩展点即为:org.eclipse.ltk.core.refactoring.renameParticipantsorg.eclipse.ltk.core.refactoring.moveParticipantsorg.eclipse.ltk.core.refactoring.createParticipantsorg.eclipse.ltk.core.refactoring.deleteParticipantsorg.eclipse.ltk.core.refactoring.copyParticipants以ReName为例,其余4项与ReName大同小异。

实现这个扩展点的基本语法:< extensionpoint="org.eclipse.ltk.core.refactoring.renameParticipants">< renameParticipantid="jp.co.intramart.app.producer.refactoring.renameTypeParticipan t"name="Ebuilder RenameTypeParticipant"class="jp.co.intramart.app.producer.refactoring.TypeRenamePartici pant">< enablement>< /enablement>< /renameParticipant>< /extension>这里默认对响应所有改名事件,如果需要过滤可以在元素< enablement/>中加以定义。

Eclipse扩展点

Eclipse扩展点

类别扩展点org.eclipse.core.contenttype.contentTypes org.eclipse.core.runtime.adapters org.eclipse.core.runtime.applications org.eclipse.core.runtime.contentTypes org.eclipse.core.runtime.preferences org.eclipse.core.runtime.products org.eclipse.core.runtime.urlHandlers org.eclipse.equinox.preferences.preferences org.eclipse.core.resources.builders org.eclipse.core.resources.fileModificationValidator org.eclipse.core.resources.markers org.eclipse.core.resources.moveDeleteHook org.eclipse.core.resources.natures org.eclipse.core.resources.refreshProviders org.eclipse.core.resources.teamHook org.eclipse.core.filesystem.filesystems org.eclipse.core.filebuffers.annotationModelCreation org.eclipse.core.filebuffers.documentCreation org.eclipse.core.filebuffers.documentSetup org.eclipse.ui.editors.annotationTypes org.eclipse.ui.editors.documentProvidersorg.eclipse.ui.editors.markerAnnotationSpecificationorg.eclipse.ui.editors.markerUpdatersorg.eclipse.ui.editors.templatesorg.eclipse.ui.workbench.texteditor.quickDiffReferenceProviderorg.eclipse.ui.workbench.texteditor.spellingEngineorg.eclipse.ui.acceleratorConfigurationsorg.eclipse.ui.acceleratorScopesorg.eclipse.ui.acceleratorSetsorg.eclipse.ui.actionDefinitionsorg.eclipse.ui.actionSetPartAssociationsorg.eclipse.ui.actionSetsorg.eclipse.ui.activitiesorg.eclipse.ui.activitySupportorg.eclipse.ui.bindingsorg.eclipse.ui.browser.browsersorg.eclipse.ui.browserSupportorg.eclipse.ui.capabilitiesmandsmandImagesorg.eclipse.ui.contextsorg.eclipse.ui.decoratorsorg.eclipse.ui.documentProvidersorg.eclipse.ui.dropActionsorg.eclipse.ui.editorActionsorg.eclipse.ui.editorsorg.eclipse.ui.elementFactoriesorg.eclipse.ui.encodingsorg.eclipse.ui.exportWizardsorg.eclipse.ui.fontDefinitionsorg.eclipse.ui.handlersorg.eclipse.ui.helpSupportorg.eclipse.ui.ide.filesystemSupportWorkspacePlatform runtimePlatform textorg.eclipse.ui.ide.markerHelp org.eclipse.ui.ide.markerImageProviders org.eclipse.ui.ide.markerResolution org.eclipse.ui.ide.markerSupport org.eclipse.ui.ide.markerUpdaters org.eclipse.ui.navigator.linkHelper org.eclipse.ui.navigator.navigatorContent org.eclipse.ui.navigator.viewer org.eclipse.ui.ide.projectNatureImages org.eclipse.ui.ide.resourceFilters org.eclipse.ui.importWizards org.eclipse.ui.intro org.eclipse.ui.keywords org.eclipse.ui.menus org.eclipse.ui.newWizards org.eclipse.ui.perspectiveExtensions org.eclipse.ui.perspectives org.eclipse.ui.popupMenus org.eclipse.ui.preferencePages org.eclipse.ui.preferenceTransfer org.eclipse.ui.presentationFactories org.eclipse.ui.projectNatureImages org.eclipse.ui.propertyPages org.eclipse.ui.resourceFilters org.eclipse.ui.startup org.eclipse.ui.systemSummarySections org.eclipse.ui.themes org.eclipse.ui.viewActions org.eclipse.ui.views org.eclipse.ui.views.ProblemView org.eclipse.ui.views.properties.tabbed.propertyContributor.html org.eclipse.ui.views.properties.tabbed.propertySections.html org.eclipse.ui.views.properties.tabbed.propertyTabs.html org.eclipse.ui.workingSets org.eclipse.team.core.fileTypes org.eclipse.team.core.ignore org.eclipse.team.core.projectSets org.eclipse.team.core.repositoryorg.eclipse.team.ui.configurationWizardsorg.eclipse.team.ui.synchronizeParticipantsorg.eclipse.team.ui.synchronizeWizardsorg.eclipse.debug.core.breakpointsunchConfigurationComparatorsunchConfigurationTypesunchDelegatesunchersunchModesorg.eclipse.debug.core.logicalStructureTypesorg.eclipse.debug.core.processFactoriesorg.eclipse.debug.core.sourceContainerTypesorg.eclipse.debug.core.sourceLocatorsorg.eclipse.debug.core.sourcePathComputersorg.eclipse.debug.core.statusHandlersorg.eclipse.debug.core.watchExpressionDelegatesWorkbenchTeamorg.eclipse.debug.ui.breakpointOrganizers org.eclipse.debug.ui.consoleColorProviders org.eclipse.debug.ui.consoleLineTrackers org.eclipse.debug.ui.contextViewBindings org.eclipse.debug.ui.debugActionGroups org.eclipse.debug.ui.debugModelContextBindings org.eclipse.debug.ui.debugModelPresentations unchConfigurationTabGroups unchConfigurationTypeImages unchGroups unchShortcuts org.eclipse.debug.ui.memoryRenderings org.eclipse.debug.ui.sourceContainerPresentations org.eclipse.debug.ui.stringVariablePresentations org.eclipse.debug.ui.variableValueEditors org.eclipse.ui.console.consoleFactories org.eclipse.ui.console.consolePageParticipants org.eclipse.ui.console.consolePatternMatchListeners org.eclipse.help.appserver.server org.eclipse.help.browser org.eclipse.help.contentExtension org.eclipse.help.contentProducer org.eclipse.help.contexts org.eclipse.help.index org.eclipse.help.luceneAnalyzer org.eclipse.help.support org.eclipse.help.toc org.eclipse.help.webapp org.eclipse.help.base.activitySupport org.eclipse.help.base.browser org.eclipse.help.base.luceneAnalyzer org.eclipse.help.base.luceneSearchParticipants org.eclipse.help.ui.searchEngine org.eclipse.ui.cheatsheets.cheatSheetContent org.eclipse.ui.cheatsheets.cheatSheetItemExtension org.eclipse.ui.intro.config org.eclipse.ui.intro.configExtension org.eclipse.ltk.core.refactoring.refactoringContributions org.eclipse.ltk.core.refactoring.copyParticipants org.eclipse.ltk.core.refactoring.createParticipants org.eclipse.ltk.core.refactoring.deleteParticipants org.eclipse.ltk.core.refactoring.moveParticipants org.eclipse.ltk.core.refactoring.renameParticipants org.eclipse.ltk.ui.refactoring.changePreviewViewers org.eclipse.ltk.ui.refactoring.statusContextViewers org.eclipse.jdt.core.classpathContainerInitializer org.eclipse.jdt.core.classpathVariableInitializer org.eclipse.jdt.core.codeFormatter org.eclipse.jdt.debug.ui.vmInstallTypePage org.eclipse.jdt.junit.testRunListeners unching.classpathProviders unching.runtimeClasspathEntryResolversunching.vmConnectorsunching.vmInstallTypesUser AssistanceLanguage ToolkitJDT DebugConsoleorg.eclipse.jdt.ui.classpathContainerPageorg.eclipse.jdt.ui.javadocCompletionProcessororg.eclipse.jdt.ui.javaEditorTextHoverorg.eclipse.jdt.ui.javaElementFiltersorg.eclipse.ant.core.antPropertiesorg.eclipse.ant.core.antTasksorg.eclipse.ant.core.antTypesorg.eclipse.ant.core.extraClasspathEntriespare.contentMergeViewerspare.contentViewerspare.streamMergerspare.structureCreatorspare.structureMergeViewersorg.eclipse.core.expressions.propertyTestersorg.eclipse.core.variables.dynamicVariablesOtherorg.eclipse.core.variables.valueVariablesorg.eclipse.search.searchPagesorg.eclipse.search.searchResultSortersorg.eclipse.search.searchResultViewPagesorg.eclipse.search.textSearchEngineorg.eclipse.search.textSearchQueryProviderorg.eclipse.ui.externaltools.configurationDuplicationMapsorg.eclipse.update.core.featureTypesorg.eclipse.update.core.installHandlersorg.eclipse.update.core.siteTypesorg.eclipse.update.ui.searchCategory作用用于扩展系统支持的内容类型把适配者工厂注册到Eclipse平台定义一个可以在Eclipse命令行中用-application选项调用的顶层程序。

eclipse插件开发流程

eclipse插件开发流程

eclipse插件开发流程Eclipse插件开发流程Eclipse是一款开源的集成开发环境(IDE),它提供了丰富的插件机制,使开发者能够根据自己的需求定制和扩展IDE。

本文将介绍Eclipse插件开发的流程,帮助读者了解如何开始开发自己的插件。

1. 确定插件的功能和目标在开始插件开发之前,首先需要明确插件的功能和目标。

这包括确定插件的用途、解决的问题以及目标用户等。

明确插件的功能和目标有助于开发者更好地进行设计和实现。

2. 创建Eclipse插件项目在Eclipse中,可以通过插件开发工具(Plug-in Development Environment,简称PDE)来创建插件项目。

打开Eclipse,选择File -> New -> Project,在弹出的对话框中选择Plug-in Project,点击Next。

然后输入项目名称和选择插件的模板,点击Finish即可创建插件项目。

3. 定义插件扩展点插件扩展点是插件的核心概念,它定义了插件提供的功能和扩展的接口。

在插件项目的插件清单文件(plugin.xml)中,可以通过扩展标签来定义插件的扩展点。

根据插件的功能和目标,合理定义扩展点,使其具有良好的扩展性和灵活性。

4. 实现插件功能在插件项目中,可以创建多个插件类来实现插件的功能。

插件类通常继承自Eclipse提供的基类,并实现相应的接口。

通过重写方法和实现逻辑,可以实现插件的具体功能。

在实现插件功能的过程中,可以使用Eclipse提供的API和工具来简化开发过程。

5. 调试和测试插件在插件开发过程中,调试和测试是非常重要的环节。

Eclipse提供了强大的调试功能,可以帮助开发者定位和解决问题。

通过在Eclipse 中启动插件运行环境,可以直接调试和测试插件的功能。

在调试过程中,可以使用断点、变量监视等功能,帮助开发者更好地理解和分析插件的运行情况。

6. 打包和发布插件当插件开发完成后,可以将插件打包并发布到Eclipse插件市场或其他渠道。

eclipse插件开发入门及常用组件要点

eclipse插件开发入门及常用组件要点

Eclipse插件开发入门.Eclipse最有魅力的地方就是它的插件体系结构。

在这个体系中重要的概念是扩展点(extension points)。

扩展点就是在软件开发过程中暴露出来的接口。

每一个插件都是在现有的扩展点上开发的,并可能还留有自己的扩展点,以便在这个插件上继续开发。

简介Eclipse 平台是IBM向开发源码社区捐赠的开发框架,它之所以出名并不是因为IBM宣称投入开发的资金总数为4 000万美元,而是因为如此巨大的投入所带来的成果:一个成熟的、精心设计的、可扩展的体系结构。

Eclipse 的价值是它为创建可扩展的集成开发环境提供了一个开放源码平台。

这个平台允许任何人构建与环境和其他工具无缝集成的工具。

工具与Eclipse无缝集成的关键是插件。

除了小型的运行时内核之外,Eclipse中的所有东西都是插件。

从这个角度来讲,所有功能部件都是以同等的方式创建的。

由于有了插件,Eclipse系统的核心部分在启动时要完成的工作十分简单:启动平台的基础部分和查找系统的插件。

整个Eclipse体系结构就像一个大拼图,可以不断地向上加插件,同时,在现有插件上还可以再加插件。

开发“Hello,world”插件创建插件最简单的方法是使用Eclipse中专门为开发插件而设计的插件PDE(Plug-in Development Environment)。

PDE 和 Java Development Tooling(JDT)IDE是 Eclipse 的标准扩展。

PDE 提供了一些向导可以帮助创建插件。

下面的“Hello,world”插件将通过PDE进行开发。

下面是创建一个简单插件的操作步骤。

(1)运行Eclipse。

单击Eclipse的“File”→“New”→“Other”菜单项,在弹出的对话框中选择Select对话框左边的Plug-in Development向导。

如图1所示,选择Plug-in Project。

Eclipse详解

Eclipse详解

1.1 Eclipse的简介1.1.1Eclipse插件开发简介插件的概念读者应该很熟悉,象MP3播放软件WINAMP的皮肤插件、Windows Media Player的众多的外观插件、音效插件等等。

但如果你以为插件只能做成为原软件的边角料,那是可以理解的,因为你还没有看到过Eclipse的插件是什么样的。

Eclipse可以全面更新你对插件的概念,它也是对插件概念运用得最彻底最炉火纯青的一个软件。

在第一章我们就介绍了Eclipse的技术特点,Eclipse的内核很小,其他功能都是基于这个内核上的插件,如Eclipse自带的UNIT、ANT等。

而且Eclipse还开放了自己的插件机制,并提供了很好的插件开发环境,让用户可以自己来开发Eclipse的插件。

想知道开发Eclipse的插件能到什么程度吗?看看这些Eclipse上的插件吧:用于UML建模的Together for Eclipse、用于JSP的MyEclipse和Lomboz、IBM的全能开发工具WSAD 等等,它们全是Eclipse的插件。

如果微软愿意,也可以把Office软件做成Eclipse的插件。

如果Adobe有兴趣,Photoshop也可以有for Eclipse的插件版,Eclipse中的API Draw2D的绘图功能也是很功的。

Eclipse的各式插件正如雨后春笋般不断冒出,Eclipse已经超越了开发环境的概念,它的目标是做成一个通用的平台,让尽量多的软件做为插件集成在上面,成为未来的集成的桌面环境。

同样我们可以将我们的应用系统写成Eclipse插件,笔者就在2004年参与开发了一个项目管理软件,该软件就是以Eclipse的插件形式开发的。

1.1.2 Eclipse插件开发的优势和不足那么将软件写成插件有什么好处呢?对于用户来说Eclipse的使用环境比较友好,前面介绍的SWT/JFace中还是比较基本的界面元素,象Eclipse中的视图、编辑窗、停泊窗这些界面如果实现呢?如果用Appliction的方式会很麻烦,如果写成Eclipse插件则实现这些界面风格不会吹灰之力。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

引言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 方式):MenuContributionlocationURI = “[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来实现。

菜单控制视图菜单的控制主要包括启用/ 禁用,显示/ 隐藏菜单。

通过Command 方式创建的菜单,可以通过mands的visibleWhen属性控制菜单的隐藏和显示,通过org.eclipse.ui.handlers的activewhen或enabledWhen控制菜单的启用或禁用。

创建Commands采用Command 方式创建“Menu Example”主菜单(包含AngryCommand和JokeCommand两个菜单项),并且基于这两个菜单项创建了Menu Example 视图的下拉菜单和工具栏菜单,及其TreeViewer的上下文菜单。

pupupMenus方式创建Action 并关联到IResource资源的上下文菜单扩展org.eclipse.ui.popupMenus创建菜单“Menu Example”,该菜单包含一个菜单项HelloAction。

当我们在Eclipse 任何区域右击org.eclipse.core.resources.IResource资源时弹出的上下文菜单中会出现“Menu Example”菜单。

如下代码清单11 为创建该上下文菜单的xml 代码。

Menu Example 视图的代码实现类。

相关文档
最新文档