Validar campos em branco

16 respostas
G

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!!

16 Respostas

josiloch

Faz todas as verificações antes de retornar.

G

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

josiloch

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.

L
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;
}
G

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…

G

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

josiloch

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

G

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?

fredericomaia10

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.

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);
}
G

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

jks1903

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;
G

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!!

fredericomaia10

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

A lógica é aquela.

jks1903

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!!

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.

C

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!

fredericomaia10

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.

Criado 2 de abril de 2013
Ultima resposta 4 de abr. de 2013
Respostas 16
Participantes 6