KeyListener,keyPressed与keyTyped

我有一个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 } 
 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是否可以),如果按下键,我相信会一遍又一遍地重复。 这对于像在屏幕上移动angular色或其他东西是有用的。

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

Swing被devise为与键绑定一起使用。 阅读Swing教程中有关如何使用键绑定的部分 。

如果您希望立即生效,您应该使用keyPressed如果您在释放密钥后需要效果,则使用keyReleased 。 你不能使用keyTyped因为F5不是一个字符。 keyTyped仅在按下某个字符时被激活。

 private String message; private ScreenManager s; //Here is an example of code to add the keyListener() as suggested; modify public void init(){ Window w = s.getFullScreenWindow(); w.addKeyListener(this); public void keyPressed(KeyEvent e){ int keyCode = e.getKeyCode(); if(keyCode == KeyEvent.VK_F5) message = "Pressed: " + KeyEvent.getKeyText(keyCode); }