Java: обработка комбинированного ввода с клавиатуры - PullRequest
5 голосов
/ 30 декабря 2008

Какой правильный способ разделения между F1 и т. Е. CTRL + F1 соответственно SHIFT - CTRL + F1 в KeyListener, зарегистрированном позади, например, JButton?

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

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

.. всегда дает мне 112 для F1 , 113 для F2 и так далее. Я понимаю, что могу справиться с этим, позаботившись о keyPressed (), соответствующем keyReleased для CTRL / SHIFT / ALT / etc самостоятельно, но я надеюсь, что есть лучший способ.

Большое спасибо !!!

Ответы [ 4 ]

4 голосов
/ 30 декабря 2008

Решение лежит в родителе KeyEvent (InputEvent)

  1. Используйте методы isAltDown, isControlDown, isShiftDown или
  2. Используйте метод getModifiers
1 голос
/ 30 декабря 2008

KeyEvent s, вероятно, немного низкого уровня при работе с виджетом Swing. Вместо этого пройдите InputMap и ActionMap.

1 голос
/ 30 декабря 2008

Поскольку KeyEvent расширяет InputEvent, isControlDown , isShiftDown и isAltDown .

0 голосов
/ 30 декабря 2008

Событие нажатия клавиши вызывается всякий раз, когда клавиша нажата, очевидно. Это не событие многократного нажатия, и такой вещи не существует, поэтому не существует кода для выключения нескольких клавиш.

Вам просто нужно будет использовать переменную, чтобы отслеживать нажатие клавиши crtl. Это означает, что вам также придется использовать событие key up, чтобы отслеживать, когда отпущена управляющая клавиша.

В коде пуседо:

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

 onKeyDown(KeyEvent event){
     int key = event.getKeyCode();
     if(key == <b>CRTLKeyCode</b>)
        ctrlPressed = true;
     else if(ctrlPressed && key == 112)
        //Perform your action
 }
 onKeyUp(KeyEvent event){
     int key = event.getKeyCode();
     if(key == <b>CRTLKeyCode</b>)
        ctrlPressed = false;
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...