1

我有 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。它甚至没有检测到按空格键。如何解决?

4

3 回答 3

3

可以检查一下KeyEvent#getKeyChar,但是....

KeyListeners在与来自 Swing 组件的交互时有一个主要限制KeyEvents,因为它们需要来自组件的焦点。永远不要使用这些。键绑定不需要焦点,可用于映射KeyStrokes

JTextComponents话虽如此,诸如此类的首选方法JTextPane是使用DocumentListener.

请参阅:DocumentListener 指南

于 2013-03-02T13:00:06.763 回答
1

而不是覆盖keyTyped()方法,覆盖keyReleased()keyPressed()方法。它可能会起作用。

于 2013-03-02T12:54:48.110 回答
0

你可以试试这个:

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

这个对我有用

于 2014-09-17T00:54:19.550 回答