Swing компоненты используют Model-View-Controller (MVC) [программное обеспечение] шаблон проектирования / архитектура. Модель содержит данные. Для JTextField
данные - это текст, который он отображает. Модель по умолчанию для JTextField
- PlainDocument , однако код JTextField
фактически ссылается на интерфейс Document
, который реализует PlainDocument
.
Посмотрите на код для метода getText()
в классе JTextComponent
(который является суперклассом для JTextField
), и вы увидите, что он извлекает текст из Document
.
Когда вы вводите ключ в JTextField
, символ передаетсядо Document
. Может показаться, что ваш keyTyped()
метод вызывается до того, как набранный вами символ достигнет Document
, следовательно, когда вы вызываете getText()
в своем методе keyTyped()
, вы получаете весь текст отдельноот последнего введенного вами символа.
Это одна из причин , а не , чтобы использовать KeyListener
для проверки текста, введенного в JTextField
. Правильный способ подробно описан в вопросе, который tenorsax предоставил ссылку в своем комментарии к вашему вопросу.
Кроме DocumentFilter или JFormattedTextField (или даже InputVerifier ), вы можете добавить и ActionListener
к JTextField
, которые будут выполняться при нажатии Введите в JTextField
. Вы найдете много примеров того, как реализовать каждый из этих параметров, в том числе ссылку, приведенную в комментарии tenorsax .