方法一:
在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,而不是再打開新的。