gpt4 book ai didi

Eclipse - 以编程方式打开编辑器会导致焦点问题

转载 作者:行者123 更新时间:2023-12-01 22:55:56 26 4
gpt4 key购买 nike

我正在处理的 eclipse 插件有点问题。在这个插件中,通常以编程方式打开一种特殊类型的插件专用编辑器;这是由各种 View /编辑器中的各种操作触发的,但打开编辑器的代码是相同的。特定于插件的编辑器可以正常打开;然而,我最近注意到每次打开这些编辑器时,都会发生一个奇怪的焦点故障:

当编辑器打开时,它似乎获得了焦点,但如果在此之后立即单击先前事件的 View /编辑器,它不会收回焦点。一旦单击了以前事件的 View /编辑器以外的任何内容,问题就会立即解决,并且焦点会恢复正常。

例如,假设您从 Package Explorer View 中选择了一个上下文菜单选项,这会打开一个编辑器。编辑器正确打开并且看起来有焦点。在此之后,您首先再次单击 Package Explorer,但它没有获得焦点(编辑器似乎仍然具有焦点)。您右键单击包资源管理器,但不会出现包资源管理器特定的上下文菜单项。在此之后,您单击某个其他 View ,然后再次单击包资源管理器。现在包资源管理器像往常一样获得焦点。

这是我用来打开编辑器的代码:

IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
final GraphEditorPart gp = (GraphEditorPart) page.openEditor(new NullEditorInput(), "editor.id");

在此之后,编辑器通过 albireo SWT-AWT 桥(不确定这是否与问题相关——用于主编辑器元素的类是 org.eclipse.albireo.core.SwingControl)填充了一些视觉效果。

我想问题可能是编辑器没有“真正”获得焦点,或者之前的事件 View 没有“真正”失去焦点,所以我尝试添加以下行:
page.activate(gp);

然而,这似乎并没有改变任何事情。为什么会发生这种情况?

最佳答案

package name:rcp_demo.Editor

class name: EmpCommand.java, EmployeeEditor.java and 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

关于Eclipse - 以编程方式打开编辑器会导致焦点问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12624920/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com