Exceções [Resolvido]

Olá galera!

Bom, dessa vez é o seguinte:

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:

[code]
try {
aluno.setMatricula( matricula.getText() );
}

    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:

[code] aluno.setNome( nome.getText() );
if ( aluno.getNome().equals("") || aluno.getNome() == null ) {

            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.

O que eu faço?

:?:
Me ajudem, por favor!
Obrigada desde já.

Dentro do try você pode validar se o campo é nulo, num if, igual ao do campo nome

Já tentei isso, mas ao invés de mostrar a mensagem do if ele sempra mostra a mensagem do catch. :?

esse sistema é desktop ou web? Se for web tem os componentes ajax…vc trabalha com anotações? se sim tem os validadores das anotações q é show…

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

Deu certo galera.
Obrigada drsmachado! Você abriu minha mente e consegui fazer também outros testes através da sua dica.

Obrigada também a todos que tentaram ajudar.

Valeu galera, até a próxima! :slight_smile:

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!