Ola amigos estou com problema ao criar a mascara de moeda da propriedade FormatterFactory do JFormattedTextField e que eu quero que ele mostrasse esta mascara dentro da caixa de texto formatada mas da erro de conversão.
Por exemplo R$ 3.456,89 mas gravasse no banco de dados assim 3456.89 que é um campo float no meu banco de dados, mas está dando incompatibilidade de formato.
JFormattedTextField tem um construtor que recebe um Format.
Passa para o construtor um formato currency: new JFormattedTextField(NumberFormat.getCurrencyInstance());
E ele tem os métodos setValue(Object) e getValue() para colocar e pegar o valor sem a formatação.
Não deu Certo eu coloquei assim txtvalor.GetText().replace(",",".") num evento focuslost assim que ele perdesse o foco ele trocava a virgula pelo ponto mas inves disso ele apaga o conteudo do JFormattedTextField.
Quando receber o valor do banco guarda em uma variável pra depois setar no JTextFormattedField, depois que receber o valor na variável, coloca o método replace, vê se funciona assim
Cara, não entendi o que você quer fazer. Por que não utiliza o getValue() como eu disse acima envés de pegar a String e ficar tirando sinal e trocando ponto?
E a String ainda está com o R$ e o ponto de milhar… Algo como:
texto = texto.replace(“R$”, “”);
texto = texto.replace(".", “”);
texto = texto.replace(",", “.”);
texto = texto.trim();
Daniel simplesmente queria que ele mostrasse dentro do JFormattedTextField essa mascara R$ 3.456,56 mas essa mascara ele da erro na hora de gravar no banco de dados por ser um tipo diferente eu queria gravar ele no BD como tipo float 3456.56 entendeu amigo!!!
Então, faz igual eu disse acima, utilize o método getValue() e não o getText(): float numero = Float.parseFloat(formattedTextField.getValue().toString());
Ainda sem sucesso com o tratamento de moedas!!!
Queria simplesmente amostrar este valor em reais no JFormattedTextField através da propriedade FormatterFactory com a seguinte mascara R$ 3.400,56 e gravasse no banco de dados desta forma 3400.56 pq no banco de dados o tipo float não aceita vírgulas e da incompatibilidade de dados.
DecimalFormattedField.java (5,5 KB)
coloca essa classe no seu projeto, vai na opção personalizar codigo (click com o botao direito em cima do formattedTextField) e coloca isso “new DecimalFormattedField(DecimalFormattedField.REAL);”
e na hora de pegar o valor use campo.replace(“R$”, “”).replace(".", “”).replace(",", “.”);
Ao utilizar getValue() como coloquei acima está dando erro? Que erro, onde?
E como você está instanciando o JFormattedTextField e colocando e recuperando dados dele pra inserir no banco?? É só pegar o valor como coloquei acima e inserir no banco. Posta o código aí.
if (OpReceita.isSelected()) {
m.setTipoMov("Receita");
} else if (OpDespesa.isSelected()) {
m.setTipoMov("Despesa");
}
m.setDataMov(dtf.format(txtdata.getCalendar().getTime()));
m.setDescricao(txtdescricao.getText());
--> Aqui nesta linha abaixo faço a conversão do txtvalor.gettext() que é string para float e em seguida faço a conversão de virgula para ponto.
m.setValor(Float.valueOf(txtvalor.getText().replace(".", "").replace(",", ".")));**
if (m.verificarCampos() == true) {
ctlM.ctlIncluirMov(m);
txtdata.requestFocus();
txtdescricao.setText("");
txtvalor.setText("");
}
}
Obrigado Novamente pela ajuda Galera e espero que eu tenha ajudado mais gente com este codigo.