miércoles, 31 de octubre de 2012

JDecimalTextField: Componente para validar decimales en Java

En uno de mis últimos proyectos necesitaba validar la entrada de datos de los usuarios, el sistema necesitaba un módulo en el cual  se requiere que se introduzcan sólo números decimales. Para ello tenía las siguientes opciones:
  • Usar un JTextField común y corriente, y programar la validación de la entrada de datos sobre él.
  • Usar JFormattedTextField y habilitarlo para que solo admita números decimales.
  • Programar un componente que tenga la funcionalidad requerida.
  • Usar el poderoso Desarrollo de Software Basado en Componentes, es decir usar un componente implementado y probado por un tercero y así ahorrarme tiempo, esfuerzo, recursos, etc.
Me decanté por la última opción y así que buscando un control visual que satisfaga mis necesidades me encontré con JDecimalTextField, el cual no es más que un componente que hereda de JTextField, es decir es una caja de texto que solo acepta números decimales y que además cuenta con las siguientes propiedades adicionales a las ya tradicionales de un JTextField:

  • maxValue: para determinar el valor máximo.
  • minValue: que determina el valor mínimo.
  • integerLength: que indica la longitud (en dígitos) de la parte entera.
  • decimalLength: indica la longitud (en dígitos) de la parte decimal.
¿Pero por qué no usar el JFormattedTextField disponible desde la versión 1.4 de Java?, lo que pasa es que la ventaja de JDecimalTextField es que este componente bloquea el ingreso de los datos inválidos al ir escribiendo sobre éste control (lo cual lo vuelve muy elegante), bloqueando el ingreso de los datos inválidos; es decir al presionar una letra o un símbolo que no sea un número, un punto o una coma decimal el control lo omite y no lo incluye en su contenido, así sea con la función Ctrl V (pegar texto), este control analiza el texto y lo excluye (lo cual lo vuelve muy robusto), ya que al ser un componente heredado podemos sobrescribir las funciones de su clase padre (lo vuelve muy flexible). Punto y a parte de que el código es Open Source y tiene una licencia GPL, por lo cual podemos ver el código y adaptarlo a nuestras necesidades, siempre y cuando respetemos la licencia mencionada.

Al comienzo de la entrada pueden ver la interfaz gráfica de un pequeño demo que implementé a modo de ejemplo de uso del componente JDecimalTextField, el ejemplo consiste en introducir unas medidas (a saber: alto, ancho, profundidad, diámetro y peso), las cuales obviamente sólo pueden ser números decimales. Al final del post también dejo un enlace con la descarga del ejemplo y la librería, el programa fue desarrollado con la ayuda de Netbeans, de todos modos en la subcarpeta dist del proyecto pueden encontrar el ejecutable en formato .jar.

Te RECOMIENDO antes de echar a andar el proyecto de ejemplo instalar el componente JDecimalTextField en la paleta de componentes (si no sabes cómo cheka mi anterior post), si tienes problemas de direccionamiento de la librería, usa la opción "Resolve Reference Problems..." de Netbeans, presiona el botón "Resolve..." de la ventana que se despliega y ubica el archivo .jar donde copiaste la librería.

En la carpeta que les estoy dejando no incluyo el código fuente del componente, pero sí la librería con algunas leves mejoras que hice y lista y empaquetada en .jar para ser utilizada en cualquier proyecto (la librería la adjunto en la subcarpeta lib del demo). Por ejemplo un bug que le encontré fue que sus propiedades integerLength y decimalLength no funcionaban (ya que no podían ser personalizados), pero ese bug yo lo parché. Si quieren el código fuente de la librería pueden descargarlo desde la página de los amigos de coplec.org, donde encontrarán éste y otros interesantes componentes JavaBeans.

Demo: Descargar/Download

No hay comentarios :

Publicar un comentario

Encuesta: ¿Quién es el mejor catedrático de la carrera de Ing. Informática de la UAGRM?