如何以编程方式移除Eclipse RCP视图工具栏的Detach右键菜单项
移除Eclipse RCP视图工具栏右键菜单中的Detach项
下面介绍两种实现方式,重点说明编程式移除的步骤:
编程式实现
在你的视图类中,通过监听工具栏上下文菜单的显示事件,移除Detach菜单项:
- 在
createPartControl方法中,获取视图的工具栏控件及对应的上下文菜单。 - 注册
MenuListener,在菜单即将展示时遍历菜单项,通过Action ID定位Detach项并销毁。
代码示例:
@Override public void createPartControl(Composite parent) { // 这里添加你的视图内容初始化代码 // ... IToolBarManager toolBarManager = getViewSite().getActionBars().getToolBarManager(); Control toolBarControl = toolBarManager.getControl(); Menu toolBarMenu = toolBarControl.getMenu(); if (toolBarMenu != null) { toolBarMenu.addMenuListener(new MenuAdapter() { @Override public void menuAboutToShow(MenuEvent e) { for (MenuItem item : toolBarMenu.getItems()) { Object data = item.getData(); if (data instanceof Action) { Action action = (Action) data; if (ActionFactory.DETACH.getId().equals(action.getId())) { item.dispose(); break; } } } } }); } }
关键说明
- 使用
ActionFactory.DETACH.getId()定位动作,避免依赖本地化的菜单项文本,适配多语言环境。 - 监听
menuAboutToShow事件能确保每次菜单弹出前都执行移除操作,防止Workbench自动恢复该菜单项。
声明式扩展点实现(可选)
如果偏好配置式操作,可在plugin.xml中添加扩展直接移除Detach项:
<extension point="org.eclipse.ui.menus"> <menuContribution locationURI="toolbar:你的视图ID?after=additions"> <remove id="org.eclipse.ui.actions.DetachAction" /> </menuContribution> </extension>
将上述代码中的你的视图ID替换为你实际的视图ID即可。
内容的提问来源于stack exchange,提问作者mahesh bhagirath
相关产品推荐
相关产品推荐

