Validacion jTextField java

Carlos
05 de Enero del 2006
Hola a todos,

estoy desarrollando una aplicación de escritorio y tengo la necesidad de validar ciertos datos introducidos en campos de texto jtextfield. En caso de que el dato introducido no se valide, jamas se debe perder el foco del jtextfield y jamas se debe poder realizar ninguna acción (ej. abrir otra pantalla, acceder a un menu, pinchar un boton...) hasta que se introduzca un valor adecuado.

En una primera aproximación mi intención era validar el dato tras la perdida de foco del jtextfield y en caso de no validarse devolver el foco al jtexfield para que lo vuelva a perder tras otra accion y se vuelva a validar. La cosa parece lógica pero por ejemplo si con un dato erroneo pincho en una de las pestañas que posee el formulario de nada me sirve devolverle el foco al jtextfield ya que el cambio de pestaña se lleva a cabo y la validación se omite. Lo mismo me ocurre pincho para abrir otra ventana o cierro la aplicación...

Cualquier comentario para una posible solución ya es agradecido.

Saludos.

chuidiang
05 de Enero del 2006
Hola:

Si usas únicamente componentes de swing (no de awt) puedes usar un InputVerifier.
Creas una clase que herede InputVerifier. Esta clase tiene un método que devuelve true si el componente puede perder el foco o no. En ese método compruebas el valor del JTextField y devuelves true o false según te interese. El JTextField tiene un metodo setInputVerifier para pasarle ese InputVerifier que te has hecho.

Se bueno.

Carlos
05 de Enero del 2006
Hola de nuevo,

he intentado aplicar la solución que me propones y sigo teniendo las mismas carencias. Si con un valor incorrecto intento focalizar otro componente swing(otro JTextField o un JComboBox por ejemplo) dentro del panel el funcionamiento es correcto ya que el metodo verify devuelve falso y no le deja perder el foco al JTextField.
Ahora bien, como comentaba antes si pincho en otra pestaña que posee el formulario, el metodo verify sigue devolviendo false pero se ejecuta el cambio de pestaña cuando mi intencion es que eso no ocurra, ni tampoco que me deje hacer cualquier otra acción (por ejemplo una acción al pulsar un botón) ni si quiera cerrar la aplicación.

No se si me explico bien, pero la idea principal es que en caso de que no se valide que el foco no se mueva del componete y no se pueda realizar ninguna accion sobre el aplicativo hasta que no quede validado el dato.

Saludos y gracias.