NetBeans插件在Active Editor中开发用户事件

时间:2014-08-27 20:39:32

标签: java netbeans netbeans-platform netbeans-plugins

我正在尝试构建一个NetBeans模块,该模块将包含一个选项面板,用户必须在其中输入其凭据和首选项,以及一些跟踪NetBeans主编辑器窗格中源代码的代码。

目标是通过成功登录用户来激活插件,然后插件将只是监听预定义的事件,从而触发其在编辑器中捕获代码。我不希望用户必须单击菜单栏中的项目或某个按钮来触发代码捕获。它必须是不引人注目的。

我有几个选择。我想让插件在 Ctrl + S 操作中收集源代码,或者用户按下Enter键,向上,向下,向右,向左键,以及/或其他人。

但是,如何将这些类型的事件侦听器添加到TopComponent或活动NetBeans编辑器中,以便跟踪NetBeans中的用户活动?如何检测用户何时按下编辑器中的某些键?

1 个答案:

答案 0 :(得分:2)

我终于解决了我的问题。

我使用以下代码片段来获取NetBeans编辑器的活动JTextComponent,然后向其添加了KeyEventListeners,并且它运行良好。

JTextComponent jtc = EditorRegistry.lastFocusedComponent();

jtc.addKeyListener(new KeyListener() {

        @Override
        public void keyTyped(KeyEvent e) {
            int keycode = e.getKeyCode();
            switch (keycode) {
                case KeyEvent.VK_LEFT:
                    JOptionPane.showMessageDialog(null, "1 Left: " + e.getKeyCode());
                    break;
                case KeyEvent.VK_RIGHT:
                    JOptionPane.showMessageDialog(null, "1 Right: " + e.getKeyCode());
                    break;
                case KeyEvent.VK_DOWN:
                    JOptionPane.showMessageDialog(null, "1 Down: " + e.getKeyCode());
                    break;
                case KeyEvent.VK_UP:
                    JOptionPane.showMessageDialog(null, "1 Up: " + e.getKeyCode());
                    break;
                case KeyEvent.VK_ENTER:
                    JOptionPane.showMessageDialog(null, "Enter: "+e.getKeyCode());
                    break;
            }
        }

        @Override
        public void keyPressed(KeyEvent e) {
            int keycode = e.getKeyCode();
            switch (keycode) {
                case KeyEvent.VK_LEFT:
                    JOptionPane.showMessageDialog(null, "2 Left: " + e.getKeyCode());
                    break;
                case KeyEvent.VK_RIGHT:
                    JOptionPane.showMessageDialog(null, "2 Right: " + e.getKeyCode());
                    break;
                case KeyEvent.VK_DOWN:
                    JOptionPane.showMessageDialog(null, "2 Down: " + e.getKeyCode());
                    break;
                case KeyEvent.VK_UP:
                    JOptionPane.showMessageDialog(null, "2 Up: " + e.getKeyCode());
                    break;
                case KeyEvent.VK_ENTER:
                    JOptionPane.showMessageDialog(null, "Enter: "+e.getKeyCode());
                    break;
            }
        }

        @Override
        public void keyReleased(KeyEvent e) {
            int keycode = e.getKeyCode();
            switch (keycode) {
                case KeyEvent.VK_LEFT:
                    JOptionPane.showMessageDialog(null, "3 Left: " + e.getKeyCode());
                    break;
                case KeyEvent.VK_RIGHT:
                    JOptionPane.showMessageDialog(null, "3 Right: " + e.getKeyCode());
                    break;
                case KeyEvent.VK_DOWN:
                    JOptionPane.showMessageDialog(null, "3 Down: " + e.getKeyCode());
                    break;
                case KeyEvent.VK_UP:
                    JOptionPane.showMessageDialog(null, "3 Up: " + e.getKeyCode());
                    break;
                case KeyEvent.VK_ENTER:
                    JOptionPane.showMessageDialog(null, "Enter: "+e.getKeyCode());
                    break;
            }
        }
    });

因此,此插件现在允许我使用关键事件捕获用户与活动NetBeans代码编辑器的交互。