JFormattedTextField perde formatação

5 respostas
E
Tenho um JFormattedTextField com a seguinte mascara:

JFormattedTextField dateText = new JFormattedTextField(new SimpleDateFormat(dd/MM/yyyy));

try {

MaskFormatter dateFormat = new MaskFormatter("##/##/####");

dateFormat.setValidCharacters([telefone removido]);

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???

5 Respostas

Guerr

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.

E

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

Guerr

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.

E

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

Guerr

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()); }

Criado 5 de dezembro de 2006
Ultima resposta 5 de dez. de 2006
Respostas 5
Participantes 2