Я работаю с 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 символ.
Возможно ли это сделать?
DocumentFilter
и объедините оба условия в фильтр. Сначала вы проверяете размер. Если больше, то выход. В противном случае вы преобразуете текст в верхний регистр ПЕРЕД вставкой. - person camickr   schedule 10.03.2016