You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何以编程方式移除Eclipse RCP视图工具栏的Detach右键菜单项

移除Eclipse RCP视图工具栏右键菜单中的Detach项

下面介绍两种实现方式,重点说明编程式移除的步骤:

编程式实现

在你的视图类中,通过监听工具栏上下文菜单的显示事件,移除Detach菜单项:

  1. 在createPartControl方法中,获取视图的工具栏控件及对应的上下文菜单。
  2. 注册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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 11:21:25