【问题标题】:Close editor using IEditorreference? ( eclipse RCP )使用 IEditorreference 关闭编辑器? (日食RCP)
【发布时间】:2014-03-07 21:05:17
【问题描述】:

我有一个 UI,当我选择一个项目(在树中)然后按下“添加”按钮时,我会得到一个新的编辑器。每个项目我都可以得到一个编辑器。 (但都具有相同的 ID) 我的目的是仅关闭 item1 的编辑器,例如,当我按“保存”时。 我可以关闭所有编辑器: getSite().getWorkbenchWindow().getActivePage().closeAllEditors(true);

但不仅仅是我需要关闭的那个。

我认为,这个问题可能会使用 IEditorreferences 解决,但不知道具体该怎么做! :( 请帮忙:)

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);
         }
    }
}

getSite().getWorkbenchWindow().getActivePage().closeEditor(editors.get(index)????,true);

【问题讨论】:

    标签: eclipse-plugin eclipse-rcp


    【解决方案1】:

    可以使用编辑器输入来跟踪编辑器。表示 item1 的对象必须是您的编辑器输入的一部分...

    类似:

    // Creating and opening
    MyObject item1 = ... //create item1
    // open editor
    myInput = new MyEditorInput(item1)
    IDE.openEditor(workbenchPage, myInput, MY_EDITOR_ID);
    
    // Closing
    tmpInput = new MyEditorInput(item1)
    IEditorReference[] editorReferences = PlatformUI.getWorkbench()
                    .getActiveWorkbenchWindow().getActivePage()
                    .getEditorReferences();
            List<IEditorReference> relevantEditors = new ArrayList<IEditorReference>();
            for (IEditorReference iEditorReference : editorReferences) {
                if (iEditorReference.getEditorInput().equals(tmpInput)) {
                    relevantEditors.add(iEditorReference);
                }
            }
            PlatformUI
                    .getWorkbench()
                    .getActiveWorkbenchWindow()
                    .getActivePage()
                    .closeEditors(
                            (IEditorReference[]) relevantEditors.toArray(new IEditorReference[relevantEditors
                                    .size()]), true);
    

    确保您已覆盖 EditorInput 的 equals 和 hashCode 以检查包装的 MyObject-instance 的相等性

    【讨论】:

      【解决方案2】:

      打开编辑器时,您必须跟踪项目与相关打开的IEditorReference 之间的映射,例如,可以使用简单的HashMap 对象来完成。

      【讨论】:

        【解决方案3】:

        感谢汤姆,您的回答很有帮助。

        由于每个 IEditorInput 都可以设置名称,所以我们也可以像下面这样使用:

        // String str =.....
        // str, could be an editor's property
        
        if (iEditorReference.getEditorInput().getName().equals(str))
        

        此外,它应该像这样抛出 PartInitException:

        //....................
        
            try {
                for (IEditorReference iEditorReference : editorReferences) {
                    if (iEditorReference.getEditorInput().getName().equals(str)) {
                        relevantEditors.add(iEditorReference);
                    }
                }
            } catch (PartInitException e) {
                e.printStackTrace();
            }
        //...................
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-10-06
          • 2011-01-10
          • 1970-01-01
          • 2011-01-13
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多