如果按下此编辑器中的按钮,关闭编辑器? (RCP eclipse)

时间:2011-08-13 20:19:06

标签: eclipse eclipse-rcp

喜爱 我有一个UI,当我选择一个项目(在树中),然后按下“添加”按钮,我得到一个新的编辑器。每个项目我都可以得到一个编辑器。 (但都有相同的ID)  我的目的是仅关闭item1的编辑器,例如,当我按“save”时。我可以用以下命令关闭所有编辑器:getSite()。getWorkbenchWindow()。getActivePage()。closeAllEditors(true); 但不仅仅是我需要关闭的那个。以下解决方案帮助了我:

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

...但是我仍然有一些问题......因为我可以在同一时间打开许多编辑器,并且所有编辑器都有相同的“保存”按钮,碰巧我在editor1中按“save”但关闭了editor3 ...实际上,我保存最后一个编辑器是打开的(感谢它的“项目”)...这就是问题..所以我想知道是否有办法识别按钮所在的编辑器,所以我关闭它.. 非常感谢,我感谢任何帮助或提示(对不起,如果我的问题看起来容易,不值得被问到,但我还是初学者......)

2 个答案:

答案 0 :(得分:3)

如果在IEditorPart实现中呈现Button,则可以直接在EditorPart中关闭编辑器。

button.addListener(SWT.Selection, new Listener() {

    @Override
    public void handleEvent(Event event) {

        PlatformUI.getWorkbench().getActiveWorkbenchWindow()
                .getActivePage().closeEditor(this, true);

    }

});

答案 1 :(得分:0)

  

选择的编辑器打开或其他编辑器可以使用RCP eclipse关闭。

可以使用RCP eclipse打开或关闭所选时编辑器的多个编辑器。

    IWorkbenchWindow window = HandlerUtil.getActiveWorkbenchWindow(event);
    IWorkbenchPage page = window.getActivePage();
    EmployeeEditorInput input = new EmployeeEditorInput();

    //List out all the editors open
    IEditorReference[] editors = page.getEditorReferences();

    for (int i=0; i<editors.length; i++) {

        //class : EmployeeEditor 
        //public static final String Id="rcp_demo.Editor.emp";  

          if (editors[i].getId().equals(EmployeeEditor.Id)) {
            page.activate(editors[i].getEditor(true));

            //or
            //page.closeEditor(page.getActiveEditor(),true);
            System.out.println("Employee Editor Exist");
            return null;
          } 
          else
          {
             page.closeEditor(page.getActiveEditor(), true);
             System.out.println("Close other Editor");  
          }
    }