#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, который не зависит от ключевых событий.