martes, 22 de abril de 2014

JTable de manera sencilla

Los JTable muchas veces pueden llegar a ser componentes bastantes complejos por la gran cantidad de métodos que posee y sobre todo cuando recién estamos aprendiendo a usarlos en nuestras aplicaciones. Por ello vamos a dar los primeros pasos para crear un JTable y cómo gestionar los datos a mostrar de manera transparente.

La manera más sencilla de crear un Jtable es utilizando cualquiera de los siguientes constructores:
  • JTable(Object[][] rowData, Object[] columnNames)
  • JTable(Vector rowData, Vector columnNames)

De esta forma especificamos de los datos a mostrar y el nombre de las columnas.

Los datos se los puede pasar directamente en el constructor como vimos anteriormente, pero de esta forma se nos resulta un poco difícil manejar datos si estos vienen de una base de datos. Por otra parte JTable es un componente que solo se encarga de mostrar datos ya que está basado en el patrón MVC, esto nos facilita la manera en que vamos a gestionar estos datos que aparentemente nos resulta confuso si por ejemplo tengo una lista de productos o personas y no sabemos cómo mostrar estos datos. Para ello JTable requiere de otra clase que se encarguen de gestionar estos, y así hacernos la vida más fácil.

JTable usa como modelo de datos a una clase que implemente la Interfaz TableModel, ya que esta interfaz proporciona el modelo de la distribución de los datos, o sea la manera de cómo JTable tiene que mostrar estos. Pero TableModel tiene métodos que talvés nosotros no entendamos como implementarlo, para esto Java ya nos proporciona una clase abstracta llamada AbstractTableModel que implementa los métodos mas complejos, dejándonos los métodos más básicos para que nosotros implementemos y así nuestro JTable no tenga errores.

Usaremos como ejemplo una lista de productos. Para ello requeriremos de lo siguiente:

  1. Definiremos una entidad Producto y posteriormente crearemos una lista de estos.
  2. Definiremos un Modelo de Tabla (lo mas importante), que gestionará nuestra lista de productos.
  3. A nuestro JTable le asignaremos este modelo de tabla.
  4. Mostraremos nuestra tabla.

Definimos una entidad Producto que representará cada fila de nuestra tabla. Esta entidad tendrá los siguientes campos: cantidad, nombre, precio y total.


Ahora iremos a los más importante que es la forma como vamos a gestionar nuestra lista de productos. Empezaremos por crear una clase llamada ModeloTablaProducto que herede de AbstractTableModel y nos obligará a implementar los métodos mas básicos.




  • El método getColumnCount( ), representará la cantidad de columnas que tendrá nuestra tabla.
  • El método getRowCount( ), representará la cantidad de filas que tendrá nuestra tabla, en este caso el número de productos.
  • El método getValueAt(int rowIndex, int columnIndex), como vemos retorna un objeto y representará el valor que tendrá cada celda del JTable. El JTable internamente en base al número de filas y columnas que obtuvo con los dos métodos anteriores, obtendrá cada valor de cada celda. Esto es: supongamos que definimos 4 columnas que representan los campos de la entidad producto, y tengamos 5 productos, quiere decir que con este método getValueAt( ), el JTable irá obteniendo cada valor de celda en base a las 4 columnas y 5 filas.


Existen otros métodos que bien podemos sobreescribir para darle mas funcionalidad a nuestra tabla como por ejemplo asignar el nombre de las columnas. Esto lo definimos sobreescribiendo el método getColumnName(int columnIndex). Donde columnIndex es el índice que representa la columna, esto es empezando por 0.

Ahora lo más importante, LOS DATOS; tenemos que definir una lista de productos, esto sería algo así..
Y pasando esta lista a nuestro modelo de tabla quedaría asi:



  • Como vemos, definimos el constructor pasando un lista de productos, los cuales son los datos a mostrar.
  • Definimos los nombres de las columnas en el campo columnas como un vector de String, y lo hacemos uso en el método getColumnCount( ) y getColumnName( ).
  • También definimos el número de filas de la tabla con el método getRowCount(), usando la tamaño de la lista de producto. Claro está comprobar si la lista es null, en tal caso quiere decir que la tabla no va a tener filas (0).
  • Y el método más importante de este Modelo de Tabla es getValueAt( ): Simplemente retornamos el valor correspondiente a cada celda de la tabla según sea el índice de la fila y columna basado en nuestra lista de productos. 

Finalmente faltaría crear nuestro JTable pasándole al constructor el Modelo de Tabla que definimos. Así quedaría finalmente nuestra tabla Productos.





Puedes descargar el proyecto completo desarrollado en Eclipse Espero sus comentarios y dudas que tengan al respecto.. Posteriormente publicaré más cosas sobre JTable. Gracias..
















No hay comentarios:

Publicar un comentario