Pergunta

O que é a maneira correta de separar entre F1 e isto é Ctrl + F1 respectivo Shift - CTRL + F1 dentro de uma KeyListener registrado por trás ou seja, um JButton?

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

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

.. sempre me dá 112 para F1 , 113 para F2 e assim por diante. Eu entendo que eu posso lidar com isso por cuidar do keyPressed () respectivo para keyReleased para Ctrl / Shift / ALT / etc na minha própria , mas espero que não há uma maneira melhor.

Muitos muitos agradecimentos !!!

Foi útil?

Solução

As mentiras solução na matriz de KeyEvent (InputEvent)

  1. Use o isAltDown, isControlDown, métodos isShiftDown ou
  2. Use o método getModifiers

Outras dicas

Desde KeyEvent estende InputEvent, isControlDown , isShiftDown e isAltDown .

KeyEvents são provavelmente um baixo nível pouco quando se lida com um widget de Swing. Em vez de ir através InputMap e ActionMap.

A chave para baixo o evento é chamado sempre que uma tecla é baixo, obviamente. A sua não é uma chave múltipla para baixo o evento, e não há tal coisa, então não há nenhum código de acesso para várias chaves estar para baixo.

Você está apenas vai ter de usar uma variável para manter o controle da chave crtl sendo pressionado. Isso significa que você também vai ter que usar um evento chave para cima para manter o controle de quando a chave de controle é liberada.

No 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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top