Napisałem coś takiego :
class PatternFilter extends DocumentFilter {
private Pattern pattern;
public PatternFilter(String pat) {
pattern = Pattern.compile(pat);
}
public void insertString(FilterBypass fb, int offset, String string, AttributeSet attr) throws BadLocationException {
String newStr = fb.getDocument().getText(0, fb.getDocument().getLength()) + string;
Matcher m = pattern.matcher(newStr);
if (m.matches()) {
super.insertString(fb, offset, string, attr);
} else {
}
}
public void replace(FilterBypass fb, int offset, int length, String string, AttributeSet attr) throws BadLocationException {
if (length > 0)
fb.remove(offset, length);
insertString(fb, offset, string, attr);
}
Następnie stworzyłem pattern
String pattern = "(A|a|B|b)+";
i dołączyłem do buttona :
JTextField formattedTextFieldMapInstruction = new JTextField();
AbstractDocument document = (AbstractDocument) formattedTextFieldMapInstruction.getDocument();
document.setDocumentFilter(new PatternFilter(pattern));