Formatação de texto

Srs., boa tarde!

Espero que alguém possa me ajudar com o problema abaixo.

Tenho um JFrame com um campo de CEP do tipo JFormattedTextField.

Em algumas ocasiões o conteúdo deste campo é carregado pela aplicação e em outras ele é deixado em branco para ser preenchido pelo usuário.
Em ambas as situações o conteúdo deve ser formatado com a máscara “#####-###”.
Ou seja:
Quando estiver em branco: " - "
Quando estiver preenchido: “99999-999”

Para setar a máscara estou usando o MaskFormatter, mas quando instalo a máscara no JFormattedTextField ele limpa o conteúdo do campo.
Por outro lado, se setar o texto após a instalação da máscara, ele a remove.

Segue abaixo o código:

private void setCEP(String cep){

    MaskFormatter maskf = new MaskFormatter();
    
    if (cep.length() > 0 ){
        jfCep.setText(cep);
    }
    
    try {
        maskf.setMask("#####-###");
        maskf.install(jfCep);
    } catch (ParseException ex) {
        Logger.getLogger(CadastroPessoa.class.getName()).log(Level.SEVERE, null, ex);
    } 

Na situação acima, independente da String cep ter conteúdo ou não, o resultado sempre é um JFormattedTextField com " - ".

Existe alguma forma de instalar uma máscara sem perder o texto?

Antecipadamente, obrigado.

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

Formatação de CEP, CNPJ e CPF…

Talvez sua dúvida seja resolvida com o que já postaram lá…

Vou testar as soluções de lá.

Se conseguir fazer funcionar, postarei aqui.

Obrigado.

Acho que o nome do tópico não demonstra bem o problema que estou tendo.

A dificuldade não está em formatar o CEP nem em usar a máscara e sim em como usar o JFormattedTextField.

Na situação descrita acima, quando a String CEP está vazia, eu instalo a máscara em jfCEP para que quando usuário digitar algum conteúdo neste campo, o texto vá “encaixando” na máscara conforme ele digita. Além disso, com a máscara o usuário só consegue digitar dados numéricos.

Já quando a String CEP possui conteúdo, minha intenção era mostrar o conteúdo desta String no JfCEP formatada.

O problema é que o comando “maskf.install(jfCep);” instala a máscara, mas apaga o texto.

Tentei formatar o texto antes de dar o setText() e deixar de instalar a máscara, mas isso não resolve meu problema porque, apesar do texto aparecer formatado na jfCep, a ausência da máscara faz com que em uma eventual alteração o usuário possa digitar qualquer coisa, inclusive caracteres alfanuméricos.

Não tenho o hábito de postar dúvidas em fóruns e com o tempo aprenderei a ser mais claro.

Por ora, agradeço as ajudas que vierem.

Consegui!

Tão óbvio que chega a dar raiva! rs

Se a máscara apaga o texto, basta setar o texto após instalar a máscara! dãr

private void setCEP(String cep){

    MaskFormatter maskf = new MaskFormatter();
    
    try {
        maskf.setMask("#####-###");
        maskf.install(jfCep);
    } catch (ParseException ex) {
        Logger.getLogger(CadastroPessoa.class.getName()).log(Level.SEVERE, null, ex);
    } 

    if (cep.length() > 0 ){
        jfCep.setText(cep);
    }
    
}

Mal ae…