Problemas em formatar um Campo de Texto[RESOLVIDO]

Pessoal é o seguinte, jah vi varios topicos aki no guj, e alguns exemplos na internet, mas naum consigo fazer funcionar essa formatação!

quero que qdo a pessoa digite o sexto digito do cep antes dele apareça o " - "!

jah tentei esse tipo de exemplo no meu codigo, mas naum funcionou!

public class CamposComMascara {

    JanelaCadastroDePessoas jcdp = new JanelaCadastroDePessoas();

    public MaskFormatter formataCep() throws ParseException{
        MaskFormatter mf = new MaskFormatter("#####-###");
        return mf;
    }
    public void formatarCep() throws ParseException{
        jcdp.setCep(this.formataCep());
    }
}

metodo setCep:

public void setCep(MaskFormatter jftf){
        txtCpf.setValue(jftf);
    }

vlw pela força pessoal!

Dá uma olhada nesse tópico aqui.
O tópico se refere a valores monetários, mas vc pode implementar usando o CEP. Acho que é isso que vc quer.

http://www.guj.com.br/posts/list/83286.java

Espero ter ajudado

Cara, eu acho que pra fazer isso que você quer, vc deveria implementar um javax.​swing.​text.Document e não usar o MaskFormater.
eu ja implementei um javax.​swing.​text.Document pra algo parecido… pra fazer digitaçao de valores monetários… o meu Document colocava a vírgula automaticamente duas casas antes do final do número…

pesquisa por javax.​swing.​text.Document que vc vai encontrar uma solução.

Depois de implementar seu Document, faça algo como:

myJTextField.setDocument(myDocument);

Outra maneira seria colocar o MaskFormater como você está tentando, mas daí o “-” nao vai “aparecer” qdo o vivente digitar o sexto dígito. Na verdade, o campo irá possuir uma máscara estática:

public class MinhaJanelaDeCadastro extends JFrame{
    private JFormatedTextField field1;
    private JFormatedTextField field2;
    // restante do código de def de atributos...
    
    public MinhaJanelaDeCadastro() {
         // inicializa todos os componentes da janela...
         initComponents();
         // neste momento field1 e field2 devem estar inicializados. vamos colocar a máscara
         MaskFormater mask = new MaskFormatter("#####-###"); // mascara cep
         mask.setPlaceHolderChar('_');  // coloca um '_' nas posições que o usuario ainda nao digitou
         mask.install(field1); // instala a mascara no campo 1
         mask.install(field2); // instala a mesma mascara no campo 2
         // restante do codigo do construtor...
    }

    // restante do codigo da classe...
}

Alguem poderia me dar mais dicas sobre a classe document, pesquisei, mas naum axei :confused:

Crie a classe:

package br.msf.docdemo.application;

import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.Document;
import javax.swing.text.PlainDocument;

public class CepDocument extends PlainDocument implements Document {

    private static final long serialVersionUID = 4561311408644570161L;
    private static final int MAX_TAMANHO_CEP = 8;

    @Override
    public void insertString(int offs, String str, AttributeSet a) throws BadLocationException {
        try {
            String textoAtual = getText(0, getLength()).replace("-", "");
            if (textoAtual.length() == MAX_TAMANHO_CEP) {
                return;
            }
            String ins = str.replaceAll("-", "");
            Integer.parseInt(str);
            if (textoAtual.length() + ins.length() > MAX_TAMANHO_CEP) {
                ins = ins.substring(0, MAX_TAMANHO_CEP - textoAtual.length());
            }

            super.insertString(offs, ins, a);
            if (getLength() > 4) {
                int i = getText(0, getLength()).indexOf("-");
                if (i < 0) {
                    super.insertString(5, "-", a);
                } else if(i == 5) {
                    return;
                } else {
                    super.remove(i, 1);
                    super.insertString(5, "-", a);
                }
            }
        } catch (NumberFormatException ex) {
        }
    }
}

no seu formulário, sete o documento no seu JTextField:

JTextField cepField = new JTextField();
// init blablabla....
cepField.setDocument(new CepDocument());

compile e execute…
digite dígitos no field e qdo chegar na posicao do traço, ele será colocado automaticamente.

talvez tenha que melhorar algo… mas a idéia é essa.
[]s

Mas esse define o tamanho e coloca o traço correto, como faço para ele soh permitir numeros?

Ainda com problemas nesses txtFields!

Tentei usar a solução do sf.marcius, mas naum deu certo!

Alguem tem mais alguma sugestão!?

Gente consegui fazer isso pro CEP, alguem sabe como faço pro CPF e CNPJ, alem das datas! :confused: