it-swarm.com.ru

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

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

40
corsiKa

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

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

18
camickr
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
Leo Schoenborn

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

0
Ankit Ostwal