2011-08-10 10 views
3

私は、ツリー内のアイテムを選択してボタン「追加」を押すと、新しいエディタを取得するUIを持っています。各項目で私は編集者を得ることができます。 (しかし、すべてが同じIDを持っています) 私の目的は、例えば "save"を押すと、item1のエディタだけを閉じることです。 私はすべてのエディタを閉じることができます: getSite().getWorkbenchWindow().getActivePage().closeAllEditors(true);IEditorreferenceを使用してエディタを閉じますか? (eclipse RCP)

私は閉じる必要があるだけでなく、

私は、この問題は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); 

答えて

0

エディタを開くとき、あなたのアイテムとの間のマッピングを追跡する必要があると関連付けられているが、これは簡単なHashMapオブジェクトを使用して、たとえば行うことができますIEditorReference開きました。

3

エディタはエディタ入力で追跡できます。 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); 

はあなたがラップMyObjectの平等をチェックするために、あなたのEditorInputの等号とhashCodeをオーバーライドしていることを確認します-instance

+0

が私のためにうまく働きました –

0

トムのおかげで、あなたの答えは大きく役立ちます。各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(); 
    } 
//................... 
関連する問題