use DocumentFilter to add validation:
final JFormattedTextField startDateField = ...;
JFormattedTextField endDateField = ...;
((AbstractDocument)endDateField.getDocument()).setDocumentFilter(new DocumentFilter(){
@Override
public void remove(FilterBypass fb, int offset, int length) throws BadLocationException{
StringBuilder content = new StringBuilder(fb.getDocument().getText(0, fb.getDocument().getLength()));
content.replace(offset, offset + length, "");
if(isValidEndDate(content.toString()))
super.remove(fb, offset, length);
}
@Override
public void insertString(FilterBypass fb, int offset, String string, AttributeSet attr) throws BadLocationException{
StringBuilder content = new StringBuilder(fb.getDocument().getText(0, fb.getDocument().getLength()));
content.insert(offset, string);
if(isValidEndDate(content.toString()))
super.insertString(fb, offset, string, attr);
}
@Override
public void replace(FilterBypass fb, int offset, int length, String text, AttributeSet attrs) throws BadLocationException{
StringBuilder content = new StringBuilder(fb.getDocument().getText(0, fb.getDocument().getLength()));
content.replace(offset, offset + length, text);
if(isValidEndDate(content.toString()))
super.replace(fb, offset, length, text, attrs);
}
boolean isValidEndDate(String endDate){
//check whether endDate is <= startDateField.getText()
}
});