Как я могу установить фильтр документа фискального кода в JTextField

Я работаю с Java-программой Swing. Я хочу вставить в свою JPanel JTextFieldFormat с предельным количеством символов и преобразовать весь текст в текст UPPER. Итак, я построил этот код:

textCodiceFiscale = new JTextField();
textCodiceFiscale.setDocument(new PersonalizzaJtextField(numberCharacter));
DocumentFilter filter = new UppercaseDocumentFilter();
        ((AbstractDocument) textCodiceFiscale.getDocument()).setDocumentFilter(filter);

это класс UppercaseDocumentFilter:

class UppercaseDocumentFilter extends DocumentFilter {
    public void insertString(DocumentFilter.FilterBypass fb, int offset,
        String text, AttributeSet attr) throws BadLocationException {

    fb.insertString(offset, text.toUpperCase(), attr);
    }

    public void replace(DocumentFilter.FilterBypass fb, int offset, int length,
        String text, AttributeSet attrs) throws BadLocationException {

    fb.replace(offset, length, text.toUpperCase(), attrs);
    }
}

Это класс PersonalizzaJTextField:

public class PersonalizzaJtextField extends PlainDocument {

    //private StringBuffer cache = new StringBuffer();
    private int lunghezzaMax;

    public PersonalizzaJtextField(int lunghezzaMax){
        super();
        this.lunghezzaMax = lunghezzaMax;       
    }

    public void insertString(int offset, String str, AttributeSet attr) throws BadLocationException{
        if (str == null)
            return;

        if ((getLength() + str.length()) <= lunghezzaMax) {
            super.insertString(offset, str, attr);
        }   
    }
}

Теперь проблемы две:

1) с помощью этого кода я могу вставить только символ UPPER в свой JTextField, но я не работаю во второй строке, чтобы ограничить количество символов.

2) Я хочу создать шаблон для этого JTextField, я должен вставить число или текст в этом режиме:

6 символов 2 цифры 1 символ 2 цифры 1 символ 3 цифры 1 символ.

Возможно ли это сделать?


person bircastri    schedule 10.03.2016    source источник
comment
Возможен дубликат? stackoverflow.com/ вопросы/15641833/   -  person Alexander Ortiz    schedule 10.03.2016
comment
Не используйте пользовательский документ!!! Просто используйте DocumentFilter и объедините оба условия в фильтр. Сначала вы проверяете размер. Если больше, то выход. В противном случае вы преобразуете текст в верхний регистр ПЕРЕД вставкой.   -  person camickr    schedule 10.03.2016


Ответы (1)


Я хочу создать шаблон для этого JTextField, я должен вставить число или текст в этом режиме:

Используйте JFormattedTextField. Вы можете использовать MaskFormatter, чтобы JFormattedTextField выполнял редактирование за вас. С надлежащей маской вы можете указать цифры или символы верхнего регистра.

Прочтите раздел руководства по Swing Как использовать форматированные текстовые поля для получения дополнительной информации и примеров.

Кстати, форматированное текстовое поле автоматически создает для вас DocumentFilter с помощью MaskFormatter, поэтому вам нужен собственный фильтр.

Добавьте учебник в закладки. Вам также дали ссылку на учебник в вашем последнем вопросе по этой теме. Используйте учебник по основам Swing.

person camickr    schedule 10.03.2016
comment
Спасибо большое. Могу ли я опубликовать код, чтобы сделать это? - person bircastri; 11.03.2016
comment
@bircastri, вы можете отредактировать свой вопрос, чтобы показать окончательный код, который вы использовали. - person camickr; 11.03.2016