gpt4 book ai didi

eclipse-rcp - Eclipse RCP - 如何监听焦点编辑器的选择

转载 作者:行者123 更新时间:2023-12-01 09:06:36 29 4
gpt4 key购买 nike

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

换句话说,只有编辑器区域中的最新编辑器提供选择事件,我想要的是,当我单击其他编辑器的选项卡时,我想在单击以前打开的编辑器之一时查看 View 的更改.

在我看来,我使用:

IWorkbench workbench = PlatformUI.getWorkbench();
workbench.getActiveWorkbenchWindow().getActivePage().addSelectionListener(DocumentsEditor.ID,(ISelectionListener)this);

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

最佳答案

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

Adds a part-specific selection listener which is notified when selection changes in the part with the given id. This is independent of part activation - the part need not be active for notification to be sent.

When the part is created, the listener is passed the part's initial selection. When the part is disposed, the listener is passed a null selection, but only if the listener implements INullSelectionListener.

Note: This will not correctly track editor parts as each editor does not have a unique partId.

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

代码的小注释:选择服务基于每个窗口存在,因此如果您有多个工作台窗口,它们每个都有自己的服务实例。

出于这个原因,我通常在我的 View 和编辑器中使用以下代码:

ISelectionService ss = getSite().getWorkbenchWindow().getSelectionService();
ss.addPostSelectionListener(listener);

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

关于eclipse-rcp - Eclipse RCP - 如何监听焦点编辑器的选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6714610/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com