Кто-то знает, почему в JtextField, когда я устанавливаю свойство setDocument() -class PlainDocument- когда я запускаю программу, он показывает мне поле нормально, но только я могу ввести символы N-1, когда я устанавливаю длину maxlength для длины N символов.Почему PlainDocument() установлен в JtextField.setDocument() исключает один символ текста
// Block 1
txtPais.setDocument(new MaxLengthTextCntry());
У меня есть еще один класс, который внутренне установить максимальную длину
// Block 2
public class MaxLengthTextCntry extends MaxLengthGeneric{
public MaxLengthTextCntry(
{
super(2);
}
}
Наконец в MaxLengthGeneric класса
// Block 3
public abstract class MaxLengthGeneric extends PlainDocument {
private int maxChars;
public MaxLengthGeneric(int limit) {
super();
this.maxChars = limit;
}
public void insertString(int offs, String str, AttributeSet a)
throws BadLocationException {
if (str != null && (getLength() + str.length() < maxChars)) {
super.insertString(offs, str, a);
}
}
}
РЕШЕНИЕ
Поддержание Блок 2, я заменил блок 1 на
((AbstractDocument) txtRucnumero.getDocument()).setDocumentFilter(new MaxLengthTextRuc());
Блок 3 изменил зависимость от DocumentFilter. Не забудьте реализовать оба родительских метода insertString() и replace() !!
public abstract class MaxLengthGeneric extends DocumentFilter {
...
@Override
public void insertString(FilterBypass fb, int offs, String str,
AttributeSet a) throws BadLocationException {
if ((fb.getDocument().getLength() + str.length()) <= maxChars)
super.insertString(fb, offs, str, a);
else
Toolkit.getDefaultToolkit().beep();
}
@Override
public void replace(FilterBypass fb, int offs, int length, String str,
AttributeSet a) throws BadLocationException {
if ((fb.getDocument().getLength() + str.length() - length) <= maxChars)
super.replace(fb, offs, length, str, a);
else
Toolkit.getDefaultToolkit().beep();
}
}
ИЛИ РЕШЕНИЕ 2 (Или, может быть, важность отладки для Jnewbies жизни: < заменить < =)
** if (str != null && (getLength() + str.length() <= maxChars)) {**
Вы не слушаете ничего, что мы предлагаем. Почтовый код с вашим вопросом, а не в комментариях. Вышеприведенный код не отформатирован или не читается. Кроме того, код не имеет ничего общего с моим ответом. Вы действительно должны прочитать ссылку, которую я вам дал. – camickr
Измените свой вопрос, а не комментарий, чтобы включить [sscce] (http://sscce.org/), возможно, используя один из примеров, цитируемых camickr. – trashgod