我正在处理一个与我正在处理的eclipse插件有关的问题。在这个插件中,通常以编程方式打开特殊类型的特定于插件的编辑器;这是由各种视图/编辑器中的各种操作触发的,但打开编辑器的代码是相同的。特定于插件的编辑打开了;但是,我最近注意到,每次打开其中一个编辑器时,都会发生奇怪的焦点故障:
打开编辑器时,它似乎会获得焦点,但如果在此之后立即单击以前活动的视图/编辑器,则不会重新获得焦点。只要点击以前活动的视图/编辑器以外的任何内容,问题就会立即得到解决,并且焦点会恢复正常。
例如,假设您从Package Explorer视图中选择了一个上下文菜单选项,这会导致编辑器打开。编辑器打开正常,似乎有焦点。在此之后,您首先再次单击Package Explorer,但它不会获得焦点(编辑器仍然显示焦点)。右键单击Package Explorer,但不显示Package Explorer特定的上下文菜单项。在此之后,您单击其他视图,然后再次在Package Explorer上。现在,Package Explorer正常关注。
这是我用来打开编辑器的代码:
IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
final GraphEditorPart gp = (GraphEditorPart) page.openEditor(new NullEditorInput(), "editor.id");
在此之后,编辑器通过albireo SWT-AWT桥接器填充了一些视觉效果(不确定这是否与问题相关 - 用于主编辑器元素的类是org.eclipse.albireo.core.SwingControl )。
我想也许问题是编辑器没有“真正”获得焦点,或者之前的活动视图并没有“真正”失去焦点,所以我尝试添加以下行:
page.activate(gp);
然而,这似乎没有任何改变。为什么会这样?
答案 0 :(得分:-1)
包名:rcp_demo.Editor
类名:EmpCommand.java,EmployeeEditor.java和EmployeeEditorInput.java
package rcp_demo.Editor;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.ui.IEditorReference;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.handlers.HandlerUtil;
public class EmpCommand extends AbstractHandler {
public static final String Id = "rcp_demo.Editor.EmpCommand";
@Override
public Object execute(ExecutionEvent event) throws ExecutionException {
IWorkbenchWindow window = HandlerUtil.getActiveWorkbenchWindow(event);
IWorkbenchPage page = window.getActivePage();
IEditorReference[] editors = page.getEditorReferences();
EmployeeEditorInput input = new EmployeeEditorInput();
//All Comments are easily understand
//public class EmployeeEditorInput implements IEditorInput{}
for (int i=0; i<editors.length; i++) {
//List out all Exist editor
//compare with EmployeeEditor.Id="rcp_demo.Editor.emp";
if (editors[i].getId().equals(EmployeeEditor.Id)) {
//public class EmployeeEditor extends EditorPart
//{
// public static final String Id="rcp_demo.Editor.emp";
// public void createPartControl(Composite parent) {.....}
//}
page.activate(editors[i].getEditor(true));
System.out.println("set focus an existing editor(Employee)");
return null;
}
}
try {
//open new Editor like EmployeeEditor.Id="rcp_demo.Editor.emp";
page.openEditor(input,EmployeeEditor.Id);
System.out.println("open Editor(Employee) ");
} catch (PartInitException e) {
e.printStackTrace();
}
return null;
}
}
完整描述此问题并回答访问: Eclipse RCP : have the same editor open in editor window