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)等等。
而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>
效果如图所示:
分类:
Eclipse RCP
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
2012-03-07 Linux下php调用命令行的小研究
2012-03-07 一个php写的linux下lvm自动快照实现脚本
2012-03-07 修改unix服务器时间
2012-03-07 关于php操作windows计划任务管理
2012-03-07 Android环境搭建
2012-03-07 Android的Notification研究
2012-03-07 OSGI开发的一点心得