domingo, 13 de enero de 2008

Java Datawindow Manipulación Datos en Grid (III)

22 de Noviembre 2007
Estoy con el tiempo muy recortado y creo que no terminare el primer modulo ya que en realidad no he tocado nada del sistema que tenia que desarrollar y fundamentalmente me he dedicado a crear las clases de objetos que serán el soporte para el desarrollo del sistema en si.
Mis conocimientos en Java se han ampliado y veo las cosas con mas claridad, pero aun no estoy contento con los resultado obtenidos sobre todo con respecto al factor tiempo.
Ya tengo una versión del objeto datawindow para realizar las pruebas veamoslo en acción.


Aquí podemos ver en el código que el objeto datawindow me esta ayudando bastante pero, no considero adecuado que un sistema tenga muchas sentencias SQL embebidas esto a la largo podría restarle versatilidad al sistema e incrementar el esfuerzo del mantenimiento, ademas de tener muchas lineas de código para inicializar los arrays de visualización , edición, etc. es algo muy operativo y tedioso, sinceramente no me gusta ver mi código de esa manera me pregunto si debería existir alguna manera de tener todos estos parámetros aparte, tener una especie de diseñador de datawindows y simplemente en mi código especificar el nombre de la consulta y de manera automática inicializar todos los arrasy seria muy bueno, esto seria lo ideal.
Esta idea no es mala pero se retrasaría mi proyecto mas días, pero pensando que el sistema que desarrollare es grande creo que valdría la pena desarrollar algo así.

Asi que empece a desarrollar el que para mi seria el generador de mis consultas, los datos de inicialización , colores texto, color de fondo, visible , editable todos estos valores deverias estar almacenados en algún sitio, así que para mi habían 2 alternativas almacenarlos en formato XML o almacenarlos en la base de datos, decidí almacenarlos en la base de datos no me pareció la idea de tener muchos archivos XML por alli sueltos, así que cree las estructuras de tablas necesarias para almacenar los valores de los datawindows en una base de datos.
Decidi hacer la interfaz lo mas sencilla posible por cuestiones de tiempo pero debía ser funcional para permitirme seleccionar los valores de manera practica.
Aqui unas capturas de pantallas del pequeño utilitario para crear los objetos datawindows.







Al desarrollar este programa, empece a probar los objetos que había desarrollado, detectando problemas y posibles errores de programación en estos objetos. Ya estaba conociendo Java, este programa no es muy complejo de desarrollar lo mas importante en todo sistema es la idea la concepción de como se deben realizar las cosas, al finalizar este aplicativo aprendí muchas cosas sobre el manejo de Swing esto me serviría mas adelante para el desarrollo en si del sistema.
Este pequeño aplicativo me permite definir la sentencia SQL apartir de la cual se creara el datawindow. El aplicativo tiene tres pestañas:
  • Primer Pestaña de Ingreso de sentencia SQL y prueba de la consulta.
  • Segunda Pestaña grabar datos de la cabecera y detalle así como modificar los atributos de cada columna del datawindow, en esta pestaña también se puede recuperar datawindows creados para realizar algún ajuste de sus atributos.
  • Tercera pestaña nos permite visualizar el datawindows en modo de ejecución, aqui se nos permite seleccionar cualquier datawindows existente y visualizarlo en modo de ejecución.
Uno de los problemas que se me presentaron es como poder seleccionar diferentes estilos de edición por cada celda del JTable , lo que se me ocurrió fue crear objetos en un Paquete el cual podría ser recorrido en tiempo de ejecución y determinar los objetos existentes en este y mostrarle a los usuarios los diferentes estilos de edición que podrían seleccionar. una vez realizado esto en tiempo de ejecución podría crear una clase dinamicamente así como de ejecutar ciertos métodos de la misma manera, esto lo pude realizar gracias a la reflexión que Java posee.
Aqui una captura de pantalla con los diferentes estilos de edición:


Aqui el código que me permite mostrar los objetos existentes en un paquete:

Aca he realizado algunos filtros en función de los diferentes tipos de objeto, al final retorno el arraylist classes el cual contendrá los nombres de los diferentes objetos que se podrán utilizar como estilos de edición.
El código que permite agregar y crear de manera dinámica un objeto como estilo de edición para una celda del JTable se muestra a continuación:

Utilizando la función forName de la clase class podemos crear una clase apartir de su nombre, con la clase ya creada podemos instanciar un objeto de esta clase haciendo uso de la función newInstance, esta función nos retorna el objeto instanciado del tipo de clase creado anteriormente, la función getMethod me permitirá crear u método apartir de su nombre y los parámetros que se les proporcionen. Solamente nos queda llamar al método con la función invoke de la clase Method. De esta manera haciendo uso de la reflexión se ha podido crear dinamicamente el estilo de edición para la celda del JTable.

Editcell1=new DefaultCellEditor((JComboBox)obj);

Cualquier duda sobre la implementación y sus detalles puedes preguntármelo y gustoso tratare de absolver tus dudas.



No hay comentarios: