按下按钮作为热键

时间:2013-04-18 19:42:15

标签: java

我正在尝试制作类似热键文本框的内容。用户按 F11 / 大写锁定 /任意键,它出现在框中。 我是这样做的:

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

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

2 个答案:

答案 0 :(得分:4)

您可以使用:

event.getKeyCode();

但一般来说,你应该使用Key Bindings

正如Agusti-N在his answer中所述:

  

接口KeyListener包含三种方法:

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

如果您使用keyPressed并且使用event.getKeyChar()检查输入的字符,则无效。您应getKeyChar()使用keyTypedgetKeyCode()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