1

我想知道是否可以确定刚刚在 Eclipse 的编辑器中输入了什么输入——我目前正在使用示例 JDT 编辑器——然后根据该输入执行操作。

例如:我在编辑器窗口中打开了一个文件 example.jav。我按'a'键。'a' 会正常显示在编辑器窗口中,但 'a' 也会打印到控制台。

显然,我将执行的操作将比 System.out.println() 语句更复杂,但如果有人可以帮助我告诉我编辑器本身检测到更改的位置,我可以从那里获取它。

几点注意事项:

  • 我正在使用 Java 1.7 在 Eclipse 3.7.2 中工作
  • 如果找不到 JDT 示例编辑器,请转到帮助 > 欢迎 > 示例并单击“Java 编辑器”。

提前致谢!

4

1 回答 1

0

弄清楚了!

由于 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);
                        }
                    }
                });

希望这可以帮助其他人比我找到解决方案时更轻松!

于 2012-11-23T04:32:23.710 回答