Eclipse RCP中控制Editor不重複打開的方法

方法一:

在org.eclipse.ui.editors擴展點中有個matchingStrategy的元素,可以實現IEditorMatchingStrategy接口,覆寫

public boolean matches(IEditorReference editorRef, IEditorInput input)方法,就可以做到判斷編輯器輸入是否匹配打開的編輯器。

 

說的簡單點:每次我們打開一個文件,轉化爲input會去回調matches方法,判斷是否文件已經打開,從而達到不會打開多次目的,即單例。一般應用於一個編輯器編輯多個文件。

方法二:

1、在打開Editor的代碼中:

Java代碼 
IWorkbenchPage page = Activator.getDefault().getWorkbench().getActiveWorkbenchWindow().getActivePage();  
IEditorPart editor = page.findEditor(input);  
if(null != editor) {   
        page.bringToTop(editor);  
} else {   
    page.openEditor(input, editorId);  

IWorkbenchPage page = Activator.getDefault().getWorkbench().getActiveWorkbenchWindow().getActivePage();
IEditorPart editor = page.findEditor(input);
if(null != editor) {
        page.bringToTop(editor);
} else {
 page.openEditor(input, editorId);
}

2、在Editor對應的IEditorInput中,重寫equals方法,確保Editor的唯一性。最簡單如:

Java代碼 
public class TestInput implements IEditorInput {   
  
        ..............   
  
  
    /* (non-Javadoc)  
     * @see java.lang.Object#equals(java.lang.Object)  
     */  
    @Override  
    public boolean equals(Object obj) {   
        if(null == obj) return false;   
               
        if(!(obj instanceof TestInput)) return false;   
               
        if(!getName().equals(((TestInput)obj).getName())) return false;   
               
        return true;   
    }   
  
 

public class TestInput implements IEditorInput {

        ..............


 /* (non-Javadoc)
  * @see java.lang.Object#equals(java.lang.Object)
  */
 @Override
 public boolean equals(Object obj) {
  if(null == obj) return false;
   
  if(!(obj instanceof TestInput)) return false;
   
  if(!getName().equals(((TestInput)obj).getName())) return false;
   
  return true;
 }


}
 

這樣,在調用1中代碼打開TestInput對應的Editor時,如果EditorArea中已經打開了一個,會把已打開的Editor置爲active,而不是再打開新的。

 

發佈了178 篇原創文章 · 獲贊 7 · 訪問量 32萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章