Действительно ли необходимо переопределить remove ()?
жен ограничить количество символов в JTextField. Для этого я использовал следующий код, но проблема в том, что я передаю данные в JTextField с помощью виртуальной клавиатуры. Таким образом, смещение всегда равно 0. Когда я ввожу больше указанного количества символов, оно сбрасывает поле и начинает делать это с самого начала. Например, если мой лимит составляет 3 символа, и я ввожуxyz0
мое ограниченное текстовое поле читает символ доz
а затем очищает поле и перезапускает снова. Так что я остался с0
в поле. Код выглядит следующим образом.
public class JTextFieldLimit extends PlainDocument {
private int limit;
public JTextFieldLimit(int limit) {
super();
this.limit = limit;
}
@Override
public void insertString( int offset, String str, AttributeSet attr ) throws BadLocationException {
if (str == null) return;
System.out.println("from document helper getLength():"+getLength());
System.out.println("from document helper str.length():"+str.length());
System.out.println("from document helper str:"+str);
System.out.println("from document helper attr:"+attr);
System.out.println("from document helper offset:"+offset);
if ((getLength() + str.length()) <= limit) {
super.insertString(offset, str, attr);
}
}
}