Как обнаружить 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 2

2 ответа:

backspace и delete имеют следующие константы:

VK_BACK_SPACE

VK_DELETE

Константы перечислены здесь: Класс KeyEvent

От docs.oracle.com

Предупреждение: кроме тех ключей, которые определены языком 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 на Как написать ключевой слушатель.