JFormattedTextField perde formatação

Tenho um JFormattedTextField com a seguinte mascara:
JFormattedTextField dateText = new JFormattedTextField(new SimpleDateFormat(“dd/MM/yyyy”));
try {
MaskFormatter dateFormat = new MaskFormatter("##/##/####");
dateFormat.setValidCharacters(“0123456789”);
dateFormat.install(dateText);
} catch (Exception e) {
e.printStackTrace();
}
dateText.updateUI();

O campo está formatado certinho quando digito. Até limita a quantidade dos caracteres.
Porém após digitar e sair do campo, se eu voltar pra digitar outra data, a formatação não funciona.
O campo deixa digitar letras, não limita a quantidade, etc…
Como resolvo isso???

O problema é que você está atacando por dois lados… Você seta o format com SimpleDateFormat e depois quer utilizar uma máscara no campo. Como você falou, da primeira vez funciona, mas quando você sai do campo ele reinstala os formatadores e neste momento ele não espera dois e acaba não funcionando direito…

No meu caso eu estava utilizando um Formatter para numero e queria colocar um filtro para não deixar o cara entrar letras. A solução foi herdar o formatter (no seu caso o MaskFormatter), sobrescrever o método install() e settar o SimpleDateFormat neste método.

Entendi… Porém minha classe extende JInternalFrame, portanto não posso herdar o MaskFormatter.
Como poderia fazer isso?

Você cria uma outra classe que herda o MaskFormatter, e no lugar de usar o MaskFormatter você usa ela.

Como o seu problema é data, uma outra sugestão seria usar o projeto open source jcalendar e utilizar o componente JDateChooser.

Era o que eu estava tentando fazer.
Criei a classe herdando MaskFormatter porém estou com dificuldades em implementar o SimpleDateFormat.
Estou vasculhando a net pra tentar achar como fazer. Poderia me dar um exemplo, mesmo que seja com o Formatter como vc já mencionou?
Muito obrigado

No que eu fiz, o método install ficou assim:

@Override public void install(JFormattedTextField ftf) { super.install(ftf); ((AbstractDocument)ftf.getDocument()).setDocumentFilter(new NoCharacterFilter()); }