Rcp 中添加eclipse中的菜单栏

自己创建的Eclipse rcp 插件中需要添加像Eclipse中的菜单栏和工具栏,实现该功能可以通过两种方式:1种是通过扩展点,2种是通过在ApplicationActionBarAdvisor 类中编写代码实现。

1、通过扩展点实现:org.eclipse.ui.menus 用于扩展菜单栏,该例子实现eclipse中的window菜单栏中的部分Action

ViewsShortlistContributionItem 源码:

package com.workflow.menu;

import java.util.ArrayList;
import java.util.List;

import org.eclipse.jface.action.IContributionItem;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.actions.CompoundContributionItem;
import org.eclipse.ui.actions.ContributionItemFactory;
/**
 * 添加show view 的动态菜单项
 * @author lww
 *
 */
public class ViewsShortlistContributionItem extends CompoundContributionItem {

	@Override
	protected IContributionItem[] getContributionItems() {
		IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
        IContributionItem item = ContributionItemFactory.VIEWS_SHORTLIST.create(window);//创建viewshortlist

        List<IContributionItem> menuContributionList = new ArrayList<IContributionItem>();
        menuContributionList.add(item);

        return menuContributionList.toArray(new IContributionItem[0]);
	}

}

PerspectiveContributionItem 源码:

package com.workflow.menu;

import java.util.ArrayList;
import java.util.List;

import org.eclipse.jface.action.IContributionItem;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.actions.CompoundContributionItem;
import org.eclipse.ui.actions.ContributionItemFactory;
/**
 * 创建透视图二级菜单
 * @author lww
 *
 */
public class PerspectiveContributionItem  extends CompoundContributionItem{

	@Override
	protected IContributionItem[] getContributionItems() {
		IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
        IContributionItem item = ContributionItemFactory.PERSPECTIVES_SHORTLIST.create(window);

        List<IContributionItem> menuContributionList = new ArrayList<IContributionItem>();
        menuContributionList.add(item);

        return menuContributionList.toArray(new IContributionItem[0]);
	}

}

plugin.xml 中的内容如下:

这样就实现了自己的rcp的菜单中添加了window菜单栏,效果如下:

另一种方式是通过代码实现:

package mydesigner;

import org.eclipse.jface.action.IContributionItem;
import org.eclipse.jface.action.ICoolBarManager;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.action.Separator;
import org.eclipse.jface.action.ToolBarManager;
import org.eclipse.ui.IWorkbenchActionConstants;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.actions.ActionFactory;
import org.eclipse.ui.actions.ContributionItemFactory;
import org.eclipse.ui.actions.ActionFactory.IWorkbenchAction;
import org.eclipse.ui.application.ActionBarAdvisor;
import org.eclipse.ui.application.IActionBarConfigurer;

public class ApplicationActionBarAdvisor extends ActionBarAdvisor {

	private IWorkbenchAction exitAction;//退出按钮
	private IWorkbenchAction aboutAction;//关于按钮
	private IWorkbenchAction newAction;//新建按钮

	private IWorkbenchAction saveProjectAction;// 保存工程文件
	private IWorkbenchAction saveAllAction;// 保存全部

	private IWorkbenchAction newWindowAction;

	private IContributionItem item;
	//文件菜单栏中的action
	private IWorkbenchAction importAction;
	private IWorkbenchAction exportAction;

	public ApplicationActionBarAdvisor(IActionBarConfigurer configurer) {
		super(configurer);
	}
	//创建Action
	protected void makeActions(IWorkbenchWindow window) {
		exitAction = ActionFactory.QUIT.create(window);
		register(exitAction);

		aboutAction = ActionFactory.ABOUT.create(window);
		register(aboutAction);

		newAction = ActionFactory.NEW.create(window);
		register(newAction);//新建按钮

		saveProjectAction = ActionFactory.SAVE.create(window);
		saveAllAction = ActionFactory.SAVE_ALL.create(window);
		this.getActionBarConfigurer().registerGlobalAction(saveProjectAction); // ctrl+s,保存工程文件。
		this.getActionBarConfigurer().registerGlobalAction(saveAllAction);// 激活快捷键,ctrl+shift+s,全部保存。

		newWindowAction = ActionFactory.OPEN_NEW_WINDOW.create(window);
		register(newWindowAction);//注册成全局Action

        item = ContributionItemFactory.VIEWS_SHORTLIST.create(window);//创建viewshortlist

        importAction = ActionFactory.IMPORT.create(window);
        register(importAction);

        exportAction = ActionFactory.EXPORT.create(window);
        register(exportAction);

	}
	//菜单栏
	protected void fillMenuBar(IMenuManager menuBar) {
		//File菜单栏
		MenuManager fileMenu = new MenuManager("&File", IWorkbenchActionConstants.M_FILE);
		fileMenu.add(exitAction);
		fileMenu.add(new Separator());//添加分隔栏
		fileMenu.add(newAction);
		fileMenu.add(new Separator());
		fileMenu.add(importAction);//导入
		fileMenu.add(exportAction);//导出
		//Help菜单栏
		MenuManager helpMenu = new MenuManager("&Help", IWorkbenchActionConstants.M_HELP);
		helpMenu.add(aboutAction);

		//Window菜单栏
		MenuManager windowMenu = new MenuManager("&Window", IWorkbenchActionConstants.M_WINDOW);
		windowMenu.add(newWindowAction);

		MenuManager showView = new MenuManager("Show View");
		showView.add(item);//添加ContributionItem
        windowMenu.add(showView);

		menuBar.add(fileMenu);//把菜单栏添加到工作空间
		menuBar.add(helpMenu);
		menuBar.add(windowMenu);

	}
	//添加到工具栏
	@Override
	protected void fillCoolBar(ICoolBarManager coolBar) {
		ToolBarManager barManager = new ToolBarManager();
		barManager.add(saveProjectAction);
		barManager.add(saveAllAction);
		coolBar.add(barManager);
	}
}

效果如下图:

若想添加其它的Action,可以在类:

org.eclipse.ui.IWorkbenchActionConstants
org.eclipse.ui.actions.ActionFactory
org.eclipse.ui.actions.ContributionItemFactory

org.eclipse.ui.IWorkbenchCommandConstants 查找到对应Action的实现,eclipse实现。

Rcp 中添加eclipse中的菜单栏,布布扣,bubuko.com

时间: 2024-08-06 00:48:40

Rcp 中添加eclipse中的菜单栏的相关文章

新建解决方案 在解决方案中添加项目中,解决方案消失的解决办法

新建空白解决方案的步骤:文件--新建项目--其他项目类型--Visual Studio 解决方案 这样就建立出了一个空白解决方案. 然后在资源管理器中可以添加项目,但是添加项目的时候会发现,解决方案消失了,解决办法  工具--选项--项目和解决方案(如果看不到这个,在下方有一个显示所有设置打勾),然后右边有一个 总是显示解决方案.勾上,解决方案就出现了 记录一下. 新建解决方案 在解决方案中添加项目中,解决方案消失的解决办法,布布扣,bubuko.com

Ubuntu中添加eclipse

环境:Ubuntu 14.04 步骤: 1.安装配置JDK,详见 http://my.oschina.net/u/1407116/blog/227084 2.下载eclipse 从官网http://www.eclipse.org/downloads/下载Eclipse IDE for Java EE Developers的Linux版本 eclipse-SDK-3.7.2-linux-gtk.tar.gz 3.解压$ tar -zxvf eclipse-SDK-3.7.2-linux-gtk.t

cocos2d-x3.2中在Eclipse中java.lang.NullPointerException的问题解决

错误1分析:java.lang.NullPointerException即空指针,没有赋值或者赋值错误导致了空指针引用. 看看有哪里没有初始化造成空指针. 总结:java.lang.NullPointerException引用空指针错误的解决办法是仔细检查代码,看是否有实例没有初始化就 进行了引用. Eclipse的安卓开发调试环境中,不能指出是哪个变量未初始化,以及在源码的那一行,从而增加了新手调试的难度. 一般寻找该问题可通过增加断点逐步运行查找,但是由于出错语句在某个函数的最后一句,因此断

ubuntu中安装eclipse

上一篇说了安装jdk的事,于是趁热打铁,决定把eclipse也安装了. 下载这一系列就不用说了. 下载完成之后: 然后解压,解压之后文件剪切到/usr/software文件夹中,同时重命名为eclipse,剪贴重命名方法参见 ubuntu文件管理常用命令 . 这样eclipse就可以运行了,如图: 不过每次这样敲命令都特别麻烦,我们需要在/usr/bin中添加eclipse启动命令: 这样,在命令行敲eclipse就能启动eclipse了. 版权声明:本文为博主原创文章,未经博主允许不得转载.

全面认识Eclipse中JVM内存设置(转)

这里向大家描述一下Eclipse中如何进行JVM内存设置,JVM主要管理两种类型的内存:堆和非堆.简单来说堆就是Java代码可及的内存,是留给开发人员使用的:非堆就是JVM留给自己用的,所以方法区.JVM内部处理或优化所需的内存(如JIT编译后的代码缓存).每个类结构(如运行时常数池.字段和方法数据)以及方法和构造方法的代码都在非堆内存中. Eclipse中JVM内存设置 eclipse.ini内存设置 -vmargs-Xms128M-Xmx512M-XX:PermSize=64M-XX:Max

(转)如何在maven的pom.xml中添加本地jar包

1 maven本地仓库认识 maven本地仓库中的jar目录一般分为三层:图中的1 2 3分别如下所示: 1 groupId 2 artifactId 3 version 4 jar包的依赖 如果要将maven本地仓库中的jar包添加到项目中,直接打开4 xx.pom文件,将改jar包的相关依赖复制pom.xml文件中即可. 2 将本地jar包添加到本地仓库 2.1 添加jar到本地仓库 原则上Maven的设计是不需要这么做的,因为pom.xml中依赖的jar包会自动实现从中央仓库下载到本地仓库

xcode中使用xib添加autolayout中constrain to margins的不同

在使用xcode7 在storyboard中添加autolayout中发现 如果添加在view 直接添加到viewcontroller的view 上 constrain to margins    只有左右20point的 如果view(viewB)没有直接添加到viewcontroller的view上而是添加到一个view 上,那么 viewB 的 constrain to margins是 上下左右各为8point的 仅是自己的一点体会,如果不对欢迎拍砖!!!

Standford Parser学习入门(1)-Eclipse中配置

Stanford Parser是斯坦福大学研发的用于语法分析的工具,属于stanford nlp系列工具之一.本文主要介绍Standfor Parser的入门用法. 在Stanford官方网站下载最新安装包(目前是3.6.0),点击 下载,下载最新的model stanford-english-corenlp-2016-01-10-models.jar 解压下载后的zip包 stanford-parser-full-2015-12-09.zip,里面会有数据,依赖包以及demo,还有相关的sou

Eclipse中查看.properties文件中文乱码问题

在中文操作系统中,Eclipse中的Java类型文件的编码的默认设置是GBK,但是对Properties资源文件的编码的默认设置是ISO-8859-1.所以编辑Java文件中的中文不会出现问题,但编辑Properties资源文件中的中文会出现问题. 可以直接修改Properties资源文件的默认编码了,在Eclipse主界面下,打开Window->Perferences->General->ContentTypes: 问题得到解决