RCP:利用actionSet在菜单(menu)里添加内容

简介: eclipse的菜单menu、工具栏toolbar乃至视图的上下文菜单contextmenu都是使用Action或Command实现的。 Action即是 org.eclipse.jface.action.IAction   Command即是 org.eclipse.core.commands.Command   从它们的包名可以看出,Action是UI相关的,除了可执行代码(run方法)以外,还会包含一些UI信息,比如动作名称(Label),描述图片(Image)等等。

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>

效果如图所示:

 

 

目录
相关文章
|
5月前
命令菜单
命令菜单
26 2
|
3月前
win32编程 -- 系统菜单及右键菜单
win32编程 -- 系统菜单及右键菜单
27 1
|
12月前
|
XML Java 数据格式
干货一:通过自定义PopupWindow实现QQ菜单选项功能
干货一:通过自定义PopupWindow实现QQ菜单选项功能
59 0
|
XML Java Android开发
菜单(Menu)
本章给大家带来的是Android中的Menu(菜单),而在Android中的菜单有如下几种: OptionMenu:选项菜单,android中最常见的菜单,通过Menu键来调用 SubMenu:子菜单,android中点击子菜单将弹出一个显示子菜单项的悬浮框,子菜单不支持嵌套,即不能包括其他子菜单 ContextMenu:上下文菜单,通过长按某个视图组件后出现的菜单,该组件需注册上下文菜单本节我们来依依学习这几种菜单的用法~ PS:官方文档:menus 1.OptionMenu(选项菜单) 1)如何使用OptionMenu? 答:非常简单,重写两个方法就好,其实这两个方法我们在创
71 0
|
Java iOS开发 MacOS
Java开发GUI之Menu菜单
Java开发GUI之Menu菜单
304 0
|
XML Android开发 数据格式
菜单Menu
前言 星光不问赶路人,时间不负有心人。 选项菜单和子菜单 Android应用中的菜单默认是看不见的,只有当用户按下手机上的“MENU”键时,系统才会显示该应用关联的菜单,这种菜单叫选项菜单。
986 0