Validar hora

11 respostas
M

ola pessoal …

criei uns 10 jFormattedTextField com a mascara “##:##” para que o usuario digite apenas horarios …

como faco pra validar esses horarios, por exemplo, a hora 25:65 não existe, pois tenho uns 10 jFormattedTextField + ou - onde vou digitar as horas …

obrigado

11 Respostas

A

Bom, uma forma simples de fazer isto seria pegar a hora e os minutos digitados pelo usuário.
Por exemplo: 25 e 65.
Então vc cria um Integer com cada uns destes valores.
Depois verifica se a hora é maior que 0 e menor que 23 e verifica se os minutos são maior que 0 e menor que 60.

M

ok, entendi …

acho melhor eu criar uma funcao pra isso, ou uma classe exclusiva, pois tenho varios campos onde vou digitar os horarios …

como eu faco isso ?? com document ??
e como fica a chamada no jformattedtextfield ??

obrigado

M

eu fiz um codigo que valida a hora …
mas coloquei no saida do focus do formattedtextfield, funciona legal, certinho, o problema e que tenho 10x o mesmo codigo …

jFormattedTextField4 = new JFormattedTextField(mascara);
jFormattedTextField4.setVisible(true);
jFormattedTextField4.setEditable(true);
jFormattedTextField4.setBounds(650, 230, 50, 25);
jFormattedTextField4.setToolTipText( "Informe a hora de saída (digite apenas números)" );
jFormattedTextField4.setFocusLostBehavior(JFormattedTextField.COMMIT);
jFormattedTextField4.addFocusListener(new java.awt.event.FocusAdapter() {
     public void focusLost(java.awt.event.FocusEvent e) {
	String pega = "" ;
	String hora = null;
	String minuto = null ;
	int conta_pega = 0;
	int conta_hora = 0;
	int conta_minuto = 0;
                pega = jFormattedTextField4.getText();
 	pega = pega.trim();
 	if ( pega.equals(":")) {
 	     JOptionPane.showMessageDialog(null, "Digite a hora" ,"Operador",JOptionPane.ERROR_MESSAGE);
 	     jFormattedTextField4.setValue("");
 	     return;
 	}
 	conta_pega = pega.length();
 	if ( conta_pega < 5 ) {
 	     JOptionPane.showMessageDialog(null, "Digite a hora" ,"Operador",JOptionPane.ERROR_MESSAGE);
 	     jFormattedTextField4.setValue("");
 	     return;
 	}
	hora  = pega.substring(0,2);
	minuto  = pega.substring(3,5);
 	conta_hora = Integer.parseInt(hora);
 	conta_minuto = Integer.parseInt(minuto);
 	if(conta_hora > 23) {
 	       JOptionPane.showMessageDialog(null, "Hora digitada inválida" ,"Operador",JOptionPane.ERROR_MESSAGE);
 	       jFormattedTextField4.setValue("");
 	       return;
 	}
 	if(conta_minuto > 59) {
 	       jOptionPane.showMessageDialog(null, "Hora digitada inválida" ,"Operador",JOptionPane.ERROR_MESSAGE);
 	       jFormattedTextField4.setValue("");
 	       return;
 	}
        }
});
A

NÃO crie o código 10 vezes.
Crie uma classe separada apenas para validar. Onde vc passa o valores para um método desta classe e ele te retorna uma resposta, um true ou false.

M

como devo criar essa classe ?? crio ela como um document ??
e a chamada dela no formattedtextfield ??

S
Cria ela do jeito simples.
public class nomeClass {

atributos



public boolean nomeMétodo(parametros param){
return variavel;
}

}
E para chama -lá :
nomeClasse cla = new nomeClasse();
cla.nomeMétodo(parametros);
[/quote]
M

fiz a seguinte classe para validar a hora …

public class Validacao {
    
    public Validacao() {
    }

    public static boolean valida_hora(Object horario) {
    	String hora = horario.toString();
		if (hora.equals(":")) {
			//JOptionPane.showMessageDialog(null, "Digite a hora" ,"Operador",JOptionPane.ERROR_MESSAGE);
			return false;
		}
		String horas = null;
		String minutos = null ;
		int conta_horas = 0;
		int conta_minutos = 0;
		horas  = hora.substring(0,2);
		minutos  = hora.substring(3,5);
		conta_horas = Integer.parseInt(horas);
		conta_minutos = Integer.parseInt(minutos);
		if(conta_horas > 23) {
			//JOptionPane.showMessageDialog(null, "Hora digitada inválida" ,"Operador",JOptionPane.ERROR_MESSAGE);
			return false;
		}
		if(conta_minutos > 59) {
			//JOptionPane.showMessageDialog(null, "Hora digitada inválida" ,"Operador",JOptionPane.ERROR_MESSAGE);
			return false;
		}
		return true;
    }
	
}

e na chamada …

jFormattedTextField3.setDocument(Validacao.valida_hora( jFormattedTextField3.getValue() ));

se colocar setDocument da erro …
como eu faco essa chamada entao …

M

kra é só vc chamar este método quando o JFormattedTextField perder o foco. Vc já até fez isso em uma outra mensagem acima.

falow’s!

M

mas seria aconselhavel fazer essa validacao na saida do focus do campo ??

e se a hora digitada for invalida, o que eu faco, vou ter que limpar o que foi digitado no campo ou deixar o cursor no campo ate que a hora que foi digitada for valida, como faco isso ??

obrigado

M

isso depende da sua necessidade, vc pode tambem, por exemplo, se seu programa tiver um botão qulaquer vc pode chamar o método a partir do evento deste botão. Ahhh…sei lá existem várias formas de fazer isso.Essa é o tipo de pergunta q vc mesmo tem q responder.

M

ok

obrigado

Criado 7 de maio de 2007
Ultima resposta 21 de mai. de 2007
Respostas 11
Participantes 4