`
javeye
  • 浏览: 331082 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

RCP中采用actionSet配置菜单的方法总结

    博客分类:
  • RCP
阅读更多
最近学习了下如何通过org.eclipse.ui.actionSets来配置RCP中菜单的过程,总结一下。
首先,我们在工程中打开plugin.xml文件,选中Extensions这个选项卡。在org.eclipse.ui.views扩展点下新建一个view,id:com.travelsky.test.menu.view。name:testMenu。点击class创建该类,类名取为:ViewPart。代码如下:

import org.eclipse.swt.widgets.Composite;
public class ViewPart extends org.eclipse.ui.part.ViewPart {
		private static final String ID = "com.travelsky.test.menu.view";
//注意,设置其ID
	public ViewPart() {
		// TODO Auto-generated constructor stub
	}
	@Override
	public void createPartControl(Composite parent) {
		// TODO Auto-generated method stub

	}
	@Override
	public void setFocus() {
		// TODO Auto-generated method stub
	}
}

该创建过程上传附件的图1:创建一个view

第二步,打开plugin.xml文件,选中Extensions这个选项卡。
添加扩展点:org.eclipse.ui.actionSets。
添加扩展点:org.eclipse.ui.actionSetPartAssociations。
第三部,
在actionSets扩展点中设置id="com.travelsky.test.menu.actionSet"
在actionSets扩展点中创建一个menu,设置vsible=true,设置ID为id="testMenu"
在menu下创建两个separator,用于对目录进行分组。取名分别为testGroup和testGroup2.
如果不需要分组,可以不用设置。
第四步,
在actionSets扩展点中建立三个action,取名称分别为目录测试1,目录测试3,录测试2。
对于目录测试1:设置其menubarPath为如下格式:
menu.ID/separator.ID
表明其放在menu.ID目录的separator.ID分组下。
这里设置为:menubarPath="testMenu/testGroup"表明在testMemu所在目录的testGroup组下面显示该项action。
同理,设置目录测试2: menubarPath="testMenu/testGroup2"
设置目录测试3:menubarPath="testMenu/testGroup2"
第五步,
在actionSetPartAssociations扩展点中,设置其targetID="com.travelsky.test.menu.actionSet"
在actionSetPartAssociations扩展点中,添加part,设置其id="com.travelsky.test.menu.view"。
以对应之前建立的view,将该菜单内容配置给此com.travelsky.test.menu.view。

好了,配置基本上完成了。此时的配置如附件图2:配置界面一览
选中plugin.xml选项卡,会看见生成类似如下代码到其中:
   <extension
         point="org.eclipse.ui.actionSets">
      <actionSet
            id="com.travelsky.test.menu.actionSet"
            label="Main"
            visible="true">
         <menu
               id="testMenu"
               label="目录测试">
            <separator
                  name="testGroup">
            </separator>
            <separator
                  name="testGroup2">
            </separator>
         </menu>
         <action
               id="com.travelsky.test.menu.action1"
               label="测试目录1"
               menubarPath="testMenu/testGroup">
         </action>
         <action
               id="com.travelsky.test.menu.action2"
               label="测试目录3"
               menubarPath="testMenu/testGroup2">
         </action>
         <action
               id="com.travelsky.test.menu.action3"
               label="测试目录2"
               menubarPath="testMenu/testGroup2">
         </action>
      </actionSet>
   </extension>

   <extension
         point="org.eclipse.ui.actionSetPartAssociations">
      <actionSetPartAssociation
            targetID="com.travelsky.test.menu.actionSet">
         <part
               id="com.travelsky.test.menu.view">
         </part>
      </actionSetPartAssociation>
   </extension>


最后,将view添加到perspective中。运行测试工程。我们会看见如附件图3:菜单配置运行效果所示
  • 描述: 图1:创建一个view
  • 大小: 66.2 KB
  • 描述: 图2:配置界面一览
  • 大小: 70.1 KB
  • 描述: 图3:菜单配置运行效果
  • 大小: 14.5 KB
分享到:
评论
3 楼 hachorse 2015-10-28  
楼主,请问有没有什么办法可以在Activator中获取你第二步中添加的action扩展点对象,如:
  <action 
            id="com.travelsky.test.menu.action1" 
            label="测试目录1" 
            menubarPath="testMenu/testGroup"> 
   </action>

这样子可以在代码中控制每一个action对应图标的样式,以及各action的可用和不可用状态。

2 楼 javeye 2009-04-15  
你描述的问题我理解得不是很清楚。如果你需要在自己创建的菜单中,选择菜单的某个选项(扩展点定义的一个action)打开一个创建好的视图,则需要对你的选项绑定一个Delegate类。该类负责处理当绑定的选项被选中时,做你要做的事情。
如:
         <action
               class="com.travelsky.test.action.OpenViewDelegate"
               id="com.travelsky.angel.client.cki.OpenViewAction"
               label="打开视图"
               menubarPath="testMenu/testGroup2">
         </action>


该Delegate类的代码类似这样:
public class OpenViewDelegate implements IWorkbenchWindowActionDelegate
{


    public void dispose()
    {

    }

    public void init(IWorkbenchWindow window)
    {

    }

    public void run(IAction action)
    {

//你需要在这里写需要处理的逻辑。比如打开一个view。则
		try {
			IViewPart findView = PlatformUI.getWorkbench()
					.getActiveWorkbenchWindow().getActivePage()
					.findView(viewID);//viewID就是要打开的veiw

			PlatformUI.getWorkbench().getActiveWorkbenchWindow()
					.getActivePage().activate(findView);
		} catch (RuntimeException e) {
			e.printStackTrace();
		}
    }

    public void selectionChanged(IAction action, ISelection selection)
    {
        // TODO 实现方法体

    }


要注意的是org.eclipse.ui.actionSetPartAssociations是用来设置菜单与某个view关联的,也即当这个view打开时,与他关联的菜单可见。而不是用来设置菜单点击时候打开那个view。
1 楼 dou85dou 2009-04-14  
您好,我完成了所有的步骤,但是我点击菜单中的选项,却无法打开创建好的视图。当我重新运行时,视图是可以打开的,说明视图的类是没有问题的,只是选项和打开视图没有联系上,不知道哪里有问题?

org.eclipse.ui.actionSetPartAssociations我也已经设置好了,还能有哪些问题呢?

谢谢解答

相关推荐

    RCP程序中集成其他插件的配置方法

    RCP程序中集成其他插件的配置方法RCP程序中集成其他插件的配置方法RCP程序中集成其他插件的配置方法

    RCP自定义透视图切换按钮的右键菜单

    在Eclipse RCP(Rich Client Platform)开发中,创建用户友好的界面是至关重要的。一个常见的需求是定制透视图(Perspective)的交互方式,包括切换按钮和右键菜单。本教程将详细介绍如何通过`org.eclipse.ui....

    plugin2_RCP菜单_teamcenter_

    在本话题中,我们将深入探讨"plugin2_RCP菜单_teamcenter_"所涉及的核心知识点,以及如何通过`plugin.xml`配置文件来开发和定制RCP的菜单和工具栏。 1. **RCP(Rich Client Platform)**:RCP是Eclipse框架的一部分...

    Eclipse RCP中使用第三方包

    使用第三方包在Eclipse RCP中非常简单,只需要将jar文件添加到classpath中,并在Runtime页面中配置classpath,然后我们就可以使用第三方库中的类和方法来实现某些功能。 知识点: 1.Eclipse RCP是什么? 答:...

    RCP的Navigator例子源代码(包括修改默认的new右键菜单)

    这个压缩包包含了RCP应用中关于Navigator的一个示例,以及如何自定义“新建”(New) 右键菜单的操作。 在RCP应用中,Navigator视图是通过`org.eclipse.ui.navigator`插件提供的,这个插件包含了展示和管理工作台资源...

    RCP 菜单与工具栏小结

    菜单和工具栏是RCP应用中用户与软件进行交互的主要界面之一。它们不仅提供了对应用功能的访问途径,还通过直观的设计增强了用户体验。菜单通常包含一系列命令选项,而工具栏则通过图标快速提供常用操作。理解如何在...

    eclipse rcp 菜单小例子

    2. `src`目录 - 包含源代码,可能有一个名为`ActionBarAdvisor`的类,负责菜单配置。 3. `features`目录 - 描述插件集的文件,可能包含了这个小例子所需的所有功能。 4. `target`或`bin`目录 - 编译后的类文件。 ...

    RCP常用方法,RCP常用方法

    ### RCP常用方法详解 #### 一、闪屏画面(Splash Screen) 在应用程序启动时,通常需要一段时间来进行初始化处理,为了提升用户体验并避免用户在等待过程中感到困惑,可以通过设置一个闪屏画面(splash screen)来...

    RCP-1500中文操作手册.pdf

    在操作和维护方面,RCP-1500系列遥控面板提供了一个详细的菜单系统,包括菜单操作、状态画面、着色菜单、文件菜单、维护菜单和配置菜单等。用户可以通过这些菜单来进行高级的配置和设置,以确保设备的性能达到最佳。...

    ECLIPSE+RCP应用系统开发方法与实战(PDF 高岗著)

    《ECLIPSE+RCP应用系统开发方法与实战》这本书是高岗先生关于使用Eclipse RCP(Rich Client Platform)进行应用系统开发的一本实战指南。Eclipse RCP是Eclipse IDE的一部分,它提供了一个框架,使得开发者可以构建...

    RCP 常见的扩展点指南

    然后,在插件中创建一个名为 SamplePerspective 的类,实现 IPerspectiveFactory 接口的 createInitialLayout 方法。 在 Eclipse 中,透视图可以通过“窗口→打开透视图→其他”选项来打开。在打开透视图后,可以...

    plugin1_RCP菜单_teamcenter_

    本文将深入探讨“plugin1_RCP菜单_teamcenter_”这一主题,重点讲解如何在Teamcenter的RCP(Rich Client Platform)环境中开发一级和二级主菜单,并通过配置plugin.xml文件来实现这一功能。 首先,让我们理解什么是...

    eclipse rcp应用系统开发方法与实战源代码.zip

    在"eclipse rcp应用系统开发方法与实战源代码.zip"中,我们可以学习到以下关键知识点: 1. **Eclipse RCP架构**:理解Eclipse RCP的基础架构非常重要,包括插件(Plugins)、工作台(Workbench)、视图(Views)、...

    Eclipse-RCP中文入门教程

    - **工作台顾问**:工作台顾问是负责工作台配置的核心类,可以通过重写其中的方法来自定义工作台的行为。 ##### Advisor类详解 - **ApplicationWorkbenchAdvisor**:主要负责配置工作台的基本属性,如窗口样式、...

    ECLIPSE+RCP应用系统开发方法与实战

    非常好的一本JAVA RCP入门实战的书,兼顾理论和实战。

    RCP中文入门教程.rar

    在“RCP中文入门教程.pdf”中,你可能会学习到如何创建一个新的RCP项目,编写插件,定义扩展点,创建视图和编辑器,以及如何管理和配置用户的首选项。教程还可能涵盖如何调试和打包RCP应用,以及如何利用Eclipse的...

    Eclipse RCP 软件打包发布方法

    1. **新建“产品配置”**:在Eclipse中,你需要通过"File" -&gt; "New" -&gt; "Other" -&gt; "Plug-in Development" -&gt; "Product Configuration"来创建一个新的产品配置。这个配置定义了你的应用程序的基本属性,如应用程序的...

Global site tag (gtag.js) - Google Analytics