Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Deise Vicky

[Resolvido] Problema com MaskFormatter

Recommended Posts

Galera, tenho a seguinte situação: tenho um campo(JTextField) onde o usuário deve inserir um valor monetário. Então, criei uma máscara para o campo com os '.' e ',' separando os números.

Tudo certo até aí, o problema é que quando o usuário seleciona o botão "Salvar" os valores inseridos no campo com essa máscara somem, ou seja, quando eu clico no botão o campo é "limpo".

Meu código está dessa forma:

 

public Tela{

   MaskFormatter mskMoney = new MaskFormatter("###.###.###,##");
   mskMoney.setPlaceHolderCharacter('_');

   initComponents();
}


  --na declaração do JTextField (Código personalizado)
  javax.swing.JTextField tfValor = new javax.swing.JFormattedTextField(mskMoney);



  --no evento do botão Salvar
  String _strValor = tfValor.getText().ToString();
  --Exibindo o valor recuperado
  JOptionPane.ShowMessageDialog(this, _strValor);

 

Quando é exibida a caixa de diálogo, o valor da variável está ___.___.___,__

O que será que pode estar acontecendo?

Estou intrigada pois na mesma tela tenho uma máscara para um campo "Data" onde não ocorre esse problema. A máscara da Data é declarada quase da mesma forma:

 

MaskFormatter mskData = new MaskFormatter("##/##/####");
mskData.setPlaceHolderCharacter('_');

--no TextField (Código personalizado)
javax.swing.JTextFiel tfData = new javax.swing.JFormattedTextField(mskData);

 

Será que o problema ocorre devido aos '.' e ',' colocados na máscara?

Se alguém puder me ajudar agradeço!!!

Só lembrando que eu uso o NetBeans e a declaração do JTextField é gerada automaticamente e eu só personalizo o código pra receber a máscara...

Compartilhar este post


Link para o post
Compartilhar em outros sites

A data sempre funciona pq você sempre completa a data, o que provavelmente nao deve estar fazendo com o valor monetario.

 

A sua mascara é ###.###.###,## , então você está assumindo que o usuario sempre vai colocar 1 valor monetario equivalente a mascara, ou seja, o valor tem q completar sempre a mascara, se nao, sempre que a caixa de texto perder o foco ela simplesmente nao aceita o valor, pq n corresponde a mascara( eh assim que se comportam os formatadores ) ... você tem duas opcoes, se você acha q os valores monetarios sao fixos, ou seja, sempre terão no mínimo 9digitos inteiros e 2casas decimais, você pode fzr com q o placeholder seja '0', assim sempre vai corresponder ao padrão. Ou entao use NumberFormat.getCurrencyInstance() como formato, você ainda tem a chance de passar o Locale como argumento(NumberFormat.getCurrencyInstance(new Locale("pt", "BR"))...

 

No segundo caso você tera o mesmo resultado q o q esta acontecendo agora. Se o valor colocado nao corresponder a um valor monetario ao perder o foco a caixa de texto será zerada, a vantagem eh q nao necessariamente o valor precisa ser fixo... Da uma lida na documentacao de JFormattedTextField e dos formatadores p entender melhor como funciona..

 

Qual coisa posta ai...

T+

Compartilhar este post


Link para o post
Compartilhar em outros sites

A data sempre funciona pq você sempre completa a data, o que provavelmente nao deve estar fazendo com o valor monetario.

 

A sua mascara é ###.###.###,## , então você está assumindo que o usuario sempre vai colocar 1 valor monetario equivalente a mascara, ou seja, o valor tem q completar sempre a mascara, se nao, sempre que a caixa de texto perder o foco ela simplesmente nao aceita o valor, pq n corresponde a mascara( eh assim que se comportam os formatadores ) ... você tem duas opcoes, se você acha q os valores monetarios sao fixos, ou seja, sempre terão no mínimo 9digitos inteiros e 2casas decimais, você pode fzr com q o placeholder seja '0', assim sempre vai corresponder ao padrão. Ou entao use NumberFormat.getCurrencyInstance() como formato, você ainda tem a chance de passar o Locale como argumento(NumberFormat.getCurrencyInstance(new Locale("pt", "BR"))...

 

No segundo caso você tera o mesmo resultado q o q esta acontecendo agora. Se o valor colocado nao corresponder a um valor monetario ao perder o foco a caixa de texto será zerada, a vantagem eh q nao necessariamente o valor precisa ser fixo... Da uma lida na documentacao de JFormattedTextField e dos formatadores p entender melhor como funciona..

 

Qual coisa posta ai...

T+

 

Valeu pela dica.

Vou tentar usar o NumberFormat.getCurrencyInstance(), pois o usuário pode digitar 1 ou 9 números...

 

Qualquer problema posto novamente....

 

Valeu!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

A data sempre funciona pq você sempre completa a data, o que provavelmente nao deve estar fazendo com o valor monetario.

 

A sua mascara é ###.###.###,## , então você está assumindo que o usuario sempre vai colocar 1 valor monetario equivalente a mascara, ou seja, o valor tem q completar sempre a mascara, se nao, sempre que a caixa de texto perder o foco ela simplesmente nao aceita o valor, pq n corresponde a mascara( eh assim que se comportam os formatadores ) ... você tem duas opcoes, se você acha q os valores monetarios sao fixos, ou seja, sempre terão no mínimo 9digitos inteiros e 2casas decimais, você pode fzr com q o placeholder seja '0', assim sempre vai corresponder ao padrão. Ou entao use NumberFormat.getCurrencyInstance() como formato, você ainda tem a chance de passar o Locale como argumento(NumberFormat.getCurrencyInstance(new Locale("pt", "BR"))...

 

No segundo caso você tera o mesmo resultado q o q esta acontecendo agora. Se o valor colocado nao corresponder a um valor monetario ao perder o foco a caixa de texto será zerada, a vantagem eh q nao necessariamente o valor precisa ser fixo... Da uma lida na documentacao de JFormattedTextField e dos formatadores p entender melhor como funciona..

 

Qual coisa posta ai...

T+

 

Valeu pela dica.

Vou tentar usar o NumberFormat.getCurrencyInstance(), pois o usuário pode digitar 1 ou 9 números...

 

Qualquer problema posto novamente....

 

Valeu!!!

 

 

Bom...só pra resolver o tópico...

Decidi que a forma mais prática de resolver o problema é criar a máscara com o setPlaceHolderCharacter('0')...

Dessa forma o usuário preenche os campos desejados e na app eu recupero apenas os números que me interessem....

Acho que desse jeito fica mais prático e não dá muita dor de cabeça...

 

 

Valews!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom...só pra resolver o tópico...

Decidi que a forma mais prática de resolver o problema é criar a máscara com o setPlaceHolderCharacter('0')...

Dessa forma o usuário preenche os campos desejados e na app eu recupero apenas os números que me interessem....

Acho que desse jeito fica mais prático e não dá muita dor de cabeça...

 

 

Valews!!!

Olá voce pode colocar o seu código por completo para ver a solução! Agradeço de coração pois tenho o mesmo problema mas não entendi essa nova forma pois sou novo em java..

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.