KeyListener, keyPressed и keyTyped - PullRequest
       27

KeyListener, keyPressed и keyTyped

36 голосов
/ 16 августа 2011

У меня есть 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 ]

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

18 голосов
/ 16 августа 2011

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

Swing был разработан для использования с привязками клавиш. Прочитайте раздел из учебника по Swing на Как использовать привязки клавиш .

0 голосов
/ 28 марта 2017
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);
}
0 голосов
/ 21 июня 2012

Вы должны использовать keyPressed, если хотите немедленный эффект, и keyReleased, если хотите получить эффект после отпускания клавиши. Вы не можете использовать keyTyped, потому что F5 не символ. keyTyped активируется только при нажатии символа.

...