我正在尝试制作类似热键文本框的内容。用户按 F11 / 大写锁定 /任意键,它出现在框中。 我是这样做的:
@Override
public void keyPressed(KeyEvent e) {
textField_1.setText(String.valueOf(e.getKeyChar()));
}
但它对Fs,大写锁定等不起作用(很明显,因为那些不是字符)。 我该如何处理这个问题?
答案 0 :(得分:4)
您可以使用:
event.getKeyCode();
但一般来说,你应该使用Key Bindings。
正如Agusti-N在his answer中所述:
接口
KeyListener
包含三种方法:void keyTyped(KeyEvent) void keyPressed(KeyEvent) void keyReleased(KeyEvent)
如果您使用keyPressed
并且使用event.getKeyChar()
检查输入的字符,则无效。您应getKeyChar()
使用keyTyped
,getKeyCode()
和keyPressed
使用keyReleased
。否则你会得到null
。
如javadoc中所述。
答案 1 :(得分:2)
如果推荐 F1 键,您可能希望使用e.getKeyText()
代替e.getKeyChar()
,F1
将返回e.getKeyCode
。以下是API说明:
<强> getKeyText 强>
public static String getKeyText(int keyCode)
返回描述keyCode的String,例如“HOME”,“F1”或“A”。 可以通过更改awt.properties文件来本地化这些字符串。
返回:一个字符串,其中包含物理键的文本说明,由其keyCode标识
- http://docs.oracle.com/javase/6/docs/api/java/awt/event/KeyEvent.html#getKeyText(int)
<强>可替换地:强>
您还可以使用112
来为您提供识别其相应常量值的各种关键事件的关键代码。例如,e.getKeyCode将返回VK_F1
作为 F1 的按键值,可以通过常量{{1}}访问。以下是API说明:
<强> getKeyCode 强>
public int getKeyCode()
返回与之关联的整数keyCode 这件事的关键。
返回:实际密钥的整数代码 键盘。 (对于KEY_TYPED事件,keyCode为VK_UNDEFINED。)
- http://docs.oracle.com/javase/6/docs/api/java/awt/event/KeyEvent.html#getKeyCode()
以下是关键常量的列表:http://docs.oracle.com/javase/6/docs/api/constant-values.html#java.awt.event.KeyEvent.CHAR_UNDEFINED