【问题标题】:RCP Perspective with two views具有两个视图的 RCP 透视图
【发布时间】:2012-04-28 18:49:27
【问题描述】:

我有一个通过 "extensions" 创建的两个视图的透视图。第一个视图有一个表,第二个视图有一个树。我只想在应用程序打开时显示第一个视图,当用户从表中选择一个项目时,将此项目名称放在第二个视图的文本字段中,并在第二个视图打开时隐藏第一个视图。我想要当用户按下按钮时,还隐藏第二个视图并显示第一个视图。这可能吗?

我已设法将项目名称放在第二个视图中,但我无法协调显示和隐藏视图。

【问题讨论】:

标签: eclipse-rcp


【解决方案1】:

是的,可以显示和隐藏视图。

1) 每个视图都必须有一个唯一的 ID。此 ID 必须与 plugin.xml 的视图扩展中的 id 匹配。

这是我的 plugin.xml 视图扩展之一。

  <view
        class="gov.bop.rabid.ui.views.PrefetchView"
        icon="icons/folder_user.png"
        id="gov.bop.rabid.ui.views.PrefetchView"
        name="Prefetch"
        restorable="true">
  </view>

这是PrefetchView 中的 ID 定义。

public static final String ID = "gov.bop.rabid.ui.views.PrefetchView";

一般情况下,我将 ID 设置为与类名相同。这对我来说不那么混乱。

2) 在Perspective 类中,createInitialLayout 方法中,您必须定义一个带有占位符的 IFolderLayout。同样,这是我的代码。

    IFolderLayout consoleFolder = layout.createFolder(CONSOLE_ID, 
            IPageLayout.BOTTOM, 0.75f, editorArea);
    consoleFolder.addPlaceholder(PrefetchedInmatesView.ID);
    consoleFolder.addPlaceholder(FoundInmatesView.ID);
    consoleFolder.addView(ProcessedInmatesView.ID);

    setClosable(layout, FoundInmatesView.ID, false);
    setClosable(layout, PrefetchedInmatesView.ID, false);
    setClosable(layout, ProcessedInmatesView.ID, false);

3) 您需要一个允许您从任何其他视图内部访问任何视图的静态方法。我把这个静态方法放在我的Activator 类中,但是你可以把它放在任何你想要的地方。

public static IViewPart getView(IWorkbenchWindow window, String viewId) {
    IViewReference[] refs = window.getActivePage().getViewReferences();
    for (IViewReference viewReference : refs) {
        if (viewReference.getId().equals(viewId)) {
            return viewReference.getView(true);
        }
    }
    return null;
}

4) 最后,您在事件代码中显示和隐藏视图。这是一个例子。

        final PhotoView view = (PhotoView) RabidPlugin.getView(window,
                PhotoView.ID);
        if (view == null)
            return;

                    *** Do stuff with the other view ***

        IWorkbenchPage page = window.getActivePage();
        page.hideView(page.findView(FoundInmatesView.ID));

【讨论】:

  • 感谢 Gilbert 的快速响应,你的知识滥用你不会让我产生怀疑:--我说视图是通过“扩展”创建的,但实际上是通过“透视扩展”创建的,是吗?相关的?。point2--我应该实现 setCloseable 方法吗?或者作为我描述的视图的创建,我可以选择选项“closeable = true”。
  • 另一个让我无法理解的问题:这样做一开始只出现第一个视图,而第二个视图被隐藏,等待表格中的选择打开(并关闭第一个)?谢谢为一切,为我节省了一个真正的障碍
  • @user1338650:我在 MANIFEST.MF 的 Extensions 选项卡上定义了我的视图。我向您展示了生成的 XML。 setClosable 方法定义用户是否可以关闭视图。根据您的描述,我假设您不希望用户能够单击 X 并关闭视图。在 Application 类的 start 方法中,您显示第一个视图。
  • 吉尔伯特再次感谢,我还有一个问题希望你不要介意:你能否举一个像回复中那样详细的例子来告诉我整个过程(实现的方法和类) 对于 viewA 和 viewB 两个假想视图?其中 viewA 是最初呈现的视图,而 viewB 是当用户在 viewA 中选择项目时打开的隐藏视图。我的意思是从你下面的第二点开始。非常感谢,这非常重要。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-25
  • 2014-01-05
  • 1970-01-01
  • 2012-02-14
相关资源
最近更新 更多