5

我构建了一个简单的 Eclipse 插件,用户可以在其中使用TableViewer数据库资源打开任何这些资源的编辑器。

因此,用户可能有零个向上运行的编辑器实例。

是否有 API 可用于获取这些编辑器实例的列表?

4

3 回答 3

10

您可以通过以下方式获取对所有打开编辑器的引用:

PlatformUI.getWorkbench().getActiveWorkbenchWindow()
    .getActivePage().getEditorReferences();

然后检查这些以选择引用编辑器类型实例的那些。

于 2009-02-05T16:51:12.063 回答
8

根据 API 的 javadoc,一个工作台可以有多个窗口,一个窗口可以有多个页面,并且它们不共享编辑器。

因此,为了获得所有打开的编辑器,您应该按照以下方式执行操作(排除错误检查等):

List<IEditorReference> editors = new ArrayList<IEditorReference>();
for (IWorkbenchWindow window : PlatformUI.getWorkbench().getWorkbenchWindows()) {
    for (IWorkbenchPage page : window.getPages()) {
        for (IEditorReference editor : page.getEditorReferences()) {
            editors.add(editor);
        }
    }
}
于 2011-04-28T16:12:07.890 回答
2

请注意,这样的枚举不会尊重标签顺序

以下是编辑器枚举的示例:

IWorkbenchWindow window = HandlerUtil.getActiveWorkbenchWindowChecked(event);
IWorkbenchPage page = window.getActivePage();
IEditorPart actEditor = page.getActiveEditor();
IEditorReference[] editors = page.getEditorReferences();
for (int i=0; i<editors.length-1; i++) {
  if (editors[i].getEditor(true) == actEditor) {
    page.activate(editors[i+1].getEditor(true));
    return null;
  }
}
于 2009-02-06T14:59:40.213 回答