我有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。它甚至没有检测到压缩的空格键。怎么解决?
答案 0 :(得分:3)
您可以检查KeyEvent#getKeyChar
,但....
KeyListeners
交互时, KeyEvents
有一个主要限制,因为它们需要从组件中获得焦点。切勿使用这些。 Key Bindings不需要关注,可用于映射KeyStrokes
。
话虽如此,JTextComponents
的首选方法(例如此JTextPane
)将使用DocumentListener
。
答案 1 :(得分:1)
不是覆盖keyTyped()
方法,而是覆盖keyReleased()
或keyPressed()
方法。它可能会奏效。
答案 2 :(得分:0)
你可以试试这个:
if (Character.isSpaceChar(ev.getKeyChar()) {
System.out.println("space");
}
它对我有用