Estou usando alguns JFormattedTextField em uma aplicação desktop onde preciso colocar uma máscara de moeda (R$ 1.100,00), porém, quando eu seleciono e aplico a máscara ela não funciona quando inicio a aplicação. Tentei de uma forma manual, colocando no código de pós-criação mas mesmo assim a máscara não funciona. Queria a ajuda para resolver esse problema pois em projetos passados nunca tive esse problema.
Posta todo o código que está utilizando para fazer essa tratativa, fica mais fácil do pessoal do fórum te ajudar.
Só pra complementar, você já ouviu falar no jNumberField ?
Ele é um campo próprio para trabalhar com valores monetários, não havendo a necessidade de criar máscaras, formatações, validações e etc… o componente já possuí tudo isso pronto.
txtTaxaEmbarque.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.NumberFormatter(java.text.NumberFormat.getCurrencyInstance())));
Também tentei esse:
try {
javax.swing.text.MaskFormatter mascara = new javax.swing.text.MaskFormatter("¤ #,##0.00");
mascara.setPlaceholderCharacter('_');
txtSubTotal = new javax.swing.JFormattedTextField(mascara);
} catch (ParseException e) {
e.printStackTrace();
}
Não, ainda não ouvi falar, vou pesquisar.
Tenta fazer da seguinte maneira:
NumberFormatter formatter = new NumberFormatter(new DecimalFormat("#,###,###.00"));
formatter.setAllowsInvalid(false);//Não permite valores inválidos para o campo
JFormattedTextField.setFormatterFactory(new DefaultFormatterFactory(formatter));
Não funcionou esse método.
Eu testei aqui e funcionou perfeitamente, quando você executar, digite valores dentro do campo para ver a formatação funcionando!
Fiz isso, não mudou nada. Estava como se estivesse digitando sem máscara.
Deve estar fazendo errado, em que momento você está aplicando essa formatação ?
Eu testei e a máscara é aplicada, mas só é aplicada ao perder o foco do TextField. E a forma com que quero aplicar a máscara não funciona, com a cifra (R$) na frente. Ao perder o foco o TextField é limpo.
Coloca esse código no focusLost do seu campo!
String valor = jFTF.getText();
DecimalFormat df = new DecimalFormat();
df.applyPattern( "R$ #,##0.00; R$ (#,##0.00)" );
jFTF.setText(df.format( new java.math.BigDecimal(valor)));