Archivo

Archive for 18 noviembre 2009

JTable “dinámico” en NetBeans

18 noviembre, 2009 38 comentarios

Al utilizar NetBeans y colocar algún JTable en la interfaz gráfica de usuario suele ser un problema el poder agregar filas a medida que se van necesitando.
Esto se debe a que los JTable no tienen un método para controlar la creación y eliminación de sus filas. Investigando un poco uno descubre que esto se hace utilizando el modelo (TableModel) del objeto JTable. y supone que puede accederlo (a un puntero del modelo) por medio del método getModel() de JTable.
El problema es que aún accediendo al modelo de la tabla, no es posible agregar o eliminar filas como uno esperaría.

La solución más sencilla (y la peor) es asignar por medio del editor de NetBeans una cantidad “estimada” de filas para la tabla. Si llegan a ser demasiadas, el uso de memoria del programa se vuelve exagerado y hay que modificar los parámetros de la JVM para iniciar el programa con la consecuente pérdida de rendimiento. En pocas palabras es lo más ineficiente que se puede hacer.

Una solución muchísimo mejor que también es fácil de implementar es declarar el modelo que va a utilizar la tabla como cualquier otro atributo de la clase (para poder ser utilizado con un JTable agregado gráficamente).

private DefaultTableModel modeloTabla;

Luego este modelo se debe instanciar e inicializar (en el constructor). Pero esto tiene que ser antes de la llamada al método initComponents() que genera NetBeans. De lo contrario este método intentará asignar un modelo no instanciado al JTable, provocando un IllegalArgumentException.

modeloTabla = new DefaultTableModel();
// Agregar las columnas que se necesiten utilizando el método
// addColumn(Object columnName) de DefaultTableModel.
// También es posible utilizar un constructor sobrecargado
// que recibe como parámetros un vector Object[] { … } cuyos
// elementos son los nombres de las columnas y un int con la
// cantidad inicial de filas (se crean vacías):
// DefaultTableModel(new Object[] { "Col 1", "Col 2" }, 5)
initComponents();

Lo que sigue es asociar este modelo al JTable agregado gráficamente. Para hacer esto se selecciona el JTable, y en sus propiedades se busca “model”.

 
En la ventana que aparece al presionar el botón para editar la propiedad se selecciona “Custom code” en el combo box y en el campo de texto simplemente se coloca el nombre del objeto modelo definido en el código.

 
Después sólo es cuestión de agregar, eliminar o incluso mover las filas cuando sea necesario, directamente en el modelo.

// Agregar fila, el parámetro es un vector con los valores de
// las columnas

modeloTabla.addRow(Object[] rowData);

// Eliminar fila, el parámetro es el índice de la fila a
// eliminar

modeloTabla.removeRow(int row);

// Eliminar todas las filas
modeloTabla.getDataVector().clear();

// Mover una o varias filas, los primeros dos parámetros
// seleccionan la(s) fila(s) que se va(n) a mover y el tercero
// indica la posición hacia donde se va a mover dicha selección

modeloTabla.moveRow(int start, int end, int to);

Los cambios se reflejan instantáneamente en el JTable.

Anuncios
Categorías:Programación