// RegexFormatter.java package javaapplication; import java.text.*; import java.util.regex.*; import javax.swing.text.*; public class RegexFormatter extends DefaultFormatter { private Pattern pattern; private Matcher matcher; public RegexFormatter() { super(); } public RegexFormatter(String regex) throws PatternSyntaxException { this(); setPattern(Pattern.compile(regex)); } public RegexFormatter(Pattern pattern) { this(); setPattern(pattern); } public void setPattern(Pattern pattern) { this.pattern = pattern; } public Pattern getPattern() { return pattern; } protected void setMatcher(Matcher matcher) { this.matcher = matcher; } protected Matcher getMatcher() { return matcher; } @Override public Object stringToValue(String text) throws ParseException { Pattern p = getPattern(); if (p != null) { Matcher m = p.matcher(text); if (m.matches()) { setMatcher(m); return super.stringToValue(text); } throw new ParseException("Pattern did not match", 0); } return text; } }