Key Listener未检测到空格键

时间:2013-03-02 12:40:32

标签: java

我有JTextPane并添加了关键侦听器。代码如下:

class MainPanel extends JPanel {
    JTextPane codePane = new JTextPane(); 

    MainPanel() {
        add(new JScrollPane(codePane));
        codePane.addKeyListener(new KeyHandler());
    }

    private class KeyHandler extends KeyAdapter {
        @Override
        public void keyTyped(KeyEvent ev) {
            if (ev.getKeyCode() == KeyEvent.VK_SPACE) {
                System.out.println("space");
            } else {
                System.out.println("char");
            }
        }
    }
}

当我输入“sp”时,我得到3次:char。它甚至没有检测到压缩的空格键。怎么解决?

3 个答案:

答案 0 :(得分:3)

可以检查KeyEvent#getKeyChar,但....

从Swing组件与KeyListeners交互时,

KeyEvents有一个主要限制,因为它们需要从组件中获得焦点。切勿使用这些。 Key Bindings不需要关注,可用于映射KeyStrokes

话虽如此,JTextComponents的首选方法(例如此JTextPane)将使用DocumentListener

请参阅:DocumentListener Guide

答案 1 :(得分:1)

不是覆盖keyTyped()方法,而是覆盖keyReleased()keyPressed()方法。它可能会奏效。

答案 2 :(得分:0)

你可以试试这个:

if (Character.isSpaceChar(ev.getKeyChar()) {
            System.out.println("space");
        }

它对我有用