Mascara para CPF e CNPJ no mesmo jFormattedTextField?

//Busca dados Cliente pelo CPF/CNPJ
public void buscaDadosClienteR(String doc)
{
    connect.Connection();
    connect.executaSQL("SELECT * FROM clientes WHERE cpf='"+ doc +"' OR cnpj='"+ doc +"'");
    try
    {
        //Resultado
        connect.rs.first();
        
        //Condição para verificação de CPF ou CNPJ
        if(jFormattedTextField_doc_remetente.getText().length() == 11)
        {
            MaskFormatter mascaraR = new MaskFormatter("###.###.###-##");
            mascaraR.install(jFormattedTextField_doc_remetente);
            jFormattedTextField_doc_remetente.setText(connect.rs.getString("cpf"));
        }
        else if(jFormattedTextField_doc_remetente.getText().length() == 14)
        {
            MaskFormatter mascaraR = new MaskFormatter("##.###.###/####-##");
            mascaraR.install(jFormattedTextField_doc_remetente);
            jFormattedTextField_doc_remetente.setText(connect.rs.getString("cnpj"));
        }
        else 
        {
            JOptionPane.showMessageDialog(null, "CPF / CNPJ invalido!!");
        }
        
        //Dados
        jTextField_nome_remetente.setText(connect.rs.getString("nome_completo"));
        jFormattedTextField_tel_remetente.setText(connect.rs.getString("telefone"));
        jLabel_localidadeRemetente.setText(connect.rs.getString("localidade"));
        
          
    }
    catch(Exception e)
    {
        JOptionPane.showMessageDialog(null, "Erro ao Buscar Cliente");
        jTextField_nome_remetente.setText("");
        jFormattedTextField_tel_remetente.setText("");
        jFormattedTextField_doc_remetente.setText("");
    } 
    connect.disconnect();
}

Quando coloco um cpf que não é encontrado no banco ele da exceção mais seta a mascara e não consigo digitar por exemplo um cnpj porque já esta com a mascara do CPF (###.###.###-##)

Usa um textfield normal.

Aí vc faz o tratamento:

    String campo = seucampo.getText();
    if (campo.length() == 11) {
        String cpf = String.valueOf(
        "" + campo.charAt(0) + campo.charAt(1) + campo.charAt(2) + "." +
        campo.charAt(3) + campo.charAt(4) + campo.charAt(5) + "." +
        campo.charAt(6) + campo.charAt(7) + "-" + campo.charAt(8) + "-" +
        campo.charAt(9) + "-" + campo.charAt(10));
        seucampo.setText(cpf);
    } else if (campo.length() == 14) {
        String cnpj = String.valueOf(
        "" + campo.charAt(0) + campo.charAt(1) + "." + 
        campo.charAt(2) + campo.charAt(3) + campo.charAt(4) + "." +
        campo.charAt(5) + campo.charAt(6) + campo.charAt(7) + "/" + 
        campo.charAt(8) + campo.charAt(9) + campo.charAt(10) + campo.charAt(11) + "-"
        campo.charAt(12) + campo.charAt(13));
        seucampo.setText(cnpj);
    }

Depois eh so vc fazer a verificao

se (cpf == dado_banco){
alguma coisa
} senao {
erro
}
1 curtida

ou so coloca:

jFormattedTextField1.setFocusLostBehavior(JFormattedTextField.PERSIST);

Por padrao ele vem COMMIT_OR_REVERSE, se o usuario escreve e ta errado, ele apaga ou nao deixa continuar, o persist vai deixar vc colocar o q vc quiser no campo

1 curtida

Usando um exemplo que tenho aqui…

1 - Defino as variáveis

private MaskFormatter mascaraNula;
private MaskFormatter mascaraTelefoneFixo;
private MaskFormatter mascaraTelefoneCelular;

2 - Defino um método para construir as máscaras

private void definirMascaramento(){
	try{
		mascaraNula = new MaskFormatter(null);
		mascaraTelefoneCelular = new MaskFormatter("(##) # ####-####");
		mascaraTelefoneFixo = new MaskFormatter("(##) ####-####");
	}catch(ParseException pex){
		System.out.println("ERRO: " + pex.getMessage());
	}
}

3 - Crio um método seletor de máscara

private void mascararCampo(int tipoMascaramento){
	switch(tipoMascaramento){
		case 0:
			txmNumeroTelefone.setFormatterFactory(
					new DefaultFormatterFactory(mascaraNula));
			txmNumeroTelefone.setEditable(false);
			break;
		case 1:
			txmNumeroTelefone.setValue(null);
			txmNumeroTelefone.setEditable(true);
			txmNumeroTelefone.setFormatterFactory(
					new DefaultFormatterFactory(mascaraTelefoneCelular));
			break;
		case 2:
			txmNumeroTelefone.setValue(null);
			txmNumeroTelefone.setEditable(true);
			txmNumeroTelefone.setFormatterFactory(
					new DefaultFormatterFactory(mascaraTelefoneFixo));
	}
}

4 - Chamo esse método seletor no evento (no caso de um JCombBox passando o index como parâmetro)

private void cbxTipoTelefoneItemStateChanged(java.awt.event.ItemEvent evt) {                                                 
        mascararCampo(cbxTipoTelefone.getSelectedIndex());
}

Funcionou perfeitamente <3