Domanda

Qual è il modo corretto di separare tra F1 e cioè CTRL + F1 rispettivo MAIUSC - CTRL + F1 all'interno di un KeyListener registrato dietro cioè un JButton?

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

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

.. mi dà sempre 112 per F1 , 113 per F2 e così via. Capisco che posso gestirlo prendendomi cura di keyPressed () rispettivamente per keyReleased per CTRL / SHIFT / ALT / etc per conto mio , ma spero che ci sia un modo migliore.

Molte molte grazie !!!

È stato utile?

Soluzione

La soluzione sta nel padre di KeyEvent (InputEvent)

  1. Utilizza i metodi isAltDown, isControlDown, isShiftDown o
  2. Utilizza il metodo getModifiers

Altri suggerimenti

Poiché KeyEvent estende InputEvent, isControlDown , isShiftDown e isAltDown .

KeyEvent è probabilmente un po 'di basso livello quando si ha a che fare con un widget Swing. Passare invece a InputMap e ActionMap .

L'evento key down viene chiamato ogni volta che un tasto è inattivo, ovviamente. Non si tratta di un evento con più chiavi in ??giù e non esiste una cosa del genere, quindi non esiste un codice chiave per più chiavi inattive.

Dovrai semplicemente usare una variabile per tenere traccia del tasto crtl premuto. Ciò significa che dovrai anche utilizzare un evento key up per tenere traccia di quando viene rilasciato il tasto di controllo.

Nel codice 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;
 }
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top