Spec-Zone .ru
спецификации, руководства, описания, API
|
Ключевые события указывают, когда пользователь вводит в клавиатуре. Определенно, ключевые события запускаются компонентом с клавиатурным фокусом, когда пользователь нажимает или выпускает клавиши на клавиатуре. Для получения дальнейшей информации о фокусе, см., Как Использовать Подсистему Фокуса.
Чтобы определить специальные реакции на определенные ключи, используйте привязки клавиш вместо ключевого слушателя. Для дополнительной информации см., Как Использовать Привязки клавиш.
Уведомления отправляются приблизительно два основных вида ключевых событий:
Первый вид события вызывают введенным ключом событием. Второй вид является или нажатым ключом или выпущенным от ключа событием.
Вообще, Вы реагируете на только введенные ключом события, если Вы не должны знать, когда пользователь нажимает клавиши, которые не соответствуют символам. Например, чтобы знать, когда пользователь вводит символ Unicode â , обрабатывают ли, нажимая одну клавишу такой как или нажимая несколько ключей в последовательности â Вы введенные ключом события. С другой стороны, чтобы знать, когда пользователь нажимает клавишу F1, или включает ли пользователь, нажатый эти '3', цифровую клавиатуру, Вы обрабатываете нажатые ключом события.
Чтобы запустить события клавиатуры, у компонента должен быть клавиатурный фокус.
Чтобы заставить компонент получить клавиатурный фокус, следуйте за этими шагами:
isFocusable
возвраты метода true
. Это состояние позволяет компоненту получать фокус. Например, можно включить клавиатурному фокусу для a JLabel
компонент, вызывая setFocusable(true)
метод на метке.requestFocusInWindow
метод, когда по компоненту щелкают.Эта страница отражает API фокуса, представленный в выпуске 1.4 JDK. С того выпуска подсистема фокуса использует ключи обхода фокуса, такие как Вкладка Сдвига и Вкладка. Если Вы должны препятствовать тому, чтобы ключи обхода фокуса были использованы, можно вызвать
component.setFocusTraversalKeysEnabled(false)
на компоненте, который запускает ключевые события. Ваша программа должна тогда обработать обход фокуса самостоятельно. Альтернативно, можно использовать KeyEventDispatcher
class, чтобы предварительно слушать все ключевые события. У
Можно получить подробную информацию об определенном нажатом ключом событии. Например, можно запросить нажатое ключом событие, чтобы определить, было ли оно запущено от ключа действия. Примеры ключей действия включают Копию, Вставку, Страницу, Отмену, и клавиши со стрелками и функциональные клавиши. С выпуска 1.4 JDK можно также запросить нажатое ключом или выпущенное от ключа событие, чтобы определить расположение ключа, который запустил событие. Большинство ключевых событий запускается от стандартной клавиатуры, но событий для некоторых ключей, таких как Сдвиг, имеет информацию о ли пользователь, нажатый клавиша Shift слева или правая сторона клавиатуры. Аналогично, номер '2' может быть введен или от стандартной клавиатуры или от цифровой клавиатуры.
Для введенных ключом событий можно получить ключевое символьное значение так же как любые используемые модификаторы.
Недопустимо положиться на ключевое символьное значение, возвращенное из getKeyChar
если это не включается во введенное ключом событие.
Следующий пример демонстрирует ключевые события. Это состоит из текстового поля, которое можно ввести в, сопровождаемый текстовой областью, которая выводит на экран сообщение каждый раз, когда текстовое поле запускает ключевое событие. Кнопка у основания окна позволяет Вам очищать и текстовое поле и текстовую область.
Можно найти код примера в KeyEventDemo.java
. Вот код обработки ключевого события демонстрационного примера:
public class KeyEventDemo ... implements KeyListener ... { ...//where initialization occurs: typingArea = new JTextField(20); typingArea.addKeyListener(this); //Uncomment this if you wish to turn off focus //traversal. The focus subsystem consumes //focus traversal keys, such as Tab and Shift Tab. //If you uncomment the following line of code, this //disables focus traversal and the Tab events //become available to the key event listener. //typingArea.setFocusTraversalKeysEnabled(false); ... /** Handle the key typed event from the text field. */ public void keyTyped(KeyEvent e) { displayInfo(e, "KEY TYPED: "); } /** Handle the key-pressed event from the text field. */ public void keyPressed(KeyEvent e) { displayInfo(e, "KEY PRESSED: "); } /** Handle the key-released event from the text field. */ public void keyReleased(KeyEvent e) { displayInfo(e, "KEY RELEASED: "); } ... private void displayInfo(KeyEvent e, String keyStatus){ //You should only rely on the key char if the event //is a key typed event. int id = e.getID(); String keyString; if (id == KeyEvent.KEY_TYPED) { char c = e.getKeyChar(); keyString = "key character = '" + c + "'"; } else { int keyCode = e.getKeyCode(); keyString = "key code = " + keyCode + " (" + KeyEvent.getKeyText(keyCode) + ")"; } int modifiersEx = e.getModifiersEx(); String modString = "extended modifiers = " + modifiersEx; String tmpString = KeyEvent.getModifiersExText(modifiersEx); if (tmpString.length() > 0) { modString += " (" + tmpString + ")"; } else { modString += " (no extended modifiers)"; } String actionString = "action key? "; if (e.isActionKey()) { actionString += "YES"; } else { actionString += "NO"; } String locationString = "key location: "; int location = e.getKeyLocation(); if (location == KeyEvent.KEY_LOCATION_STANDARD) { locationString += "standard"; } else if (location == KeyEvent.KEY_LOCATION_LEFT) { locationString += "left"; } else if (location == KeyEvent.KEY_LOCATION_RIGHT) { locationString += "right"; } else if (location == KeyEvent.KEY_LOCATION_NUMPAD) { locationString += "numpad"; } else { // (location == KeyEvent.KEY_LOCATION_UNKNOWN) locationString += "unknown"; } ...//Display information about the KeyEvent... } }
Соответствующий адаптер class KeyAdapter
.
Метод | Цель |
---|---|
|
Вызванный сразу после того, как пользователь вводит символ Unicode в слушаемый компонент. |
|
Вызванный сразу после того, как пользователь нажимает клавишу, в то время как у слушаемого компонент есть фокус. |
|
Вызванный сразу после того, как пользователь отпускает клавишу, в то время как у слушаемого компонент есть фокус. |
KeyEvent
class наследовал много полезных методов от InputEvent
getModifiersEx
, и несколько полезных методов от ComponentEvent
AWTEvent
Метод | Цель |
---|---|
|
Получает символ Unicode, связанный с этим событием. Только положитесь на это значение для введенных ключом событий. |
|
Получает код клавиши, связанный с этим событием. Код клавиши идентифицирует определенный ключ на клавиатуре что пользователь, нажатый или выпущенный. KeyEvent class определяет много констант кода клавиши для обычно замечаемых ключей. Например, VK_A определяет ключ маркированный A, и VK_ESCAPE определяет Клавишу выхода. |
|
Возвратите текстовые описания кода клавиши события и модифицирующих клавиш, соответственно. |
|
Возвратите расширенную маску модификаторов для этого события. Есть методы, наследованные от InputEvent class. Расширенные модификаторы представляют состояние всех модальных ключей. getModifiersExText метод возвращает строку, описывающую расширенные модифицирующие клавиши и кнопки мыши. Начиная с getModifiersEx и getModifiersExText методы предоставляют больше информации о ключевых событиях, они предпочитаются по getKeyText или getKeyModifiersText методы. |
|
Возвращает true, если ключ, запускающий событие, является ключом действия. Примеры ключей действия включают Сокращение, Копию, Вставку, Страницу, Caps Lock, клавиши со стрелками и функциональные клавиши. Эта информация допустима только для нажатых ключом и выпущенных от ключа событий. |
|
Возвращает расположение ключа, который запустил это событие. Это обеспечивает способ отличить ключи, которые происходят не раз на клавиатуре, такой как эти две клавиши Shift, например. Возможные значения KEY_LOCATION_STANDARD , KEY_LOCATION_LEFT , KEY_LOCATION_RIGHT , KEY_LOCATION_NUMPAD , или KEY_LOCATION_UNKNOWN . Этот метод всегда возвращается KEY_LOCATION_UNKNOWN для введенных ключом событий. Представленный в выпуске 1.4 JDK. |
Следующая таблица приводит примеры тот ключ использования слушатели.
Пример | Где Описано | Примечания |
---|---|---|
KeyEventDemo |
Этот раздел | Отчеты все ключевые события, которые происходят на текстовом поле, чтобы демонстрировать обстоятельства, при которых запускаются ключевые события. |