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