未收到简体中文输入的KeyPressed和KeyReleased事件

时间:2016-09-26 13:55:27

标签: java swing

在我的计划中,我添加了TextField KeyAdapter。在KeyAdapter内,我覆盖了keyTypedkeyPressedkeyReleased方法。对于德语或英语键盘布局,这些工作没有任何问题,但是使用简体中文键盘布局不会触发数字输入的keyPressedkeyReleased事件。

这是一个小例子程序:

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中添加简体中文。你可以这样做:

  1. 单击“开始”菜单,然后选择“设置”。
  2. 选择时间&语言。
  3. 点击地区&左栏中的语言。
  4. 在“语言”下,单击所需的语言作为默认语言,然后单击“设为默认语言”。
  5. 现在通过 Ctrl + Space 将模式更改为中文模式并启动示例程序。在TextField中键入数字只会导致keyTyped事件,而不会导致其他两个事件。这是KeyAdapter中的错误还是这里有什么问题?

0 个答案:

没有答案