Pessoal não to conseguindo fazer em que meu campo do Cpf faça a validação ...
segue o codigo:
packageutil.Cpf;publicclassValidaCPF{publicValidaCPF(){}publicstaticbooleanvalidaCpf(StringxCPF){try{//Testa se o CPF é válido ou não intd1,d4,xx,nCount,resto,digito1,digito2;StringCheck;StringSeparadores="/-.";d1=0;d4=0;xx=1;for(nCount=0;nCount<xCPF.length()-2;nCount++){Strings_aux=xCPF.substring(nCount,nCount+1);//System.out.println(s_aux); if(Separadores.indexOf(s_aux)==-1){d1=d1+(11-xx)*Integer.valueOf(s_aux).intValue();d4=d4+(12-xx)*Integer.valueOf(s_aux).intValue();xx++;};};resto=(d1%11);if(resto<2){digito1=0;}else{digito1=11-resto;}d4=d4+2*digito1;resto=(d4%11);if(resto<2){digito2=0;}else{digito2=11-resto;}Check=String.valueOf(digito1)+String.valueOf(digito2);Strings_aux2=xCPF.substring(xCPF.length()-2,xCPF.length());//System.out.println(s_aux2); //System.out.println(Check); if(s_aux2.compareTo(Check)!=0){returnfalse;}returntrue;}catch(Exceptione){returnfalse;}}}
// classe Frm a tela
// aqui podemos ver que esta só com a mascara mas queria deixar ele com validação caso for verdadeiro ,ou se for falso mostre mensagem!
No botão que valida o CPF, teria que chamar o seu método de validação e passar o CPF que foi digitado no textField:
StringxCpf=txtCpf.getText();if(!ValidaCPF.validaCpf(xCpf)){//Chame o método da classe que valida o CPF.System.out.println("Invalido");}
L
lokits5
onde eu vo passar seria no propria classe do txt , qq for clikado no botão consistir ele confere se esta correto ou não?
Eric_Yuzo
No código postado a validação está sendo feita no botão. Se quiser que a validação seja feita antes, pode colocá-la em um evento do textField. Isso tudo na classe onde está o textField.
A classe que valida o CPF serve para receber a string e dizer se é um CPF válido ou não. Como é um método estático, você chama ele diretamente de seu frame.
L
lokits5
opa intaum fiz como vc fez mas não valido !!!!
assim se estiver vazio Ok ele mostra a mensagem mas qq esta tipo tudu zero ele msm assim aceita , e tbm qq eu apago e vou pra outra txt o campo volta a ficar com o s numeros digitos no campo cpf!
pq isso?
Pelo algoritmo de validação do CPF, se todos os dígitos forem iguais, o código é válido.
Ex: [telefone removido], [telefone removido], [telefone removido]… e assim por diante, são válidos. Teria que colocar uma condição para verificar se todos os dígitos são iguais e invalidá-lo.
L
lokits5
Eric Yuzo
Valeu brother agora deu certo!!!
L
lokits5
continuando o topico
pra não abrir outro…
Alguem teria um codifo que validasse os campos caso a pessoa que vai fazer o cadasro e esquecesse de preencher e o campo ficasse em vermelho?
valeu!!
Eric_Yuzo
Pra deixar o textField vermelho tem que setar o background:
txtField.setBackground(Color.red);
L
lokits5
mas então eu só tenho validação pro cpf ,não pra validar se o campo esta vazio…e mostra a cor…pq se eu colocar dessa forma no meu form vai estar vermelho se eu ter clikado no botão consistir!
eu sei que tem codigo prontu e acabei perdendo um e não encontro mais…
Eric_Yuzo
Faz um if pra verificar se o campo está vazio no método que faz a validação.
if (textField.getText().isEmpty()) { //isEmpty retorna true caso a string esteja vazia.
textField.setBackground(Color.red);
}
L
lokits5
vo colocar dentro da minha classe validacao Cpf … a 1 la em cima certo.
mas se eu quisesse só pintar o borda?
Eric_Yuzo
Não aconselho colocar na classe de validação do CPF. É melhor colocar no tratamento do evento de seu botão. Falo isso porque a responsabilidade do método de validação do CPF é apenas dizer se é válido ou não.
Não sei como alterar a cor da borda. Uma alternativa é setar uma nova borda com a cor desejada.
textField.setBorder(newLineBorder(Color.red));
L
lokits5
sera que isso ajuda a fazer seria como uma validão tbm certo?
se for como posso chamr dentro do botão consistir!!!
importjava.awt.Component;importjava.awt.Graphics;importjavax.swing.border.AbstractBorder;/** * Constroi uma borda para uso em links. * @author Eder Peixoto * @version 1.01 - 20/04/2009. */publicclassLinkBorderextendsAbstractBorder{/** * Pinta uma borda apenas por baixo do componente, na mesma <code>Color</code> do foreground *do <code>component</code>. * @param c the component for which this border is being painted * @param g the paint graphics * @param x the x position of the painted border * @param y the y position of the painted border * @param width the width of the painted border * @param height the height of the painted border */@OverridepublicvoidpaintBorder(Componentc,Graphicsg,intx,inty,intwidth,intheight){g.setColor(c.getForeground());g.drawLine(0,height-1,width,height-1);//Border Bottom}//Fim do metodo.}//Fim da classe.
Eric_Yuzo
Pelo que entendi, a cor da borda desse LinkBorder vai variar de acordo com a variação da cor da fonte. Então teria que alterar a cor da fonte quando o campo estiver vazio.
if (textField.getText().isEmpty()) {
textField.setForeground(Color.red); //Seta a cor da fonte.
}
Outra coisa é que o código postado só desenha uma linha na parte inferior da borda. Para contornar a borda toda teria que desenhar um retângulo.
@Override
public void paintBorder(Component c, Graphics g, int x, int y, int width, int height){
g.setColor( c.getForeground() );
//g.drawLine(0, height - 1, width, height - 1); //Border Bottom
g.drawRect(x, y, width-1, height-1); // Desenha um retângulo na borda.
}
THIAGOANALISTA
Tem como vc passar o seu código fonte, pra mim ver como vc fez para validar o cpf? to tentando aqui com esse código mas não está dando certo, li aqui tbem sobre validar campos vazios, vc consegui fazer? se puder me ajudar.