Eclipse:编辑器收到输入时执行操作

时间:2012-11-22 04:05:16

标签: eclipse eclipse-plugin editor text-editor text-extraction

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

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

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

一些注意事项:

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

提前致谢!

1 个答案:

答案 0 :(得分:0)

想出来了!

由于编辑API在eclipse中如此庞大以至于很难知道从哪里开始,所以我专注于向我的Shell添加KeyListener。事实证明,在SWT中存在一些问题,因为当Shell中的项目获得焦点时,Shell本身失去焦点。经过一番搜索后,我偶然发现了someone else who had the same problem。通过向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);
                        }
                    }
                });

希望这有助于其他人比找到解决方案更容易!