Как обнаружить backspace в keyTypedEvent
Я использую бобовую форму Netbeans для создания своего графического интерфейса.
я добавил событие keyTyped в JTextArea и хочу определить, является ли типизированный ключ Backspace.
Я использую событие keyTyped по другим причинам, поэтому я не могу просто использовать событие keyPressed.
Это сгенерированный код (и моя проверка if):
private void langArea1KeyTyped(java.awt.event.KeyEvent evt) {
if(evt.getChar()== backspace) //how can I make this check?
}
evt.getKeyCode()
всегда возвращает 0 независимо от введенного ключа.evt.getKeyChar()
просто удаляет последний символ, напечатанный при печати, поэтому я не могу использовать System.out.print(evt.getKeyChar())
для определения его значения и проверьте это.
Как я могу определить, является ли типизированный ключ Backspace (или Delete )?
2 ответа:
backspace
иdelete
имеют следующие константы:
VK_BACK_SPACE
VK_DELETE
Константы перечислены здесь: Класс KeyEvent
Кроме того, я предлагаю вам использоватьПредупреждение: кроме тех ключей, которые определены языком Java (
VK_ENTER
,VK_BACK_SPACE
, иVK_TAB
), Не полагайтесь на значения константVK_
. Sun оставляет за собой право изменять эти значения по мере необходимости для размещения более широкого спектра клавиатур в будущее.keyPressed()
илиkeyReleased()
, посколькуkeyTyped()
используется только для ключей, которые производят символы. Ключиbackspace
иdelete
не создают символов.Дополнительно:
getKeyChar()
хорошо работает сKEY_TYPED
, как упоминалось здесь:Метод
getKeyChar
всегда возвращает допустимый символ Unicode илиCHAR_UNDEFINED
. О вводе символов сообщают событияKEY_TYPED
: событияKEY_PRESSED
иKEY_RELEASED
не обязательно связаны с вводом символов.Поэтому результат метода
getKeyChar
гарантированно будет значимым только для событийKEY_TYPED
.Вы можете посмотреть на эти ссылки:
Событие keyTyped() используется только для ключей, которые производят ввод символов.
Вы не можете использовать
keyTyped
, вам нужно использовать либоkeyPressed
, либоkeyReleased
, чтобы определить, был ли введен символ backspace. СобытиеkeyTyped
выбирает только символы, не являющиеся escape-символами (только те символы, которые могут быть отображены).Символ backspace можно проверить с помощью
KeyEvent.VK_BACK_SPACE
.Попробуйте добавить этот прослушиватель к событию
keyPressed
:import java.awt.event.KeyEvent; private void langArea1KeyPressed(KeyEvent evt) { if (evt.getKeyCode() == KeyEvent.VK_BACK_SPACE) { // Do something... } }
Дополнительное Чтение
Вы можете проверить официальный учебник Java на Как написать ключевой слушатель.