首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Eclipse RCP -如何侦听焦点编辑器中的选择

Eclipse RCP -如何侦听焦点编辑器中的选择
EN

Stack Overflow用户
提问于 2011-07-16 09:10:45
回答 1查看 5.4K关注 0票数 3

我已经创建了一个简单的Eclipse RCP应用程序,可以在其中根据用户操作打开多个编辑器实例。我有一个单独的视图(ViewPart),我在其中监听编辑器上的选择更改。问题是视图只被通知上一次打开的编辑器的选择,之前打开的其他编辑器不再提供事件/或者视图只侦听最后打开的编辑器,而不侦听其他任何东西。即使先前打开的编辑器获得焦点,也会发生这种情况。

换句话说,只有编辑器区域中最新的编辑器提供选择事件,我想要的是,当我单击其他编辑器的标签时,我希望看到当我单击以前打开的编辑器之一时,我的视图中的更改。

在我看来,我使用:

代码语言:javascript
复制
IWorkbench workbench = PlatformUI.getWorkbench();
        workbench.getActiveWorkbenchWindow().getActivePage().addSelectionListener(DocumentsEditor.ID,(ISelectionListener)this);

其中DocumentEditor是在应用程序编辑器区域中打开的编辑器之一。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-07-16 17:10:36

来自ISelectionService.addSelectionListener(String partId, ISelectionListener listener)的JavaDoc (重点是我的):

添加特定于零件的选择侦听器,当具有给定id的零件中的选择发生更改时,系统会通知该侦听器。这与部件激活无关-部件不需要处于活动状态即可发送通知。

创建部件时,将向侦听器传递部件的初始选择。当部件被释放时,将向侦听器传递一个空选择,但前提是侦听器实现了INullSelectionListener。

注意:这将无法正确跟踪编辑器部分,因为每个编辑器都没有唯一的partId。

因此,当您想要跟踪编辑器选择时,不要使用此方法。取而代之的是使用ISelectionService.addSelectionListener(ISelectionListener listener),并使用instanceofISelectionListener.selectionChanged(IWorkbenchPart part, ISelection selection)中检查给定的部分...

注意代码:选择服务以每个窗口为基础存在,因此如果您有多个工作台窗口,则每个窗口都有自己的服务实例。

因此,我通常在视图和编辑器中使用以下代码:

代码语言:javascript
复制
ISelectionService ss = getSite().getWorkbenchWindow().getSelectionService();
ss.addPostSelectionListener(listener);

这样,使用过的监听器将来自正确的窗口。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6714610

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档