Eu, como já falei em outro tópico, estou desenvolvendo um sistema de biblioteca, e agora que a parte mais difícil já foi, estou ajeitando as permissões desse sistema.
O problema é que existe um campo numérico, de matrícula de alunos, então fiz uma exceção para que não possa ser digitado caracteres não-numéricos nesse campo:
catch (NumberFormatException e){
JOptionPane.showMessageDialog(null,"O campo MATRÍCULA deve conter apenas números!" );
matricula.setText(null);
return;
}[/code]
A mensagem “O campo MATRÍCULA deve conter apenas números!” deve ser exibida quando for digitado qualquer caractere não-numérico nesse campo.
Porém, eu queria que quando o campo fosse deixado em branco outra mensagem fosse mostrada.
Consegui isso em outros campos que não estão em estrutura try-catch, através de uma instrução if, mas nesse não.
Vejam o que fiz no campo nome:
JOptionPane.showMessageDialog(null, "O campo NOME não pode ser nulo!");
return;
}[/code]
Pois então, quando faço isso com o campo matrícula a mensagem exibida é “O campo MATRÍCULA deve conter apenas números!” e não que o campo não pode ser nulo.
Sim, pois ao tentar fazer cast num valor nulo, a JVM identifica como erro.
Será preciso criar outra variável, mesmo local, String que receba o conteúdo do campo texto em questão e possa ser testada antes do setMatricula
try {
String mtr = matricula.getText();
if("".equals(mtr)){
//retorna a mensagem de erro e encerra o bloco
return;
}else{
aluno.setMatricula( mtr );
}
}
catch (NumberFormatException e){
JOptionPane.showMessageDialog(null,"O campo MATRÍCULA deve conter apenas números!" );
matricula.setText(null);
return;
}
Bom, como você precisa valdiar vários campos, seria interessante criar um método validador.
Isso evitaria duplicar código e ficaria mais simples de dar manutenção
tem 3 maneiras mais sensatas de fazer isso do que dando parse na string.
você pode usar um JFormattedTextField ao inves do JTextField e usar uma mascara com JFormattedTextField
JFormattedTextField field = new JFormattedTextField(new MaskFormatter("###.###.###-##"));
//para cada # quer dizer um digito a mais no campo.
você pode verificar a string inteira num for.
public static boolean apenasNumeros(String pesq){
boolean resp = false;
for (Character c : pesq.toCharArray()) {
if (!Character.isDigit(c)) {
resp = false;
break;
}else{
resp = true;
}
}
return resp;
}
no caso da segunda opção quando vc usa apenas um JTextField normalmente vc pode verificar se o componente veio vazio com apenas um comando.
campoTexto.isEmpty();
e vc pode complementar com o segundo código:
if(!campoTexto.isEmpty()){
if(apenasNumeros(campoTexto.getText()){
//implementação válida
}else{
//insira apenas números
}
}else{
//o campo não pode ficar vazio
}
ou ter usado um regex. mas esse ultimo não sei usar! mas sei que funciona rsrsr!