2012-04-17 97 views
2

我有一个透视图,通过“扩展”创建了两个视图。第一个视图有一个表,第二个视图有一个树。我想在应用程序打开时显示第一个视图,当用户从表格中选择一个项目时,将此项目名称放在第二个视图的文本字段中,并在第二个视图打开时隐藏第一个视图。我想要当用户按下按钮时也隐藏第二个视图并显示第一个视图。那可能吗?。带有两个视图的RCP透视

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

+0

看这个问题 - [编程表示从Eclipse插件视图(http://stackoverflow.com/q/171824/150166) - 这答案 - [如何使视图中可见/在运行时不可见](http://stackoverflow.com/a/8295692/150166)。 – 2012-04-17 14:26:32

回答

2

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

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)); 
+0

感谢吉尔伯特的快速反应和你的知识滥用你不会对我产生怀疑: - 我说的意见是通过“扩展”创建的,但实际上是通过“”扩展名“,是否有关? point2- - 我应该实现它的setCloseable方法吗?或者是我所描述的创建视图我可以选择“closeable = true”选项 – 2012-04-17 15:57:39

+0

另一个问题已经逃脱了我: 这样做在开始时只有第一个视图出现第二个隐藏在表中等待选择打开(并关闭第一个)?谢谢你的一切,为我节省了一个真正的障碍 – 2012-04-17 16:12:26

+0

@ user1338650:我在MANIFEST.MF的扩展选项卡上定义了我的视图。我向你展示了结果XML。setClosable方法定义用户是否可以关闭视图。 d您不希望用户能够点击X并关闭视图。在Application类的start方法中,显示第一个视图。 – 2012-04-17 17:53:57