Введение в программирование

События от клавиатуры


Методы обработчики событий от клавиатуры объявляются в интерфейсе KeyListener, для которого существует класс адаптер KeyAdapter.

Событие от клавиатуры происходит для компонента, имеющего фокус. События от клавиатуры являются низкоуровневыми событиями.

Интерфейс KeyListener объявляет следующие методы обработчики для события KeyEvent:

o void keyTyped(KeyEvent e); // Ввод символа o void keyPressed(KeyEvent e); // Нажатие клавиши o void keyReleased(KeyEvent e) // Отпускание клавиши

Для получения информации о коде нажатой клавиши следует использовать методы класса KeyEvent.

Класс KeyEvent определен в иерархии классов Java следующим образом:


При нажатии или отпускании клавиши метод getKeyCode возвращает значение кода нажатой клавиши.

Метод getKeyChar возвращает значение символа Unicode или CHAR_UNDEFINED.

При обработки события ввода (метод void keyTyped(KeyEvent e) ) можно получить значение введенного с клавиатуры символа в формате Unicode или CHAR_UNDEFINED.

Клавиатурные комбинации обрабатываются в методах:

  • void keyPressed(KeyEvent e) и
  • void keyReleased(KeyEvent e)

Например, нажатие клавиш Shift+B можно отследить в методе keyPressed (событие KEY_PRESSED): при первом вызове метода будет возвращен код клавиши Shift - VK_SHIFT, а при втором вызове метода - код клавиши A - VK_B. И только затем произойдет вызов метода keyTyped.

На следующей схеме приведен алгоритм обработки событий от клавиатуры.

Нажатая клавишаВызываемые методы обработки событияМетоды класса KeyEvent,используемые для получения информацииВозвращаемое методом значение
Shift+AkeyPressedgetKeyChar()

getKeyCode()

getModifiers()

символ = ' '

код = 16 (Shift)

модификатор = 1

keyPressedgetKeyChar()

getKeyCode()

getModifiers()

символ ='B'

код = 66(B)

модификатор = 1

keyTypedgetKeyChar()

getKeyCode()

getModifiers()

символ ='B'

код = 0

модификатор = 0

keyReleasedgetKeyChar()

getKeyCode()

getModifiers()

символ ='A'

код = 66(B)

модификатор = 0

keyReleasedgetKeyChar()

getKeyCode()

getModifiers()

символ = ' '

код = 16 (Shift)

модификатор = 0

<
В классе KeyEvent определены виртуальные коды для всех клавиш клавиатуры. К таким кодам относятся:
  • Коды цифр: от VK_0 до VK_9 ( ASCII-коды цифр от '0' до '9' (0x30 - 0x39)).
  • Коды букв: от VK_A до VK_Z (ASCII-коды букв от 'A' до 'Z' (0x41 - 0x5A)).
  • Коды NUMPAD-клавиатуры: от VK_NUMPAD0 до VK_NUMPAD9.
  • Коды управляющих и функциональных клавиш: от VK_F1 до VK_F24, VK_NUM_LOCK, VK_PRINTSCREEN, VK_INSERT, VK_HELP, VK_DELETE, VK_ENTER, VK_BACK_SPACE, VK_TAB, VK_CANCEL, VK_CAPS_LOCK, VK_ESCAPE, VK_SPACE, VK_PAUSE.
  • Коды перемещения позиции: VK_PAGE_UP, VK_PAGE_DOWN, VK_END, VK_HOME, VK_LEFT, VK_UP, VK_RIGHT, VK_DOWN.
  • Коды-модификаторы: VK_SHIFT, VK_ALT, VK_CONTROL.
  • Коды символов: VK_DOLLAR, VK_COMMA, VK_MINUS, VK_PERIOD, VK_SLASH, VK_SEMICOLON, VK_EQUALS, VK_OPEN_BRACKET (открывающая скобка), VK_BACK_SLASH (обратный слэш), VK_CLOSE_BRACKET (закрывающая скобка).

Класс KeyEvent содержит следующий набор методов, предназначенных для определения кодов нажатых клавиш:
  • GetKeyChar - возвращает символ Unicode, соответствующий нажатой клавиши, с учетом регистра и языка клавиатуры.
  • GetKeyCode - возвращает код нажатой клавиши.
  • GetKeyModifiersText - возвращает строку, содержащую описание кода-модификатора (например, "Ctrl+Shift").
  • GetKeyText - возвращает строку, содержащую описание кода (например, "F1", "PageUp" или "D").
  • IsActionKey - определяет, была ли нажата клавиша action-ключа, такая, как PGUP, PGDN, F1, F2 и т.п.
  • ParamString - возвращает строку параметров, определяющих данное событие.
  • SetKeyChar - устанавливает значение, равное значению символа Unicode.
  • SetKeyCode - устанавливает значение, равное значению кода клавиши.
  • SetModifiers - устанавливает значение кода модификатора.
  • SetSource- определяет источник события KeyEvent.

Наряду с описанными методами, можно использовать методы, наследуемые от класса java.awt.event.InputEvent, включая следующие:
  • boolean isAltDown() // Нажата клавиша Alt
  • boolean isShiftDown() // Нажата клавиша Shift
  • boolean isControlDown() // Нажата клавиша Ctrl


Содержание раздела