2011-01-28 70 views
1

我目前正在構建一個基於Eclipse的RCP應用程序。 在我的插件之一,我通過代碼增加了兩個觀點:Eclipse RCP讓兩個視圖進行通信

layout.addView("dev.asd.tableviewer.tree", IPageLayout.LEFT, 0.25f, IPageLayout.ID_EDITOR_AREA); 
    layout.addView("dev.asd.tableviewer.view", IPageLayout.RIGHT, 0.75f, IPageLayout.ID_EDITOR_AREA); 

第一個視圖包含一個TreeViewer中,第二個一個TableViewer中。現在我想根據treeviewer的選擇來更新tableviewer的內容。我的問題是,我如何從treeviewer中引用tableviewer?或者還有其他方法可以解決這個問題嗎?

+0

你也可以看看這個答案: http://stackoverflow.com/questions/2227701/how-to-communicate-between-views-in-eclipse-rcp – pbanfi 2012-09-06 08:20:18

回答

3

在每個視圖中,定義一個ID。該ID與您在擴展元素詳細信息中定義視圖時在ID字段中定義的ID相同。這裏是我的一個:

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

在您的RCP插件,定義如下方法:

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; 
} 

當你想從不同的視圖引用的視圖,使用下面的代碼:

PrefetchedInmatesView view = (PrefetchedInmatesView) 
       RabidPlugin.getView(window, PrefetchedInmatesView.ID); 

用您的視圖的名稱替換PrefetchedInmatesView,並將插件的名稱替換爲RabidPlugin

+0

PrefetchedInmatesView視圖=(PrefetchedInmatesView)RabidPlugin.getView(window,PrefetchedInmatesView.ID); 什麼填寫「窗口」var? – Coxer 2011-01-28 20:49:38