lunes, 7 de enero de 2008

Java Datawindow Manipulación Datos en Grid (I)

16 de Noviembre del 2007
Desarrollado y probado el objeto datastore, el siguiente paso seria crear un objeto basado en el JTable para manipular y presentar datos. Este objeto seria para mi el Java datawindow.

Conforme pasaban los días mis conocimientos en java se iban incrementado pero no eran los suficiente para poder desarrollar con mas rapidez el proyecto, habían momentos en los cuales la desesperación me embargaba.

El JTable es un objeto muy potente y complejo a la vez, la mayoría de objetos Swing manejan el paradigma vista/controlador. Este paradigma básicamente consiste en que debe haber un objeto encargado de manipular y operar los datos y otro objeto es el encargado de presentarlos.

El objeto JTable al utilizar el modelo vista controlador necesita de un objeto derivado de AbstractTableModel para poder realizar la gestión de los datos.
AbstractTableModel es una clase abstracta por lo cual se deberán implementar los siguientes métodos:

  • public Class getColumnClass(int i)
  • public String getColumnName(int c)
  • public int getColumnCount()
  • public Object getValueAt(int r, int c)
  • public int getRowCount()
  • public void setValueAt( Object valor, int fila, int col )
  • public boolean isCellEditable( int fila, int col )
La mayoría de estos métodos segun su nombre nos hacen suponer cual es su función, asi que me centrare en los métodos que pudieran haber confusión:
El método getValueAt nos permite leer el valor de la celda especificada por la fila y columna (Recordar que la fila y columna empiezan por 0) esto objeto nos devolverá un tipo de datos Object el cual deberá ser interpretado de manera adecuada por nuestro programa.
El método setvalueAt nos permite modificar un valor especificando la fila y columna del JTable.
El método isCellEditable es el encargado de especificar cuando una celda se puede editar tomando como parámetros la fila y la columna.

Aqui podemos ver la declaración así como su constructor de la clase que implementara el modelo:


En la declaración de la clase public class Datawindowmodelozp extends AbstractTableModel implements TableModelListener nos percatamos que aparte de extender la clase AbstractTableModel también estamos implementando la interfaz TableModelListener esto sera necesario si deseamos controlar las modificaciones que se puedan realizar en la tabla, esto se hace con el siguiente metodo:

public void tableChanged(TableModelEvent e)

Este método pertenece a la interfaz TableModelListener el cual debe ser implementado en nuestra clase.
Fijándonos en la declaración de las propiedades de nuestra clase observamos la variable PData
que viene hacer un objeto datastore, esta propiedad sera la encargada de realizar la recuperación de los datos. En los métodos de la clase AbstractTableModel que se implemetaran la propiedad PData sera la encargada de realizar la entrega de los datos así como las modificaciones de estos.
Aqui la implementación de estos métodos:




En el código anterior nos percatamos la transformación que se realiza con las filas y columnas ya que para el JTable las filas y columnas empezaran desde 0 y para el datastore (PData) empezaran desde 1, aparte de ello podemos observar que siempre se verifica la propiedad POpen del datastore, esto se hace con el fin de verificar si el datastore se encuentra abierto o no.
La propiedad PCheckbox es una array de booleanos el cual nos indica cuando un campo es logico o no, aqui es necesario aclarar que como para este proyecto trabajo con Firebird el cual no dispone de campos de tipo lógicos los cuales los implemento como char(1) y realizo la conversión necesaria en los métodos anteriores.
Esta clase implementa otros métodos dentro de los cuales mencionare el método Conectardb() y el método Retrieve() por la importancia que tienen para este objeto la implemtación de estos métodos lo podemos visualizar en la siguiente pantalla:


Hasta este punto solo me he dedicado a describir el modelo de datos que sera el encargado de interactivo con el JTable en las entradas siguientes continuaremos con la explicación de los metodos que tuve que implemntar e el JTable.

Cabe hacer una aclaración que este enfoque y la manera de implementar los métodos están en constante cambio ya que el proyecto esta en evolución y mis habilidades con Java se van incrementando. Recordemos Tambien que estoy contra el Tiempo y lógicamente mas adelante iré puliendo estos métodos pero la idea principal seguirá.
Cualquier duda sobre la implementación y sus detalles puedes preguntármelo y gustoso tratare de absolver tus dudas.

1 comentario:

VANE dijo...

Muy Bueno el aporte felicitaciones. Asi es la gente con experiencia, gracias por dedicarte a este blog