Pregunta

¿Cuál es la forma correcta de separar entre F1 y CTRL + F1 respectivo SHIFT - CTRL + F1 dentro de un KeyListener registrado detrás, es decir, un JButton?

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 cuidando keyPressed () respectivo para keyReleased para CTRL / SHIFT / ALT / etc por mi cuenta , pero espero que haya una mejor manera.

Muchas muchas gracias !!!

¿Fue útil?

Solución

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

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

Otros consejos

Dado que KeyEvent extiende InputEvent, isControlDown , isShiftDown y isAltDown .

Los

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

El evento de desactivación de clave se invoca siempre que una clave está inactiva, obviamente. No es un evento de varias teclas hacia abajo, y no existe tal cosa, por lo que no hay ningún código de clave para que varias teclas no estén activas.

Solo tendrá que usar una variable para mantener un registro de la tecla crtl que se presiona. Esto significa que también tendrá que usar un evento de activación de clave para realizar un seguimiento de cuándo se suelta la tecla de control.

En 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;
 }
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top