eclipse的菜单menu、工具栏toolbar乃至视图的上下文菜单contextmenu都是使用Action或Command实现的。

Action即是

org.eclipse.jface.action.IAction
 
Command即是
org.eclipse.core.commands.Command
 
从它们的包名可以看出,Action是UI相关的,除了可执行代码(run方法)以外,还会包含一些UI信息,比如动作名称(Label),描述图片(Image)等等。
而Command则完全是业务代码,它更关注于操作本身,(在编辑器中,一系列被执行了的命令会进入命令栈,以此为依据来实现redo和undo功能)。
 
本篇文章重点要讨论的是如何在eclipse的Menu栏上注册一个Action。分三种情况讨论:
1、添加一个菜单栏并添加一个菜单项
2、在自定义的菜单栏里添加一个子菜单
3、为eclipse的指定菜单栏的指定的子菜单添加一个子菜单项
 
所有功能使用org.eclipse.ui.actionSet实现。
 
1、添加一个菜单栏并添加一个菜单项
 
扩展点定义如下:
<extension
point="org.eclipse.ui.actionSets">
<actionSet
id="test.my.actionSet"
label="test.my.actionSet"
visible="true">
<menu
id="test.my.menu"
label="我的Menu">
<separator
name="test.sp">
</separator>
</menu>
<action
class="test.my.TestAction"
id="test.my.action"
label="我的Action"
menubarPath="test.my.menu/test.sp"
style="push">
</action>
</actionSet>
</extension>

在上述扩展配置中,我们注册了一个ActionSet,为该ActionSet添加了一个Menu,一个Action,为Menu添加了一个Seperator。

然后将Action的menubarPath设置为[Menu ID]/[Sperarot ID]

2、在自定义的菜单栏里添加一个子菜单

<extension
point="org.eclipse.ui.actionSets">
<actionSet
id="test.my.actionSet"
label="test.my.actionSet"
visible="true">
<menu
id="test.my.menu"
label="我的菜单">
<separator
name="test.sp">
</separator>
</menu>
<menu
id="test.my.submenu"
label="我的子菜单"
path="test.my.menu/test.sp">
</menu>
<action
class="test.my.TestAction"
id="test.my.action"
label="我的Action"
menubarPath="test.my.menu/test.my.submenu/additions"
style="push">
</action>
</actionSet>
</extension>

插入子菜单的配置和插入菜单项的配置是一样的,为子菜单添加子菜单项则需要知道菜单的ID,子菜单的ID。

在Action配置的menubarPath上填写:[Menu ID]/[SubMenu ID]/additions

即可。效果如下图所示:

3、为eclipse的指定菜单栏的指定的子菜单添加一个子菜单项
在RCP开发中有一个常见需求,即是为Eclipse的File菜单的New子菜单中添加一个新的子菜单项。
通过上面的学习,我们知道,只要知道菜单ID和子菜单ID,即可完成需求。
如何知道这两项呢?
我们可以使用Plugin Menu Spy工具,如果你的Eclipse是RCP/RAP版本,或者安装了PDE插件,就会有这个功能。
按快捷键alt+shift+F2
鼠标图标会变成一个放大镜和一张图纸样式,即是Plug-in Menu Spy成功启动。
用鼠标点选File->Close,弹出如下界面:
可知菜单ID为file。
 
用鼠标点选File->New->Project,弹出如下界面:
 
 
可知,子菜单ID为new
于是,添加如下配置:
   <extension
point="org.eclipse.ui.actionSets">
<actionSet
id="test.my.actionSet"
label="test.my.actionSet"
visible="true">
<action
class="test.my.TestAction"
id="test.my.action"
label="我的Action"
menubarPath="file/new/additions"
style="push">
</action>
</actionSet>
</extension>

效果如图所示:

RCP:利用actionSet在菜单(menu)里添加内容的更多相关文章

  1. 解决android4.0系统中菜单(Menu)添加Icon无效问题

    本文转载自: http://blog.csdn.net/stevenhu_223/article/details/9705173 在Android4.0系统中,创建菜单Menu,通过setIcon方法 ...

  2. odoo视图 “动作” 里添加菜单按钮:案例

    ####################################################################################odoo中常用方法,在动作里面添 ...

  3. yii2 rbac权限控制之菜单menu详细教程

    作者:白狼 出处:http://www.manks.top/article/yii2_rbac_menu本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则 ...

  4. yii2权限控制rbac之菜单menu最详细教程

    前面我们在博文 yii2搭建完美后台并实现rbac权限控制实例教程中完美实现了yii2的后台搭建和rbac权限控制,如果你还没有实现,请先看上文再回来参考本文,因为本文是在上文的基础上进行完善和补充. ...

  5. Ecshop 后台增加一个左侧列表菜单menu菜单的方法

    Ecshop 后台增加一个左侧列表菜单menu菜单需要修改三个文件:/admin/includes/inc_menu.php/admin/includes/inc_priv.php/languages ...

  6. iOS 向模拟器里添加照片

    iOS 向模拟器里添加照片 模拟器里Photos最开始时是没有照片的,有时我们做Demo时需要Photos里面的照片做测试,这时就需要把Mac上的照片导入到模拟器里.步骤如下: 1,打开模拟器 2,选 ...

  7. 后台增加一个左侧列表菜单menu菜单的方法

    Ecshop 后台增加一个左侧列表菜单menu菜单需要修改三个文件:/admin/includes/inc_menu.php/admin/includes/inc_priv.php/languages ...

  8. 如何在settings里的休眠模式里添加永不休眠

    最近项目需求里需要在设置菜单的休眠模式里添加一项永不休眠选择项.针对MTK平台的修改方式有如下几步骤.(其他平台和android原生系统的修改方式类似,只是android原生系统修改永不休眠需要通过设 ...

  9. 【转】Ecshop 后台增加一个左侧列表菜单menu菜单的方法

    cshop 后台增加一个左侧列表菜单menu菜单需要修改三个文件:/admin/includes/inc_menu.php/admin/includes/inc_priv.php/languages/ ...

随机推荐

  1. Nginx配置upstream实现负载均衡

    如果Nginx没有仅仅只能代理一台服务器的话,那它也不可能像今天这么火,Nginx可以配置代理多台服务器,当一台服务器宕机之后,仍能保持系统可用.具体配置过程如下: 1. 在http节点下,添加ups ...

  2. ExtJs 获取Dom对象

    对象指页面上的某一部分,如:Input等.我觉得在EXT JS中会有三类基本对象,htmlelement , EXT.Element和CompositeElement .分别解释一下: htmlele ...

  3. MVC中使用EF:排序,过滤,分页

    原文链接:http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/sorting-filtering-and-paging ...

  4. 16条Web2.0法则的编程思想

    1.在你开始之前,先定一个简单的目标.无论你是一个Web 2.0应用的创建者还是用户,请清晰的构思你的目标.就像“我需要保存一个书签”或者“我准 备帮助人们创建可编辑的.共享的页面”这样的目标,让你保 ...

  5. 使用自定义的framework

    1.创建framework工程,创建需要的类将接口暴露在public中

  6. C语言小练习三

    题目要求: 定义一个二维数组保存 10个学生的5门课成绩,分别用函数实现:(1)input():输入每个学生的成绩:(2)output():输出每个学生的成绩:(3)aver_stu():计算并输出每 ...

  7. AVL-tree

    //avl.h#ifndef __AVL_H__#define __AVL_H__ typedef int KEY_TYPE; /* struct */typedef struct AVL{ KEY_ ...

  8. 闲来无事——第一弹 Java基础 基本数据类型

    一个优秀的Java类一定要去优质的名称,类的命名主要有字母和数字,并且必须以字母开头:虽然说没有明确规定类名首字母要大写,但是实际上如果出现首字母小写的类名,那就呵呵了,坐等挨骂吧!类名首字母大写是业 ...

  9. matlab资源

    百度网盘  链接:http://pan.baidu.com/s/1c06ikEW 密码:9dpt包含matlab6.5,7,7.01,7.04,7.1,Matlab2006b(7.3),Matlab  ...

  10. HTTP1.1初识

    Http(超文本传输协议)是一个基于请求与响应模式的.无状态的.应用层的协议. Http1.1版中,有一个持续连接(Persistent Connections)机制,其作为Http1.1中建立连接的 ...