在我的计划中,我添加了TextField
KeyAdapter
。在KeyAdapter
内,我覆盖了keyTyped
,keyPressed
和keyReleased
方法。对于德语或英语键盘布局,这些工作没有任何问题,但是使用简体中文键盘布局不会触发数字输入的keyPressed
和keyReleased
事件。
这是一个小例子程序:
public class ChineseInput extends JFrame
{
public ChineseInput()
{
this.setTitle("Chinese Input Example");
this.setSize(300, 200);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
this.setLayout(new FlowLayout());
JTextField textField = new JTextField();
textField.setPreferredSize(new Dimension(200, 50));
textField.addKeyListener(new KeyAdapter()
{
@Override
public void keyTyped(KeyEvent e)
{
System.out.println("KeyTyped: " + e.getKeyCode());
}
@Override
public void keyPressed(KeyEvent e)
{
System.out.println("KeyPressed: " + e.getKeyCode());
}
@Override
public void keyReleased(KeyEvent e)
{
System.out.println("KeyReleased: " + e.getKeyCode());
}
});
this.add(textField);
}
public static void main(String[] args)
{
EventQueue.invokeLater(() ->
{
ChineseInput chineseInput = new ChineseInput();
chineseInput.setVisible(true);
});
}
}
要重现此问题,请在Windows中添加简体中文。你可以这样做:
现在通过 Ctrl + Space 将模式更改为中文模式并启动示例程序。在TextField
中键入数字只会导致keyTyped事件,而不会导致其他两个事件。这是KeyAdapter
中的错误还是这里有什么问题?