teclado keytyped keypressed eventos entre diferencia java swing jframe key-bindings keylistener

java - eventos - KeyListener, keyPressed versus keyTyped



keypressed keyevent e java (4)

Tengo un JFrame (bueno, una clase que amplía JFrame) y quiero hacer una acción cuando presiono la tecla F5. Entonces, hice que la clase implementara KeyListener. Y con eso, vinieron tres métodos, keyPressed, keyReleased y keyTyped.

¿Cuál de estos métodos debo usar para escuchar que se presione F5? keyPressed o keyTyped? Actualmente tengo lo siguiente, sin embargo, no imprime nada cuando presiono 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 }


Debe usar keyPressed si desea un efecto inmediato y keyReleased si desea el efecto después de liberar la clave. No puede usar keyTyped porque F5 no es un personaje. keyTyped se activa solo cuando se presiona un caracter.


Ninguno. NO deberías usar un KeyLIstener.

Swing fue diseñado para ser usado con Key Bindings. Lea la sección del tutorial de Swing sobre Cómo usar los enlaces de teclas .


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.

Yo personalmente usaría KeyReleased para esto. Dispara solo cuando levantan el dedo.

Tenga en cuenta que KeyTyped solo funcionará para algo que pueda imprimirse (no sé si F5 puede o no) y creo que se disparará una y otra vez si se mantiene presionada la tecla. Esto sería útil para algo como ... mover un personaje por la pantalla o algo así.


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); }