JFormattedField do NetBeans [RESOLVIDO]

7 respostas
VantuilJose

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.

7 Respostas

cloude

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

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

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 :

tfCpf.setDocument(new FormataCpf());

Qualquer dúvida estamos ai.

M

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

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?

M

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?


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)?

VantuilJose

: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("[telefone removido]");

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

M
try {
			MaskFormatter fmtr = new MaskFormatter("###.###.###-##");
			fmtr.setPlaceholderCharacter('_');
			fmtr.setValueContainsLiteralCharacters(false);
			txtCpf.setFormatterFactory(new DefaultFormatterFactory(fmtr));
		} catch (ParseException ex) {
			ex.printStackTrace();
		}
		txtCpf.setValue("[telefone removido]");
VantuilJose

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

Criado 25 de fevereiro de 2010
Ultima resposta 1 de mar. de 2010
Respostas 7
Participantes 3