我知道我可以通过 plugin.xml
创建新 View 。我还可以通过 IPerpspectiveFactory.createInitialLayout(IPageLayout)
使用如下代码创建新 View
layout.addView(ChatView.ID, IPageLayout.LEFT, 1.0f, editorArea);
是否可以通过命令从另一个 View 执行相同的操作?
而且我的 View 不是单例的,所以我希望创建 View 副本。
不幸的是,使用类似的代码
HandlerUtil.getActiveWorkbenchWindow(event).getActivePage().showView(viewId);
我无法在布局中定义 View 位置。我想将所有新 View 传递到布局文件夹。
更新
我已按以下方式修改了透视代码:
public void createInitialLayout(IPageLayout layout) {
String editorArea = layout.getEditorArea();
layout.addView(IConsoleConstants.ID_CONSOLE_VIEW, IPageLayout.BOTTOM, 0.75f, editorArea);
layout.addView(CoreSettingsView.ID, IPageLayout.LEFT, 0.25f, editorArea);
//layout.addView(ChatView.ID, IPageLayout.LEFT, 1.0f, editorArea);
IFolderLayout folder = layout.createFolder("chatfolder", IPageLayout.LEFT, 1.0f, editorArea);
folder.addPlaceholder(ChatView.ID);
}
之前的注释行导致聊天 View 出现在透视图的“主”区域中。
现在我根据建议将其更改为在同一位置放置占位符。
handler的执行代码如下:
@Override
public Object execute(ExecutionEvent event) throws ExecutionException {
try {
ChatView chatView = (ChatView) HandlerUtil.getActiveWorkbenchWindow(event).getActivePage().showView(
ChatView.ID,
Integer.toString(counter++),
IWorkbenchPage.VIEW_ACTIVATE);
} catch (PartInitException e) {
e.printStackTrace();
}
return event;
}
这会导致新 View 出现,但它们都出现在与控制台 View 所在的位置相同的位置。 IE。不是直接定位时出现的那个地方。
为什么?
更新2
这是关于占位符如何发生的图片。红色箭头显示按下绿色按钮时新 View 实际出现的位置。蓝色箭头显示 View 应该出现的位置以及它(一个实例)在透视中显式定位时实际出现的位置:
更新3
以下工作有效:
IFolderLayout folder = layout.createFolder("chatfolder", IPageLayout.LEFT, 1.0f, editorArea);
folder.addPlaceholder(ChatView.ID + ":*");
尽管 0.95f 被认为是最大值,但我还是使用了 1.0f。如果我使用 0.95f,则不会占用全部区域。
最佳答案
您可以在创建初始布局时添加占位符。之后,从其他 View 中,您只需显示您想要显示的 View 。它将出现在它的占位符中。
关于java - 如何以编程方式从另一个 View 或处理程序添加和定位新的 ViewPart?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21221863/