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