KeyListener,keyPressed与keyTyped

Cod*_*Guy 36 java swing keylistener key-bindings jframe

我有一个JFrame(好吧,一个扩展JFrame的类),我想在按F5键时执行操作.所以,我让类实现了KeyListener.有了它,有三个方法,keyPressed,keyReleased和keyTyped.

我应该使用以下哪种方法来听F5被按下?keyPressed或keyTyped?我目前有以下内容,但是当我按下F5时它不会打印任何内容.

public void keyPressed(KeyEvent e) {
    if(e.getKeyCode() == KeyEvent.VK_F5)
        System.out.println("F5 pressed");
}

public void keyReleased(KeyEvent arg0) {
    // TODO Auto-generated method stub

}

public void keyTyped(KeyEvent arg0) {
    // TODO Auto-generated method stub

}
Run Code Online (Sandbox Code Playgroud)

cor*_*iKa 42

keyPressed - when the key goes down
keyReleased - when the key comes up
keyTyped - when the unicode character represented by this key is sent by the keyboard to system input.
Run Code Online (Sandbox Code Playgroud)

我个人会为此使用keyReleased.只有当他们举起手指时才会开火.

请注意,keyTyped仅适用于可以打印的内容(我不知道F5是否可以),我相信如果按下按键会反复闪烁.这对于诸如......在屏幕上移动角色等内容非常有用.

  • 仅供记录,我通常使用“keyReleased”而不是“keyPressed”,这样如果他们真的不想做他们正在做的事情,他们可以按住键而不是放开它,然后按退出键。然后,我在转义是否已关闭的情况下保留一个布尔值(如果是转义,则在按下按键时,将布尔值设置为 true,如果在释放键时,如果是转义,则将布尔值设置为 false),并且我不让他们执行任何其他操作如果按下退出键则执行操作。只是一些值得深思的东西。干杯 (2认同)

cam*_*ckr 18

都不是.你不应该使用KeyLIstener.

Swing旨在与Key Bindings一起使用.阅读Swing教程中有关如何使用键绑定的部分.