Eclipse 4中如何配置RCP应用视图默认打开方式(独立/主窗口)
在Eclipse 4 RCP中配置视图的打开方式(独立窗口/主窗口依附)
完全可以实现这个需求,你可以结合用户偏好配置+不同的视图打开API来实现,下面分两种场景给出具体方案:
一、基于3.x兼容API(你当前使用的方式)
你现在用的showView属于Eclipse 3.x的兼容API,在Eclipse 4中依然可以使用,针对两种打开方式的实现如下:
1. 依附主窗口打开(当前逻辑)
直接沿用你现有的代码即可:
PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().showView(id);
2. 在独立窗口打开
调用openWorkbenchWindow创建新工作台窗口,再在新窗口的页面中打开视图:
// 创建新的空白工作台窗口 IWorkbenchWindow newWindow = PlatformUI.getWorkbench().openWorkbenchWindow(null); // 在新窗口的页面中打开目标视图 newWindow.getActivePage().showView(id);
如果需要给新窗口指定初始视角,可以把null替换为视角ID。
二、基于Eclipse 4原生e4 API(纯e4 RCP场景)
如果你的应用是纯e4 RCP(未依赖3.x兼容层),可以用e4的模型服务和部件服务实现:
1. 依附主窗口打开
通过依赖注入获取EPartService,直接激活视图:
// 依赖注入获取EPartService @Inject private EPartService partService; // 打开视图并激活 partService.showPart(viewId, PartState.ACTIVATE);
2. 在独立窗口打开
通过EModelService创建新窗口模型,再添加视图部件:
@Inject private EModelService modelService; @Inject private EPartService partService; @Inject private MApplication app; // 创建新窗口模型 MWindow newWindow = modelService.createModelElement(MWindow.class); newWindow.setLabel("新视图窗口"); // 将新窗口添加到应用模型中 app.getChildren().add(newWindow); // 创建并显示视图部件 MPart viewPart = modelService.createSharedPart(viewId, newWindow); if (viewPart != null) { partService.showPart(viewPart, PartState.ACTIVATE); }
三、整合用户配置逻辑
要让用户可以选择打开方式,你需要:
- 添加偏好配置:用Eclipse的
IPreferenceStore存储用户选择,比如定义一个键"view.openInNewWindow"来标记是否在新窗口打开。 - 读取配置并分支逻辑:
// 获取插件的偏好存储 IPreferenceStore prefStore = Activator.getDefault().getPreferenceStore(); boolean openInNewWindow = prefStore.getBoolean("view.openInNewWindow"); if (openInNewWindow) { // 执行新窗口打开逻辑(二选一:兼容API或e4 API) IWorkbenchWindow newWindow = PlatformUI.getWorkbench().openWorkbenchWindow(null); newWindow.getActivePage().showView(id); } else { // 执行主窗口打开逻辑 PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().showView(id); }
- 添加偏好设置页面:创建一个偏好页面,让用户通过单选框/复选框选择打开方式,配置项会自动保存到
IPreferenceStore中。
内容的提问来源于stack exchange,提问作者Jose Renato
相关产品推荐
相关产品推荐

