2

我正在尝试制作类似热键文本框的东西。用户按下F11/ Caps lock/ 任意键,它就会出现在框中。我是这样做的:

@Override
public void keyPressed(KeyEvent e) {
    textField_1.setText(String.valueOf(e.getKeyChar()));
}

但它不适用于 Fs、大写锁定等(很明显,因为这些不是字符)。我该如何处理这个问题?

4

2 回答 2

4

您可以使用:

event.getKeyCode();

但总的来说,您可能应该使用Key Bindings

正如 Agusti-N 在他的回答中所说:

该接口KeyListener包含三个方法:

void keyTyped(KeyEvent)
void keyPressed(KeyEvent)
void keyReleased(KeyEvent)

如果您使用keyPressed并且正在使用event.getKeyChar()来检查输入的字符,这将不起作用。你应该使用getKeyChar()forkeyTypedgetKeyCode()forkeyPressedkeyReleased。否则你会得到null. 如javadoc中所述。

于 2013-04-18T19:45:42.833 回答
2

如果按下键,您可能想要使用e.getKeyText()而不是e.getKeyChar()返回。以下是 API 说明:F1F1

获取密钥文本

公共静态字符串 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

于 2013-04-18T19:50:02.417 回答