Длина текста Java JTextField, не обновляемая после удаления символов

#java #string #swing #jtextfield #string-length

#java #строка #swing #jtextfield #длина строки

Вопрос:

Я пытаюсь создать JTextField с ключевым прослушивателем, который включит кнопку только тогда, когда длина текста равна ровно 4.

Это работает, но если достигнута длина 4, и я удаляю символ (используя кнопки backspace или delete), длина текста не обновляется и продолжает составлять 4, пока я не удалю другой символ, но это фактически составит 2 символа.

Можете ли вы помочь мне с кодом, чтобы заставить его обновлять длину? Заранее спасибо.

Я уже пробовал это без успеха:

 Document doc = field.getDocument();
if (doc.getLength() > 0) {
    try {
        doc.remove(field.getCaretPosition(), 1);
    } catch (BadLocationException e1) {
    }
}
  

и

 field.setText(field.getText().substring(0, field.getText().length()));
  

Комментарии:

1. Я не могу судить по вашему фрагменту кода, но вы должны поместить DocumentListener в документ, лежащий в основе JTextField.

2. @GilbertLeBlanc зачем мне это нужно? Я имею в виду, это единственный способ? … Если да, не могли бы вы поделиться базовым фрагментом кода его реализации, пожалуйста? Спасибо

3. Как написать прослушиватель документов

4. @GilbertLeBlanc спасибо, хотя я нашел исправление и уже ответил на этот вопрос.

Ответ №1:

Обнаружена ошибка:

Я вызывал метод, чтобы включить кнопку в методе KeyListener ‘s keyTyped , вместо того, чтобы делать это в keyReleased методе.

Это простое изменение заставило код работать так, как ожидалось.

Комментарии:

1. Лучшим решением является использование DocumentListener. KeyListener — это старый API для AWT. Swing имеет более новый и улучшенный API, который не зависит от ключевых событий.