如何在Eclipse RCP中的视图之间进行通信?

gee*_*jay 14 java eclipse-rcp

在Eclipse RCP中,我正在使用Perspective创建视图 IPageLayout.addView(...)

但是这种方式我没有对视图的引用.因此,我不知道如何告诉ViewA更新ViewB.

这里使用的最佳模式是什么?

DJ.*_*DJ. 15

除了上面提到的VonC之外,ISourceProviderListener如果您所需的更改不是由选择触发的,您也可以使用.

  • ViewB工具ISourceProviderListener
  • 创建一个实现ISourceProvider并在服务中注册它
  • ViewA得到ISourceProvider和更新,以触发的变化ViewB

阅读有关这些界面的文档,IServiceLocatorISourceProviderService更好地了解它是如何发挥作用的.

您还可以看到这个Lars Vogel的教程,其中有一些示例如何使用ISourceProvider


Von*_*onC 8

您在IBM文章中总结了不同的通信范例

  • 要使视图能够监听选择更改,视图必须实现ISelectionListener接口,并且必须在工作台页面中注册自己
  • 使用IAdaptable接口:实现的类IAdaptable具有动态返回某些类型的适配器的能力,然后可以使用这些适配器来检索更多信息.
  • 财产改变听众范式

关于第一种方法,文章详细说明:

使用UI选择的更智能方法是将消费者视图注册为特定视图部分的侦听器.正如您在下面的示例中所看到的,在注册选择侦听器期间,源视图部件的视图ID被提及为参数.

  getSite().getPage().addSelectionListener("SampleViewId",(ISelectionListener)this);
Run Code Online (Sandbox Code Playgroud)

此方法将消除对消费者视图的冗余回调,否则如果该视图被注册为非特定侦听器,则会发生这种回调.

清单2中的代码片段显示了createPartControl() 一个视图的方法,该视图创建JFace TableViewer并将其作为选择提供程序添加到工作台站点.此代码允许任何UI选择更改TableViewer传播到页面,最后传播到感兴趣的消费者视图.

清单2.设置选择提供程序

public void createPartControl(Composite parent) {
    // Set up a JFace Viewer
    viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
    viewer.setContentProvider(new ViewContentProvider());
    viewer.setLabelProvider(new ViewLabelProvider());
    viewer.setSorter(new NameSorter());
    viewer.setInput(getViewSite());

    // ADD the JFace Viewer as a Selection Provider to the View site.
    getSite().setSelectionProvider(viewer);

}
Run Code Online (Sandbox Code Playgroud)

您将在eclipse3.5RCP教程中找到类似的方法(2010年2月4日更新)