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)——VRP和telnet
VRP(Versatile Routing Platform)是其数据通信产品的操作系统,支持路由器和交换机的高效运行,提供统一用户界面和控制平面功能。VRP通过组件化结构实现功能裁剪和扩展。设备初始化时,BootROM先启动,然后运行系统软件,从默认路径读取配置文件。管理设备可通过命令行或Web网管,命令行包括用户界面和级别控制,提供权限管理。文件系统管理涉及存储设备如SDRAM、Flash、NVRAM等。用户可使用 PuTTY 工具通过Console口本地登录,或通过SSH远程登录。VRP命令行具有编辑和在线帮助功能,提供undo命令恢复默认设置。
|
SQL Java 关系型数据库
SpringBoot从入门到精通(三十)如何使用JdbcTemplate操作数据库?
前面介绍了Mybatis数据持久化框架,Mybatis虽然功能强大,但是,使用起来还是比较复杂的。所以接下来介绍一个简单的数据持久化框架——JdbcTemplate。
10329 2
SpringBoot从入门到精通(三十)如何使用JdbcTemplate操作数据库?
|
3月前
|
缓存 负载均衡 安全
Nginx反向代理详解
Nginx的反向代理和负载均衡可以保证后端服务器资源的安全以及各个服务器可以根据性能设置权重来控制服务器所接收的访问量,实现真正的负载均衡。
|
存储 运维 前端开发
如何自己搭建一个网站?
‌确定需求和目标‌:在开始搭建网站之前,明确网站的需求和核心,网站主要是什么途径:展示产品或服务、提供信息和资源、增加销售、提升品牌形象等。
598 3
|
人工智能
最近很火的人工智能ChatGPT可以实现“ 连续对话”机制
这篇文章介绍了人工智能ChatGPT实现连续对话机制的方法,包括如何通过传递特定的参数如conversation_id来保持对话的连续性。
最近很火的人工智能ChatGPT可以实现“ 连续对话”机制
|
JavaScript Java 测试技术
从零开始:Nexus私服搭建与Maven仓库配置的完全指南
从零开始:Nexus私服搭建与Maven仓库配置的完全指南
21940 7
|
NoSQL 前端开发 Java
Redis使用系列) Springboot 使用redis实现接口幂等性拦截 十一
Redis使用系列) Springboot 使用redis实现接口幂等性拦截 十一
366 0
Redis使用系列) Springboot 使用redis实现接口幂等性拦截 十一
|
对象存储
使用流式下载从阿里OSS获取PDF文件
使用流式下载从阿里OSS获取PDF文件
1189 1
|
设计模式 Java 关系型数据库
JAVA设计模式第十讲:SPI - 业务差异解决方案
JAVA设计模式第十讲:SPI - 业务差异解决方案
503 0
JAVA设计模式第十讲:SPI - 业务差异解决方案
|
关系型数据库 MySQL 数据库
SQLite、MySQL和PostgreSQL 三种关系数据库哪个好?
关系型数据库的使用已经有相当长的时间了。它们变得流行起来托了管理系统的福,关系模型被实现得相当的好,并且被证明是操作数据的好方法(特别是事务性强的应用)。 在这篇DigitalOcean文章中,我们将尝试理解一些最常用、最流行的关系型数据库管理系统(RDBMS)的内核区别。
2039 0
下一篇
开通oss服务