JFormattedField do NetBeans [RESOLVIDO]

Bom pessoal, criei um JFormattedField com o Netbeans com uma máscara para cpf

O código que o NetBeans gerou foi o seguinte:

try { txtCpfCnpj.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.MaskFormatter("###.###.###-##"))); } catch (java.text.ParseException ex) { ex.printStackTrace(); }

Só que eu tenho problema na hora de pegar e definir o texto sem formatação. Como que eu faço?
O getText() e getValue() tem quais diferenças a não ser no tipo de retorno.

Outra coisa que queria mudar é quando ele perde o foco, o que ele faz, muda o valor, usa o anterior, como eu posso mudar isso? Tem algumas coisas na API, mas não entendi muito bem.

Olá boa tarde vantuiljose!
Faz assim use esta classe aqui que fiz :

[code]import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.PlainDocument;

/**
*

  • @author the Jackson Cleber
    */
    public class FormataCpf extends PlainDocument {

    public FormataCpf() {
    }
    @Override
    public void insertString(int offs, String str, AttributeSet a)
    throws BadLocationException {

     if(Character.isDigit(str.charAt(0))) {
    
         String texto = getText(0,getLength());
    
         if(texto.length()<14){
             remove(0,getLength());
    
    
             StringBuffer strBuf = new StringBuffer(texto+str);
    
                 if(strBuf.length()==4)
                     strBuf.insert(strBuf.length()-1,".");
              if( (strBuf.length()==8))
                     strBuf.insert(strBuf.length()-1,".");
              if( (strBuf.length()==12))
                     strBuf.insert(strBuf.length()-1,"-");
                 
    
             super.insertString(0, strBuf.toString(), a);
         }
     }
    

    }
    }[/code]

Ai ao invéz de você usar JFormattedTextFied use o JTextField mesmo.
Criar um JTextField tfCpf e faça assim dentro do seu metodo Construtor :

Qualquer dúvida estamos ai.

Use os métodos setValue e getValue.

Valor e texto são coisas diferentes. O texto é a representação formatada (em String) do valor (que pode ser de qualquer tipo). Veja: http://java.sun.com/docs/books/tutorial/uiswing/components/formattedtextfield.html#value

Cloude já tinha usada a tecnica do Document…
Mas acho que estou usando demais… Pra tudo que eu tenho que formatar vou criar um novo documento? Vou ter muitos documentos no final…

marcobiscaro2112, mesmo quando eu dô um getValue() usando o MaskFormatter, o texto vem com os hífens e pontos…
Tem outra forma de fazer isso?

[quote=VantuilJose]Cloude já tinha usada a tecnica do Document…
Mas acho que estou usando demais… Pra tudo que eu tenho que formatar vou criar um novo documento? Vou ter muitos documentos no final…

marcobiscaro2112, mesmo quando eu dô um getValue() usando o MaskFormatter, o texto vem com os hífens e pontos…
Tem outra forma de fazer isso?[/quote]
Então tem algo errado. Você dá um setValue sem a pontuação na hora de preencher o campo (se é que você faz isso via software)?

:shock:
Deve ter algo de errado comigo… heeheheehe :oops:
Aqui, quando eu faço isso por exemplo:

        try {
            txtCpf.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.MaskFormatter("###.###.###-##")));
        } catch (java.text.ParseException ex) {
            ex.printStackTrace();
        }
        txtCpf.setValue("12345678912");

E os métodos:
getText() - Me retorna null
getValue() - Me retorna 12345678912
Portanto o texto não atualizado…
Eu vou ter que formatar a string toda hora colocando os hífens e pontos para que funcione?

		try {
			MaskFormatter fmtr = new MaskFormatter("###.###.###-##");
			fmtr.setPlaceholderCharacter('_');
			fmtr.setValueContainsLiteralCharacters(false);
			txtCpf.setFormatterFactory(new DefaultFormatterFactory(fmtr));
		} catch (ParseException ex) {
			ex.printStackTrace();
		}
		txtCpf.setValue("12345678912");

Pois é, o problema era comigo… heheeh

Essa linha aki resolveu tudo:

Naum encontrei uma forma de fazer isso no NetBeans… Mas tudo bem, dessa forma funciona perfeitamente… Pego os dados não formatados no banco e dou um setValue() e o JFormattedField já os mostra formatado, e quando dou um getValue() eles já vem da forma que preciso para gravar no banco! :smiley:

Valeu Pessoal