2008-12-30 14 views
5

¿Cuál es la forma correcta de separar entre F1 y esto es CTRL + F1 respectiva SHIFT - CTRL + F1 dentro de un KeyListener registrada detrás es decir, un JButton?Java: manipulación combinada de entrada de teclado

public void keyPressed(KeyEvent event) { 
    int key = event.getKeyCode(); 

    logger.debug("KeyBoard pressed char(" + event.getKeyChar() + ") code (" + key + ")"); 
} 

.. siempre me da 112 para F1, 113 para F2 y así sucesivamente. Entiendo que puedo manejarlo por el cuidado de la keyPressed() correspondiente para keyReleased para CTRL/SHIFT/ALT/etc por mi cuenta, pero espero que hay una manera mejor.

¡Muchas gracias!

+0

@ThomasAbraham Por favor, deja de enfocarte en una única tarea de edición: hay mucho más que se podría hacer en esta pregunta (etiqueta en el título, gracias al final, las palabras clave podrían estar resaltadas) y cualquier edición debería ser para intentar arregla * todo *, no solo una cosa. =) –

Respuesta

4

la solución está en el padre de KeyEvent (InputEvent)

  1. métodos Usa el isAltDown, isControlDown, isShiftDown o
  2. Utilice el método getModifiers
+0

Muchas gracias, ¡eso era exactamente lo que estaba buscando! – MrG

0

El evento de tecla abajo se invoca cada vez que una tecla está desactivada, obviamente. No es un evento de pulsación de tecla múltiple, y no existe tal cosa, por lo que no hay un código clave para que varias teclas estén desactivadas.

Simplemente tendrá que usar una variable para realizar un seguimiento de la tecla crtl que se está presionando. Esto significa que también tendrá que usar un evento de tecla arriba para realizar un seguimiento de cuándo se libera la tecla de control.

En el código pusedo:

 
// CRTLKeyCode is whatever the code is for the ctrl key 
private boolean ctrlPressed = false; 

onKeyDown(KeyEvent event){ 
    int key = event.getKeyCode(); 
    if(key == CRTLKeyCode) 
     ctrlPressed = true; 
    else if(ctrlPressed && key == 112) 
     //Perform your action 
} 
onKeyUp(KeyEvent event){ 
    int key = event.getKeyCode(); 
    if(key == CRTLKeyCode) 
     ctrlPressed = false; 
} 
+0

Muchas gracias, pero creo que es mucho más fácil obtener el estado bajo demanda con isXxxDown() como lo sugiere Midhat/bcash en cuanto a administrar el estado por mi cuenta. – MrG

1

KeyEvent s son probablemente un bajo nivel de bits cuando se trata de un widget Swing. En su lugar, vaya a InputMap y ActionMap.

Cuestiones relacionadas