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

Eclipse RCP自定义视图如何移除/禁用关闭按钮?

如何在Eclipse RCP中让自定义视图无法关闭(移除关闭按钮)

我在Eclipse RCP应用里定义了一个和Problems视图相邻的自定义视图,希望这个视图始终保持打开状态,不能被关闭,也就是要把视图的关闭按钮禁用或者移除。我的视图类定义如下:

public class ReferencesView extends ViewPart implements ISearchResultViewPart, IPersistable {...}

我试过下面这段代码,但没有效果:

@Override
public void init(IViewSite site) throws PartInitException {
    super.init(site);
    site.getActionBars().getToolBarManager().remove("org.eclipse.ui.file.close");
}

解决方案

方法1:通过扩展配置直接禁用关闭(推荐)

在plugin.xml的org.eclipse.ui.views扩展点中,给你的视图添加closeable="false"属性,这是最简洁的配置方式:

<extension
      point="org.eclipse.ui.views">
   <view
         class="com.yourpackage.ReferencesView"
         id="com.yourpackage.referencesView"
         name="References View"
         closeable="false">
   </view>
</extension>

配置后视图的关闭按钮会直接消失,也无法通过菜单关闭。

方法2:在代码中移除/禁用关闭相关动作

如果配置方式不适用,可以在视图的init方法中,同时移除工具栏和菜单里的关闭动作:

@Override
public void init(IViewSite site) throws PartInitException {
    super.init(site);
    
    // 移除视图工具栏的关闭按钮
    site.getActionBars().getToolBarManager().remove("org.eclipse.ui.file.close");
    // 移除视图右键菜单中的关闭选项
    site.getActionBars().getMenuManager().remove("org.eclipse.ui.file.close");
    
    // 禁用窗口菜单中的关闭视图选项
    IWorkbenchWindow window = site.getWorkbenchWindow();
    if (window != null) {
        IAction closeAction = window.getActionBars().getMenuManager().find("org.eclipse.ui.file.close");
        if (closeAction != null) {
            closeAction.setEnabled(false);
        }
    }
}

注:部分Eclipse版本中关闭动作的ID可能为"close",可根据实际情况调整。

方法3:拦截视图关闭事件

如果上述方法都无效,可以通过添加部件监听器拦截关闭请求:

@Override
public void createPartControl(Composite parent) {
    // 你的视图初始化代码
    
    // 添加关闭事件拦截
    getSite().getWorkbenchWindow().getPartService().addPartListener(new IPartListener2() {
        @Override
        public boolean partClose(IWorkbenchPartReference partRef) {
            if (partRef.getPart(false) == ReferencesView.this) {
                // 返回false阻止视图关闭
                return false;
            }
            return true;
        }

        // 实现其他空方法
        @Override public void partActivated(IWorkbenchPartReference partRef) {}
        @Override public void partBroughtToTop(IWorkbenchPartReference partRef) {}
        @Override public void partClosed(IWorkbenchPartReference partRef) {}
        @Override public void partDeactivated(IWorkbenchPartReference partRef) {}
        @Override public void partOpened(IWorkbenchPartReference partRef) {}
        @Override public void partHidden(IWorkbenchPartReference partRef) {}
        @Override public void partVisible(IWorkbenchPartReference partRef) {}
    });
}

内容的提问来源于stack exchange,提问作者ags

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 07:43:14