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…
publicbooleanverificarCampos(){if(this.frm.getTxtSerie().getText().trim().equals("")){JOptionPane.showMessageDialog(null,"Campo Série está em branco.","Erro",JOptionPane.ERROR_MESSAGE);this.frm.getTxtSerie().requestFocus();returnfalse;}elseif(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();returnfalse;}elseif(this.frm.getTxtPlaca().getText().trim().equals("")){JOptionPane.showMessageDialog(null,"Campo Placa está em branco.","Erro",JOptionPane.ERROR_MESSAGE);this.frm.getTxtPlaca().requestFocus();returnfalse;
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??
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
lsjunior
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
gilbertoborn
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
gilbertoborn
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
gilbertoborn
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
gilbertoborn
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:
privateinterrCampo1=0,errCampo2=0,errCampo3=0//demais metodospublicbooleanverificarCampos(){if(this.frm.getTxtSerie().getText().trim().equals("")&&errCampo1==0){errCampo1++;//aqui voce incrementa o contador para nao aparecer mais esse avisoJOptionPane.showMessageDialog(null,"Campo Série está em branco.","Erro",JOptionPane.ERROR_MESSAGE);this.frm.getTxtSerie().requestFocus();returnfalse;}elseif(this.frm.getTxtNumAutoInfr().getText().trim().equals("")&&errCampo2==0){errCampo2++;//aqui voce incrementa o contador para nao aparecer mais esse avisoJOptionPane.showMessageDialog(null,"Campo Número da Infração está em branco.","Erro",JOptionPane.ERROR_MESSAGE);this.frm.getTxtNumAutoInfr().requestFocus();returnfalse;}elseif(this.frm.getTxtPlaca().getText().trim().equals("")&&errCampo3==0){errCampo3++;//aqui voce incrementa o contador para nao aparecer mais esse avisoJOptionPane.showMessageDialog(null,"Campo Placa está em branco.","Erro",JOptionPane.ERROR_MESSAGE);this.frm.getTxtPlaca().requestFocus();returnfalse;
G
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!!
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
clarel.filho
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.