Java如何从密钥代码中获取ascii char

时间:2014-05-19 09:53:04

标签: java awt keyevent

我想从用户输入JComponent的每个键中获取ascii char。

<JComponentName>.addKeyListener(new KeyAdapter() {
    @Override
    public void keyPressed(KeyEvent e) {
        char ch = getAsciiCharFromKeyCode(e.getKeyCode());
    }
});

private char getAsciiCharFromKeyCode(int keyCode) {
    // this implementation is what I'm interested in
}

当我按'e'(英语'e')和'''(Cyrillic'u')时,我会得到相同的密钥代码(0x45KeyEvent.VK_E)。有没有办法实现getAsciiCharFromKeyCode函数而不编写我自己的哈希映射,如下所示:

HashMap<Integer, Character> keyCodeToChar = new HashMap<Integer, Character>();
keyCodeToChar.put(KeyEvent.VK_E, 'e');

2 个答案:

答案 0 :(得分:2)

正如Pshermo已经提到过你正在寻找的方法是e.getKeyChar()但是,它只在方法keyTyped中有意义,如解释here

您的代码将被修改如下:

<JComponentName>.addKeyListener(new KeyAdapter() {
    @Override
    public void keyTyped(KeyEvent e) {
        char ch = e.getKeyChar();
    }
});

答案 1 :(得分:0)

查看教程Oracle: How to Write a Key Listener,了解有关如何使用KeyEvent获取关键信息的更多信息。

Oracle说:

  

对于键入类型的事件,您可以获取关键字符值以及使用的任何修饰符。

     

注意:
  您不应该依赖getKeyChar返回的关键字符值,除非它涉及键入事件。

您可能需要将语言环境设置为接受特定于语言的键盘字符。

class MyFrame extends JFrame {
    private JTextArea txtara;
    private JLabel lbl;

    public MyFrame() {
        super();
        this.getContentPane().setLayout();
        this.getInputContext().selectInputMethod(new Locale("ru")); // Russian

        txtara = new JTextArea(5, 20);
        lbl = new JLabel("Key: ");

        txtara.addKeyListener(new KeyListener() {
            public void keyPressed(KeyEvent e) {
                lbl.setText("Key: " + e.getKeyChar()); // Show typed character
            }
            public void keyReleased(KeyEvent e) {}
            public void keyTyped(KeyEvent e) {}
        };

        this.getContentPane().add(txtara, BorderLayout.CENTER);
        this.getContentPane().add(lbl, BorderLayout.SOUTH);
    }
}

免责声明:此代码尚未编译...