我想从用户输入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')时,我会得到相同的密钥代码(0x45
或KeyEvent.VK_E
)。有没有办法实现getAsciiCharFromKeyCode
函数而不编写我自己的哈希映射,如下所示:
HashMap<Integer, Character> keyCodeToChar = new HashMap<Integer, Character>();
keyCodeToChar.put(KeyEvent.VK_E, 'e');
答案 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);
}
}
免责声明:此代码尚未编译...