Eclipse RCP:如何在所选编辑器更改时更新视图?

时间:2010-11-29 11:05:50

标签: view hyperlink editor eclipse-rcp listener

这应该是一个非常常见的问题,但我找不到任何有用的主题。

我们正在使用Eclipse RCP开发应用程序。应用程序在编辑器中显示数据,通常打开多个实例。在另一个视图中,您可以编辑编辑器值。当在视图中更改值时,它们在编辑器中更新,并且设置了脏标志。

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

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

这种方法可行吗? 或者我是否需要对问题采取不同的方法?

2 个答案:

答案 0 :(得分:3)

您可以从PageBookView继承您的视图,然后为您的编辑器提供特殊的适配器。使用这种方法实现Outline View。

答案 1 :(得分:2)

谢谢cerealk,这正是我所需要的。 :-)

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

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

}


为什么使用IPartListener2而不是IPartListener

IPartListener2用3.5替换IPartListener。

正如本this answer中所述:

  

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

     

此   监听器还会告诉您何时使部件可见或隐藏或   当编辑的输入被改变时。