KeyListener, keyPressed против keyTyped

У меня есть JFrame (Ну, класс, который расширяет JFrame), и я хочу сделать действие, когда я нажимаю клавишу F5. Итак, я сделал класс реализовать KeyListener. И с этим пришли три метода: нажатие клавиш, keyReleased и keyTyped.

какой из этих методов я должен использовать для прослушивания нажатия F5? нажатие клавиши или 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 ответов


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 или нет), и я считаю, что будет срабатывать снова и снова, если ключ удерживается. Это было бы полезно для чего-то вроде... перемещение персонажа по экрану или что-то.


ни. Вы не должны использовать KeyLIstener.

Swing был разработан для использования с привязками клавиш. Прочитайте раздел из учебника 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);
}