Formatar moeda similar ao Imposto de Renda em Java

Queria fazer uma formatação de máscara para moeda similar ao de Imposto de Renda, permitindo apenas a digitação de números, pontos e vírgula. Então tendei fazer isto com o seguinte código:

java.text.DecimalFormat decimal = new java.text.DecimalFormat("#,###,##0.00");
javax.swing.JFormattedTextField teste = new javax.swing.JFormattedTextField(decimal);
try{
     javax.swing.text.MaskFormatter formatar = new javax.swing.text.MaskFormatter("**************");
     formatar.setValidCharacters("0123456789.,");
     formatar.install(teste);
}catch(Exception ex){
}
teste.setHorizontalAlignment(javax.swing.JTextField.RIGHT);

Ele funciona bem na primeira vez que o usuário entra no campo, mas se o usuário retornar ao campo para corrigir algum dado o campo perde o MaskFormatter e permite a digitação de outros caracteres além do que é pra ser permitido.
Alguém sabe como posso resolver isso?

Obrigado.

Você pode fazer tratamento com o KeyListener.

Galera consegui resolver o problema de uma maneira simples e boa pro usuário trabalhar, segue o código:

java.text.DecimalFormat decimal = new java.text.DecimalFormat("#,###,###.00");
javax.swing.text.NumberFormatter numFormatter = new javax.swing.text.NumberFormatter(decimal);
numFormatter.setFormat(decimal);
numFormatter.setAllowsInvalid(false);
javax.swing.JFormattedTextField teste = new javax.swing.JFormattedTextField();
teste.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(numFormatter));
teste.setHorizontalAlignment(javax.swing.JTextField.TRAILING);

Esse modelo funciona muito bem até de uma forma melhor da que procurava.

Abraços.

Essa linha que resolve o problema de não digitar letras e outros caracteres ?

sim, é esta linha mesmo.

Abraços.

é estranho como o código trata as casas decimais =/