我创建了一个简单的Eclipse RCP应用程序,我可以根据用户操作打开多个编辑器实例.我有一个单独的视图(ViewPart),我在那里听取编辑器上的选择更改.问题是视图仅通知上次打开的编辑器中的选择,之前打开的其他编辑器不再提供事件/或者视图只能侦听最后打开的编辑器而没有其他内容.即使先前打开的编辑获得关注,也会发生这种情况.
换句话说,只有编辑器区域中的最新编辑器提供选择事件,我想要的是,当我单击其他编辑器的选项卡时,我想在单击以前打开的编辑器之一时查看视图上的更改.
在我看来,我使用:
IWorkbench workbench = PlatformUI.getWorkbench();
workbench.getActiveWorkbenchWindow().getActivePage().addSelectionListener(DocumentsEditor.ID,(ISelectionListener)this);
Run Code Online (Sandbox Code Playgroud)
其中DocumentEditor是在应用程序编辑器区域中打开的编辑器之一.
来自JavaDoc ISelectionService.addSelectionListener(String partId, ISelectionListener listener)(重点是我的):
添加特定于部件的选择侦听器,当具有给定id的部件中的选择发生更改时,将通知该侦听器.这与部分激活无关 - 该部分无需激活即可发送通知.
创建零件时,将向侦听器传递零件的初始选择.处理部件时,将向侦听器传递空选择,但前提是侦听器实现INullSelectionListener.
注意:由于每个编辑器没有唯一的partId,因此无法正确跟踪编辑器部件.
因此,当您想要跟踪编辑器选择时,请不要使用此方法.而是使用ISelectionService.addSelectionListener(ISelectionListener listener)和检查给定的部分ISelectionListener.selectionChanged(IWorkbenchPart part, ISelection selection)使用instanceof...
代码的小注释:选择服务基于每个窗口存在,因此如果您有多个工作台窗口,它们每个都有自己的服务实例.
出于这个原因,我通常在我的视图和编辑器中使用以下代码:
ISelectionService ss = getSite().getWorkbenchWindow().getSelectionService();
ss.addPostSelectionListener(listener);
Run Code Online (Sandbox Code Playgroud)
这样使用的侦听器将来自正确的窗口.
| 归档时间: |
|
| 查看次数: |
5173 次 |
| 最近记录: |