Java:обработка комбинированного ввода с клавиатуры

StackOverflow https://stackoverflow.com/questions/400994

  •  03-07-2019
  •  | 
  •  

Вопрос

Каков правильный способ разделения между F1 и т. е. CTRL+F1 соответствующий СДВИГ-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 / СДВИГ / АЛЬТ / etc сам по себе, но я надеюсь, что есть способ получше.

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

Это было полезно?

Решение

Решение кроется в родительском элементе KeyEvent (InputEvent)

  1. Используйте методы isAltDown, isControlDown, isShiftDown или
  2. Используйте метод getModifiers

Другие советы

Поскольку KeyEvent расширяет InputEvent, isControlDown - это контроль, Сдвиг и изАлтДаун.

KeyEvents, вероятно, немного низкоуровневы, когда имеешь дело с виджетом Swing.Вместо этого пройдите через InputMap и ActionMap.

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

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

В коде 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;
 }
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top