Eclipse RCP让两个视图进行通信

时间:2011-01-28 20:07:07

标签: eclipse-plugin 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);

第一个视图包含一个树形视图,第二个视图包含一个tableviewer。现在我想根据treeviewer的选择更新tableviewer的内容。我的问题是,如何从树形图中引用tableviewer?或者还有其他方法可以解决这个问题吗?

2 个答案:

答案 0 :(得分:8)

针对此问题使用SelectionService。无需引用所需的观看次数,请参阅http://www.eclipse.org/articles/Article-WorkbenchSelections/article.html

答案 1 :(得分:4)

在每个视图中,定义一个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插件的名称。