我正在尝试制作类似热键文本框的东西。用户按下F11/ Caps lock/ 任意键,它就会出现在框中。我是这样做的:
@Override
public void keyPressed(KeyEvent e) {
textField_1.setText(String.valueOf(e.getKeyChar()));
}
但它不适用于 Fs、大写锁定等(很明显,因为这些不是字符)。我该如何处理这个问题?
我正在尝试制作类似热键文本框的东西。用户按下F11/ Caps lock/ 任意键,它就会出现在框中。我是这样做的:
@Override
public void keyPressed(KeyEvent e) {
textField_1.setText(String.valueOf(e.getKeyChar()));
}
但它不适用于 Fs、大写锁定等(很明显,因为这些不是字符)。我该如何处理这个问题?
您可以使用:
event.getKeyCode();
但总的来说,您可能应该使用Key Bindings。
正如 Agusti-N 在他的回答中所说:
该接口
KeyListener
包含三个方法:void keyTyped(KeyEvent) void keyPressed(KeyEvent) void keyReleased(KeyEvent)
如果您使用keyPressed
并且正在使用event.getKeyChar()
来检查输入的字符,这将不起作用。你应该使用getKeyChar()
forkeyTyped
和getKeyCode()
forkeyPressed
和keyReleased
。否则你会得到null
. 如javadoc中所述。
如果按下键,您可能想要使用e.getKeyText()
而不是e.getKeyChar()
返回。以下是 API 说明:F1
F1
获取密钥文本
公共静态字符串 getKeyText(int keyCode)
返回描述 keyCode 的字符串,例如“HOME”、“F1”或“A”。这些字符串可以通过更改 awt.properties 文件进行本地化。
返回:包含物理键的文本描述的字符串,由其 keyCode 标识
-- http://docs.oracle.com/javase/6/docs/api/java/awt/event/KeyEvent.html#getKeyText(int)
或者:
您还可以使用e.getKeyCode
它将为您提供各种关键事件的关键代码,识别它们相应的常量值。例如, e.getKeyCode 将112
作为按键的值返回F1,可以通过常量访问VK_F1
。以下是 API 说明:
获取密钥代码
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