Número de caracteres numa JFormattedTextField

3 respostas
M

Pessoal… Preciso da ajuda de vocês. Estou fazendo um formulário que tem um campo cpf. Tô usando o netbeans e coloquei o componente JFormattedTextField pra o campo cpf. Nas propriedades, já coloquei qual a máscara que quero: “###.###.###-##”.
O problema tá em saber se o usuário digitou os 11 caracteres do cpf. Como faço isso? Tô fazendo assim:

formattedCpf = new javax.swing.JFormattedTextField();
try {
formattedCpf.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.MaskFormatter("###.###.###-##")));
} catch (java.text.ParseException ex) {
ex.printStackTrace();
}

Esse código acima é o netbeans que gera. Mas acho q tá correto.

Mas, independentemente do usuário ter digitado alguma coisa ou não, a instrução: formattedCpf.getText().length sempre retorna o valor 14.
A verificação q eu tô tentando fazer é:

if (formattedCpf.getText().length != 14) //coloquei 14 pq já conto os 2 pontos e o hífen
JOptionPane.showMessageDialog (this, "O cpf tem de ter 11 dígitos");

As perguntas são: Há alguma maneira (sei que há) fácil de verificar se o usuário digitou os 11 dígitos? Onde estou errando?

3 Respostas

ViniGodoy

Oi, antes de você ter problemas, corrija o seu try catch. Só capturar a exceção, imprimir seu texto no output padrão e ignora-la em seguida dificilmente é uma boa política. Na verdade, é uma péssima política.

Se eu não me engano (pq faz anos que não uso essa classe), você pode usar o método getValue() para obter o valor sem o formato. Na pior das hipóteses, caso isso não funcione, use o método replace para remover os pontos:

M

ViniGodoy… Valeu pela dica. O try, catch que usei foi apenas a título de exemplo. Sei q é péssima prática de programação. Só coloquei pra ngm chegar falando “ah, mas vc não colocou o try catch…”, entendeu?
Consegui resolver a questão. Fiz parte do q vc disse e outra coisa.

if (cpf.contains(".") || cpf.contains("-")){
    cpf = cpf.replace(".", "").replace(".", "") //isso tira os 2 pontos e o hífen
}

if (cpf.contains("")) //ou seja, o cpf ainda com algum espaço não preenchido
   throw new ValidaCpfException(); // q foi uma exceção q criei para informar q o cpf precisa ter 11 dígitos

Pode não ser o mais eficiente, mas foi o jeito mais fácil q achei pra verificar se o usuário digitou os 11 números.
Mas, valeu Vini… Suas dicas são sempre úteis.

M

Melhor dizendo…
O 2º if é assim:

if (cpf.contains(" ")){
   throw new ValidaCpfException();
}

Tem um espaço em branco entre as aspas.

Criado 12 de abril de 2008
Ultima resposta 14 de abr. de 2008
Respostas 3
Participantes 2