Validar campos em branco

Olá pessoal, estou iniciando em java e preciso de uma ajuda…

criei um método para verificar vários campos, se estão em branco…ate ai tudo bem, mas gostaria de testar apenas uma vez (dar a mensagem de erro), e depois continuar testando os outros campos…isso no caso se um campo realmente precisar ficar em branco…não sei se entenderam…vou mandar um pedaço do código…

public boolean verificarCampos() {

        if (this.frm.getTxtSerie().getText().trim().equals("")) {
            JOptionPane.showMessageDialog(null, "Campo Série está em branco.", "Erro", JOptionPane.ERROR_MESSAGE);
            this.frm.getTxtSerie().requestFocus();
            return false;
}else if(this.frm.getTxtNumAutoInfr().getText().trim().equals("")) {
            JOptionPane.showMessageDialog(null, "Campo Número da Infração está em branco.", "Erro", JOptionPane.ERROR_MESSAGE);
            this.frm.getTxtNumAutoInfr().requestFocus();
            return false;  
}else if(this.frm.getTxtPlaca().getText().trim().equals("")) {
            JOptionPane.showMessageDialog(null, "Campo Placa está em branco.", "Erro", JOptionPane.ERROR_MESSAGE);
            this.frm.getTxtPlaca().requestFocus();
            return false;

no caso, o primeiro ‘IF’ testa o campo “Serie”, se estiver em branco ele da uma msg avisando…mas se este campo realmente precisar ficar em branco, como faço para não dar mais a msg e continuar testando os campos de baixo??

Obrigado!!

Faz todas as verificações antes de retornar.

tiro o return de cada um?? deixo só um no final??

Isso! aí se vc quiser saber quais campos estão em branco cria uma string e vai concatenando dentro dos ifs com as respectivas mensagens para mostra pro usuário.

[code]public boolean verificarCampos() {
String msg = “”;
if (this.frm.getTxtSerie().getText().trim().equals("")) {
msg += “Campo Série está em branco\n”;
}
if (this.frm.getTxtNumAutoInfr().getText().trim().equals("")) {
msg += “Campo Número da Infração está em branco\n”;
}
if (this.frm.getTxtPlaca().getText().trim().equals("")) {
msg += “Campo Placa está em branco\n”;
}

if(!msg.isEmpty()) {
JOptionPane.showMessageDialog(null, msg.trim(), “Erro”, JOptionPane.ERROR_MESSAGE);
return false;
}

return true;
}[/code]

tirei o return do primeiro IF, do campo ‘Serie’, mas continua dando msg q o campo esta em branco…gostaria q aparecesse só na primeira vez…para alertar a pessoa…assim que a pessoa desse ‘ok’ passasse para o próximo…preciso fazer esse tipo de validação para todos os campos (23 no total)…se puder ajudar mostrando como fazer no código…hehehe…obrigado…

josiloch, fiz do jeito que você falou, mas continua dando mensagem enquanto o campo estiver em branco…não está passando

Não entendi muito bem oque voce quer fazer, nao era pra aparecer a msg qunado tem um campo em branco?

sim sim…mas aparecer apenas uma vez, para alertar a pessoa…e depois q ela clicar em ok, nao avisar mais q esta em branco…quero q apareça a msg apenas uma vez…por que se o campo precisar ficar em branco mesmo, tem que alertar a pessoa, mas depois ficar em branco mesmo…o campo nao precisa ser preenchido abrigatoriamente…apenas dar uma msg de alerta q ele ficou em branco…entedeu?

Olá gilbertoborn.

Se entendi bem o que você quer, este código abaixo deve resolver. Não testei mas dá pra entender bem a idéia.
Basicamente criei um HashMap pra manter os campos que já foram verificados. Na primeira vez que ele é verificado, é adicionado ao hashmap.
Na segunda vez ele já estará no hash e não será verificado novamente, assim deixando passar em branco. Também criei alguns métodos pra organizar e reaproveitar melhor o código.
Se ver código repetido em suas classes sempre reflita, pois provavelmente (quase sempre) ele pode ser melhorado. Neste caso dava pra melhor ainda mais.

[code]Map camposVerificados = new HashMap<JTextField, Boolean>();

public boolean verificarCampos() {

if(campoVazio(this.frm.getTxtSerie())) {
    mostrarMensagemErro("Campo Série está em branco.");
    return false;
}
if(campoVazio(this.frm.getTxtNumAutoInfr())) {
    mostrarMensagemErro("Campo Série está em branco.");
    return false;
}
if(campoVazio(this.frm.getTxtPlaca())) {
    mostrarMensagemErro("Campo Série está em branco.");
    return false;
}
return true;

}

public boolean jaVerificado(JTextField textField) {
return camposVerificados.containsKey(textField);
}

public boolean campoVazio(JTextField textField) {

if(jaVerificado(textField)) {
    return false;
}
boolean vazio = textField.getText().trim().equals("");
camposVerificados.put(textField, vazio);
return vazio;

}

public void mostrarMensagemErro(String mensagem) {
JOptionPane.showMessageDialog(null, mensagem, “Erro”, JOptionPane.ERROR_MESSAGE);
}[/code]

Obrigado pela ajuda fredericomaia10, mas continua o mesmo problema…a msg continua aparecendo enquanto o campo estiver em branco…sera q falta alguma coisa??

CAra, uma solução de repente seria criar uma variável global na classe, de forma a fazer um contador.

Por exemplo:

     private int errCampo1=0, errCampo2=0, errCampo3=0

    //demais metodos

       public boolean verificarCampos() {  
      
            if (this.frm.getTxtSerie().getText().trim().equals("") && errCampo1==0) {  
                errCampo1++; //aqui voce incrementa o contador para nao aparecer mais esse aviso
                JOptionPane.showMessageDialog(null, "Campo Série está em branco.", "Erro", JOptionPane.ERROR_MESSAGE);  
                this.frm.getTxtSerie().requestFocus();  
                return false;  
    }else if(this.frm.getTxtNumAutoInfr().getText().trim().equals("") && errCampo2==0) {  
                 errCampo2++; //aqui voce incrementa o contador para nao aparecer mais esse aviso
                JOptionPane.showMessageDialog(null, "Campo Número da Infração está em branco.", "Erro", JOptionPane.ERROR_MESSAGE);  
                this.frm.getTxtNumAutoInfr().requestFocus();  
                return false;    
    }else if(this.frm.getTxtPlaca().getText().trim().equals("") && errCampo3==0) {  
                errCampo3++; //aqui voce incrementa o contador para nao aparecer mais esse aviso
                JOptionPane.showMessageDialog(null, "Campo Placa está em branco.", "Erro", JOptionPane.ERROR_MESSAGE);  
                this.frm.getTxtPlaca().requestFocus();  
                return false;  

jks1903, desse jeito deu certo sim…mas são 23 campos para validar…então vou ter q criar 23 variáveis?? uma para cada campo?? não teria como fazer só com uma??
desculpa ser chato, mas é que estou começando agora a mexer com java…valeu pela ajuda!!

Cara, posta o código que você fez com a minha sugestão.

A lógica é aquela.

[quote=gilbertoborn]jks1903, desse jeito deu certo sim…mas são 23 campos para validar…então vou ter q criar 23 variáveis?? uma para cada campo?? não teria como fazer só com uma??
desculpa ser chato, mas é que estou começando agora a mexer com java…valeu pela ajuda!![/quote]

Eu nao tinha analisado, mas a solução do fredericomaia10 é realmente bem melhor. Nela voce cria um único HashMap que vai sendo populado conforme os campos são verificados. Eu não testei o código, mas acho que funciona sim.

Simples, de o retorno apenas no final…
Ele para a execução do método no retorno… e sempre que cai dentro do IF você da um retorno, por isto não testa os demais.

Abraço!

Simplificando o que ele quer é:

  • A primeira vez que o usuário tentar salvar os campos serão validados. Se estiver em branco, vai ter um alerta.
  • Caso o usuário tente salvar novamente, mesmo estando os campos em branco, o usuário preenchendo ou não, ele deve permitir salvar dessa vez.

A solução que dei resolve este problema.