KeyListener,keyPressed与keyTyped

时间:2011-08-15 22:57:24

标签: java swing jframe key-bindings keylistener

我有一个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

}

4 个答案:

答案 0 :(得分:41)

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.

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

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

答案 1 :(得分:18)

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

Swing旨在与Key Bindings一起使用。阅读How to Use Key Bindings上的Swing教程中的部分。

答案 2 :(得分:0)

如果您想立即生效,则应使用keyPressed;如果您想要在释放密钥后想要效果,则应使用keyReleased。您无法使用keyTyped,因为F5不是角色。只有在按下某个字符时才会激活keyTyped

答案 3 :(得分:0)

xyz