这应该是一个非常常见的问题,但我找不到任何有用的主题。
我们正在使用Eclipse RCP开发应用程序。应用程序在编辑器中显示数据,通常打开多个实例。在另一个视图中,您可以编辑编辑器值。当在视图中更改值时,它们在编辑器中更新,并且设置了脏标志。
到目前为止一切正常。我们缺少的是:当另一个编辑器实例获得焦点时,我们的视图应该显示该编辑器的数据。
我设法为两个观点做到了这一点。使用TableViewer
作为选择提供程序并在另一个视图中注册SelectionListener
来成功更新第二个视图。我使用ContentViewer
子类的查看器对编辑器尝试了相同的操作,但它没有用。
这种方法可行吗? 或者我是否需要对问题采取不同的方法?
答案 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用3.5替换IPartListener。
正如本this answer中所述:
您应该始终使用IPartListener2,因为它可以处理尚未存在的零件上的零件更改事件 因为它们隐藏在另一部分后面的堆栈中而创建。
此 监听器还会告诉您何时使部件可见或隐藏或 当编辑的输入被改变时。