Вы можете установить DocumentFilter PlainDocument, используемого JTextField. Методы DocumentFilter
будут вызываться до изменения содержимого Document
и могут дополнять или игнорировать эти изменения:
PlainDocument doc = new PlainDocument();
doc.setDocumentFilter(new DocumentFilter() {
@Override
public void insertString(FilterBypass fb, int offset, String text, AttributeSet attr)
throws BadLocationException {
if (check(fb, offset, 0, text)) {
fb.insertString(offset, text, attr);
}
}
@Override
public void replace(FilterBypass fb, int offset, int length, String text, AttributeSet attrs)
throws BadLocationException {
if (check(fb, offset, length, text)) {
fb.replace(offset, length, text, attrs);
}
}
// returns true for valid update
private boolean check(FilterBypass fb, int offset, int i, String text) {
// TODO this is just an example, should test if resulting string is valid
return text.matches("[0-9]*");
}
});
JTextField field = new JTextField();
field.setDocument(doc);
в приведенном выше коде вы должны заполнить метод check
в соответствии с вашими требованиями, в конечном итоге получить текст поля и заменить / вставить текст для проверки результата.