Как обнаружить 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 на Как написать ключевой слушатель.