java - 如何以编程方式从另一个 View 或处理程序添加和定位新的 ViewPart?

标签 java eclipse view eclipse-plugin eclipse-rcp

我知道我可以通过 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 应该出现的位置以及它(一个实例)在透视中显式定位时实际出现的位置:

enter image description here

更新3

以下工作有效:

    IFolderLayout folder = layout.createFolder("chatfolder", IPageLayout.LEFT, 1.0f, editorArea);
    folder.addPlaceholder(ChatView.ID + ":*");

尽管 0.95f 被认为是最大值,但我还是使用了 1.0f。如果我使用 0.95f,则不会占用全部区域。

最佳答案

您可以在创建初始布局时添加占位符。之后,从其他 View 中,您只需显示您想要显示的 View 。它将出现在它的占位符中。

See 9.2 Perspective

关于java - 如何以编程方式从另一个 View 或处理程序添加和定位新的 ViewPart?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21221863/

相关文章:

java - 在 Linux 上使用 Java 从 Windows 计算机中删除数百万个文件

java - 反射访问内部类时的异常

java - foo.jar 未标记为可执行文件

java - Android 主屏幕项目,RuntimeException

PHP - 在数据库中存储页面 View 的最佳实践

swift - 如何快速添加观察者以更改 View 框架

java - 绘制图表

java - 是否可以从 JSTL forEach 循环中的列表访问特定元素/对象?

android - 如何在 Eclipse ant 构建中使用 M 预览在 Android 项目中包含 http 库

asp.net-mvc - foreach 语句无法运行,因为不包含 'GetEnumerator' 的公共(public)定义