2011-01-28 98 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