Problema com Mascara de Moedas no JFormattedTextField [RESOLVIDO]

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.

Agradeço atenção de vcs!!! abraço.

Olá, boa tarde.

Já tentou usar o método: replace(char oldChar, char newChar)?
com este método você pode substituir a sua ’ , ’ pelo ’ . ’

Aguardo o seu retorno.

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

Nao deu certo ele faz a mesma coisa que eu citei acima ele na hora que desfoca o JformattedtextField ele limpa essa caixa

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();

Mas por que não pega já o valor direto?

Coloca o código aqui!

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(",", “.”);

Cara não posso modificar meu projeto que está pronto colocando o seu ok C116!! vc não pode criar uma classe e instanciar na minha visão?

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í.

Ola Daniel95 eu não instanciei a classe JFormattedTextField e outros componentes pq utilizo direto da paleta do Netbeans ok.

Ok, mas posta o código de onde você pega o valor do componente e também onde passa esse valor para para persistir no banco.

Resolvi obrigado Daniel95 e a todos os amigos do fórum!!!

Fiz da seguinte forma:

1° Na propriedade formatterFactory escolhi a seguinte mascara “#,##0.00”.

2° E no evento JFormattedTextField configurei a mascara moeda.

// Evento onde coloquei a mascara.

private void txtvalorActionPerformed(java.awt.event.ActionEvent evt) {

    DecimalFormat dFormat = new DecimalFormat("#,##0.00");
    NumberFormatter formatter = new NumberFormatter(dFormat);
    formatter.setFormat(dFormat);
    formatter.setAllowsInvalid(false);
    txtvalor.setFormatterFactory(new DefaultFormatterFactory(formatter));        
}          

Tenho um método Jbutton que na hora de clicar ele cadastra os dados.

private void btnIncluirActionPerformed(java.awt.event.ActionEvent evt) {

    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.