2012-04-17 78 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