View EclipseRCP:当所选编辑器更改时,如何更新视图?

View EclipseRCP:当所选编辑器更改时,如何更新视图?,view,hyperlink,editor,eclipse-rcp,listener,View,Hyperlink,Editor,Eclipse Rcp,Listener,这应该是一个很常见的问题,但我在这个话题上找不到任何有用的东西 我们正在用EclipseRCP开发一个应用程序。应用程序在一个编辑器中显示数据,该编辑器通常打开多个实例。在其他视图中,可以编辑编辑器值。在视图中更改值时,这些值将在编辑器中更新,并设置其脏标志 到目前为止,它运行良好。我们缺少的是:当另一个编辑器实例获得焦点时,我们的视图应该显示此编辑器的数据。 我设法做到了两个观点。使用TableViewer作为选择提供程序并在另一个视图中注册SelectionListener成功更新第二个视图

这应该是一个很常见的问题,但我在这个话题上找不到任何有用的东西

我们正在用EclipseRCP开发一个应用程序。应用程序在一个编辑器中显示数据,该编辑器通常打开多个实例。在其他视图中,可以编辑编辑器值。在视图中更改值时,这些值将在编辑器中更新,并设置其脏标志

到目前为止,它运行良好。我们缺少的是:当另一个编辑器实例获得焦点时,我们的视图应该显示此编辑器的数据。

我设法做到了两个观点。使用
TableViewer
作为选择提供程序并在另一个视图中注册
SelectionListener
成功更新第二个视图。我用一个我从
ContentViewer
子类化的查看器对编辑器做了同样的尝试,但没有成功

这种方法有效吗?
还是我需要一种不同的方法来解决这个问题?

谢谢你,切莱克,这正是我所需要的。:-)

选择其他编辑器时更新视图

为什么使用IPartListener2而不是IPartListener 将IPartListener替换为3.5

如本文所述:

您应该始终使用IPartListener2,因为它可以处理尚未安装的零件上的零件更改事件 因为它们隐藏在另一个零件后面的堆栈中而创建。

这个 监听器还会告诉您零件何时可见、何时隐藏或何时关闭 当编辑的输入被更改时


可能您可以从中对视图进行子类化,然后为编辑器提供特殊的适配器。大纲视图是使用这种方法实现的。

您没有给我们提供您所说内容的上下文,因此没有人回答。谢谢。你当然是对的。我会更新这个问题。你说的“不成功”是什么意思?是什么阻止您刷新子类查看器以响应选择侦听器?
public class myView {

    // Create an IPartListener2 
    IPartListener2 pl = new IPartListener2() {

        // If the Editor I'm interested in was updated ...
             public void partActivated(IWorkbenchPartReference ref) {
                  IWorkbenchPart part = ref.getPart(true);
                  if (part instanceof DetailEditor) {

                  // ... update the view
                  Contact contactFromSelectedEditor = ((DetailEditor) part).detailComposite.contact;
                  detailComposite.update(contactFromSelectedEditor);
                  }
             }
        ...
        }

    // Add the IPartListener2 to the page   
    IWorkbenchPage page = this.getSite().getPage();
    page.addPartListener(pl);

}