弄清楚了!
由于 Eclipse 中的 Editor API 非常庞大,以至于很难知道从哪里开始,所以我专注于在我的 Shell 中添加一个 KeyListener。事实证明,这在 SWT 中存在一些问题,因为当 Shell 内的项目获得焦点时,Shell 本身就会失去焦点。不过经过一番搜索,我偶然发现了其他有同样问题的人。通过向 Shell 的显示添加过滤器,您可以添加适用于整个应用程序的 Listener 对象。如:
IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
Shell shell = window.getShell();
shell.getDisplay().addFilter(SWT.KeyDown, new Listener()
{
public void handleEvent(Event event)
{
System.out.println("" + event.character);
}
});
为了进一步实现这一点并且只担心在特定的非小部件部分中按下的键(否则您可以只向该部分添加一个 KeyListener),您可以添加一个检查以确保当前活动的部分与您希望的任何部分相同使用简单的 if 检查执行操作。
final IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
Shell shell = window.getShell();
shell.getDisplay().addFilter(SWT.KeyDown, new Listener()
{
public void handleEvent(Event event)
{
IWorkbenchPage page = window.getActivePage();
IWorkbenchPart part = page.getActivePart();
IEditorPart editor = page.getActiveEditor();
if(part.equals(editor))
{
System.out.println("" + event.character);
}
}
});
希望这可以帮助其他人比我找到解决方案时更轻松!