Eu estou fazendo um programa que ao inserir um valor ele realiza um cálculo, mas eu queria que conforme eu fosse digitando o valor no JTextField fosse inserido os pontos que separa os milhares (ex: 1000 virar 1.000), e estou também utilizando um KeyListener para que o cálculo seja feito conforme eu insiro os valores.
Eu estou tentando fazer isso com o DecimalFormat, mas estou tendo um problema na hora de realizar o cálculo, parece que quando o primeiro ponto é inserido ele passa a considerar que esse número é fracionado.
Outro problema que está acontecendo é quando uso o Float, se eu tento fazer o cálculo com as variáveis sendo Float, depois que o valor chega em 1000 o ponto é inserido, após isso se eu tento acrescentar mais um número ele limpa todo o campo do JTextField, deixando apenas o primeiro número digitado á mostra.
Sem o DecimalFormat funciona normal, mas sem essa formatação com os pontos que eu queria.
Alguém pode me ajudar?
Veja, o padrão português, que é o que seguimos, define que o ponto é separador de milhares, porém, o java não entende isso, ele segue o padrão inglês, onde o ponto é separador de decimais.
Sugestão: remova o ponto e leia apenas o número.
A máscara seria a seguinte para formatar milhar e 2 casas decimais:
",###.##"
Onde 123456789.88 seria formatado para 123.456.789,88 e vice-versa.
Só usando DecimalFormat
Vc está fazendo o cálculo com o valor parseado diretamente onde ele vai considerar o ponto como separador de decimal. Se vc usa os formatadores pra exibir o valor tbm deve usa-los para DESFORMATAR.
Altera para: valor = df.parse(preco.getText()).floatValue(); //precisa try/catch