jTextField único com duas máscaras possíveis

3 respostas
WernerLinck

Olá, estou tentando fazer uma cadastro de clientes para uma casa de eventos.
Porém estou tentando usar um único jTextField para armazenar CPF ou CNPJ.
O gatilho para a mudança é a seleção do RadioButton. Um para marcar pessoa Física, outro para marcar pessoa Jurídica.
E a máscara não está sendo atualizada.

Estou aprendendo Java por conta própria, e ainda existe muita coisa que não entendo como funciona.
Espero que possam me ajudar.

public void AtualizaCPF(){
    LbDocumento.setText("CPF:");
    try{ 
        mascara_documento.setMask("###.###.###-##"); 
        mascara_documento.setValidCharacters("[telefone removido]"); 
        } 
    catch(ParseException erro) {}
    JFormattedTextField Documento = new JFormattedTextField(mascara_documento);
    RBtnFisica.setSelected(true);
    RBtnJuridica.setSelected(false);
}
public void AtualizaCNPJ(){
    LbDocumento.setText("CNPJ:");
    try{ 
        mascara_documento.setMask("##.###.###/####-##"); 
        mascara_documento.setValidCharacters("[telefone removido]"); 
        } 
    catch(ParseException erro) {}
    JFormattedTextField Documento = new JFormattedTextField(mascara_documento);
    RBtnJuridica.setSelected(true);
    RBtnFisica.setSelected(false);
}



TfDocumento = new JFormattedTextField(mascara_documento);  //Código inserido no Pós Criação do textField.

3 Respostas

jeanmalvessi

Resolvo este problema com o seguinte método:

private void atualizaCampos() {
        if (radioPj.isSelected()) {
            labelNome.setText("Nome Razão:");
            labelApelido.setText("Nome Fantasia:");
            labelCpfCnpj.setText("CNPJ:");
            textCpfCnpj.setText("");
            try {
                textCpfCnpj.setFormatterFactory(new DefaultFormatterFactory(new MaskFormatter("##.###.###/####-##")));
            } catch (ParseException ex) {
                Logger.getLogger(CECliente.class.getName()).log(Level.SEVERE, null, ex);
            }
            labelRg.setEnabled(false);
            textRg.setEnabled(false);
            labelNasc.setText("Fundação:");
        } else {
            labelNome.setText("Nome:");
            labelApelido.setText("Apelido:");
            labelCpfCnpj.setText("CPF:");
            textCpfCnpj.setText("");
            try {
                textCpfCnpj.setFormatterFactory(new DefaultFormatterFactory(new MaskFormatter("###.###.###-##")));
            } catch (ParseException ex) {
                Logger.getLogger(CECliente.class.getName()).log(Level.SEVERE, null, ex);
            }
            labelRg.setEnabled(true);
            textRg.setEnabled(true);
            labelNasc.setText("Nascimento:");
        }
    }

Veja que eu verifico o radioPJ, que possui true para pessoa jurídica e false para física. Conforme estiver marcado, o método é executado e as máscaras são setadas!

jeanmalvessi

Esqueci de uma coisa, os eventos dos radio buttom:

private void radioPjActionPerformed(java.awt.event.ActionEvent evt) {
        atualizaCampos();
    }
    
    private void radioPfActionPerformed(java.awt.event.ActionEvent evt) {
        atualizaCampos();
    }
WernerLinck

Obrigado pela ajuda, assim que conseguir implementar retorno para dizer se deu tudo certo!

Criado 3 de outubro de 2012
Ultima resposta 4 de out. de 2012
Respostas 3
Participantes 2