Como se ha estudiado en las
entradas anteriores, se pueden extraer datos de la base de datos a través de
consultas SQL de tipo SELECT. Los datos extraídos se almacenan en objetos de
tipo ResultSet.
Luego, solo hay que
analizar el contenido del objeto ResultSet
para extraer los datos que contiene y trabajar con ellos.
En las publicaciones
anteriores hemos extraído los datos del ResultSet
y los hemos presentado en un JOptionPane o en un JTextPane.
Sin embargo, una mejor opción para presentar el contenido de un ResultSet es usar objetos
de la clase JTable, ya que estos objetos tienen forma de tabla.
En este post se estudiarán
los objetos de la clase JTable (sin tener en cuenta a las
bases de datos). Una vez que entendamos el funcionamiento de los objetos del
tipo JTable,
los usaremos en posteriores publicaciones para presentar dentro de ellos el
contenido de consultas SQL.
EJERCICIO GUIADO Nº 1
- Crea un nuevo proyecto
en NetBeans. En la ventana principal de dicho proyecto agrega un objeto
del tipo JTable:
Asigna al objeto JTable el nombre tablaDatos.
Debes tener en cuenta que los objetos JTable
se añaden siempre dentro de un panel de desplazamiento JScrollPane:
- El objeto tablaDatos que se acaba de
introducir tiene por defecto cuatro columnas con los nombres “Title 1”, “Title
2”, “Title 3” y “Title 4”, y contiene cuatro filas vacías. Puedes ejecutar
el programa para ver el funcionamiento del objeto tablaDatos. Pruebe a introducir algún dato en las
celdas de la tabla:
- Aprenderemos ahora a
configurar determinados aspectos de la tabla que vamos a usar. Para ello
añada al método constructor una llamada a un método configurarTablaDatos que programaremos a continuación:
- Programa ahora el
método configurarTablaDatos de
la siguiente forma:
La primera línea del código
define un array tipo String con los títulos de la tabla, es decir, con las
columnas de la tabla.
A continuación, se
construye un objeto del tipo DefaultTableModel,
o dicho de otra manera, un modelo de tabla. El objeto detamo está declarado como
variable global.
MODELOS (recordatorio):
Hay
que recordar que existen objetos en java que contienen un objeto modelo, encargado de contener
los datos del objeto. Un ejemplo de ello son las listas y los combos (cuadros
desplegables).
Para
definir los datos contenidos en el objeto, primero había que definir el modelo y luego asignar el
modelo al objeto.
El caso de las tablas es
igual. Para introducir datos en la tabla primero hay que configurar su objeto modelo (que será de la clase DefaultTableModel) y luego
asignárselo a la tabla.
En el código, se define
como global un objeto llamado detamo,
de tipo DefaultTablaModel.
Luego, al construir el objeto se deben indicar dos parámetros: null y el
vector de títulos de columnas:
detamo = new DefaultTableModel(null, titulosTabla);
El valor null
hace que la tabla aparezca vacía en un principio, mientras que el vector titulosTabla
define las columnas que tendrá la tabla.
Una vez construido de esta
forma el objeto modelo detamo,
este se asigna al objeto tabla:
tablaDatos.setModel(detamo);
La razón por la que se ha
declarado el objeto modelo detamo
como global es que será usado en otros métodos del programa.
- Ejecuta el programa y
observa el resultado:
Como puedes observar, se ha
creado una tabla vacía con seis columnas correspondientes al vector titulosTabla.
- Vamos a añadir un
botón a la ventana con el texto Agregar
Fila, al cual llamaremos btnAgregarFila:
7. Dentro del botón btnAgregarFila programa lo
siguiente
Este código añadirá una
nueva fila en blanco a la tabla. Estudiemos cada línea:
La primera línea recoge el
modelo de la tabla a través del método getModel.
El modelo es recogido en la variable global detamo que creamos anteriormente. Observa como es necesario
realizar un cast (en rojo) a la hora de asignar el modelo a la variable detamo:
detamo = (DefaultTableModel)
tablaDatos.getModel();
El resultado de esta
instrucción es que volvemos a tener disponible el modelo de la tabla en la variable detamo, y por tanto, podemos manipular los datos contenidos
en la tabla a través de esta variable.
Por ejemplo, se usará el
modelo detamo para
añadir una fila en blanco en la tabla. Para ello, basta con crear un vector de
cadenas de 6 elementos (ya que hay seis columnas):
String filaVacia[] = new String[6];
Y luego, a través del
método addRow (añadir fila),
añadir una fila correspondiente a los valores del vector:
detamo.addRow(filaVacia);
Debido a que el vector está
vacío, la fila que se añade está vacía también. Si el vector contuviera algún
dato, estos datos aparecerían en la fila que se añade (esto se verá a
continuación).
- Ejecuta el programa y
pulsa varias veces el botón Agregar
Fila. Observarás como se van añadiendo filas vacías a la tabla:
- Para entender bien el
funcionamiento de la inserción de filas en la tabla, añade otro botón
llamado btnFilaConDatos con
el texto Fila con Datos:
- En este botón programe
lo siguiente:
Puedes observar que el
código es parecido al anterior, solo que en este caso se añade una fila
correspondiente a un vector relleno de datos. Esto quiere decir que cuando se
añada esta fila al modelo aparecerá con los datos del vector.
- Ejecuta el programa y
comprueba su funcionamiento, observarás que al pulsar el nuevo botón
aparecen filas rellenas:
- Sigamos experimentando
con la tabla. Ahora añadiremos un botón btnEliminar con el texto
“Eliminar Fila”:
- Este botón eliminará
la fila que esté seleccionada en ese momento. Para ello programe en este
botón el siguiente código:
Estudiemos este código. En
primer lugar usamos un método que poseen los objetos del tipo JTable
llamado getSelectedRow que
nos dice el número de la fila que está seleccionada en este momento.
Si no hubiera ninguna fila
seleccionada, el método getSelectedRow
devuelve el valor –1. Esto lo usamos
en el if que viene a continuación
para mostrar un mensaje de error diciendo que no hay fila seleccionada que se pueda
borrar.
En el caso de que haya
alguna fila seleccionada (es decir, que no se haya devuelto el valor –1)
entonces efectuamos el borrado.
Para borrar recogemos el
modelo de la tabla y usamos un método llamado removeRow para borrar la fila seleccionada (la cual se pasa
como parámetro).
- Ejecuta el programa y
añade varias filas. Luego prueba a seleccionar alguna y pulsar el botón Eliminar Fila. Observa
también lo que sucede cuando intentas eliminar una fila cuando no hay
ninguna seleccionada:
- Sigamos aprendiendo
nuevas cualidades de las tablas. Añada lo siguiente a su ventana:
- Lo que se pretende es
lo siguiente: El usuario introducirá un valor de fila y de columna, por
ejemplo: Fila 2, Columna 5, y al pulsarse el botón Obtener Valor de Celda aparecerá en la etiqueta etiValorCelda el
contenido de la casilla situada en la posición 2, 5 (fila 2 columna 5).
Así pues programa lo
siguiente en el botón Obtener Valor
de Celda:
Analicemos el código:
Primero, se recogen los
valores introducidos en los cuadros de texto de la fila y columna y se
convierten a enteros:
fil = Integer.parseInt(txtFila.getText());
col = Integer.parseInt(txtColumna.getText());
Luego, se extrae el modelo
de la tabla y se usa un método llamado getValueAt.
Este método permite extraer el valor de una celda de la tabla, indicando la
fila y columna de esa celda. El resultado lo hemos almacenado en una variable valorCelda de tipo cadena. Es
necesario realizar un cast (en rojo):
valorCelda = (String)
detamo.getValueAt(fil, col);
Finalmente, una vez
extraído el valor de la celda de la posición fil, col
este se coloca en la etiqueta etiValorCelda.
Este código es susceptible
de dar error, por ejemplo si el usuario introduce unos valores de fila y
columna incorrectos. Por eso ha sido incluido dentro de un try...catch.
- Ejecuta el programa y añade varias filas.
Introduce algunos valores en las filas. Luego prueba a introducir un valor
de fila y columna y pulsa el botón Obtener
Valor de Celda:
- Sigamos
experimentando. Añade lo siguiente a la ventana:
- Se pretende lo
siguiente. El usuario introducirá un valor de fila y de columna en los
cuadros de texto correspondientes. Luego, el usuario introducirá un valor
en el cuadro de texto txtNuevoValorDeCelda. Finalmente pulsará el botón btnCambiarValorCelda.
El resultado será que se
introduce el valor escrito en la posición de la tabla indicada por la fila y
columna introducida.
Para hacer esto, programe
lo siguiente dentro del botón btnCambiarValorCelda:
Estudiemos el código detenidamente.
Lo primero que se hace es
extraer de los cuadros de texto la fila, columna y el valor a ingresar en la
celda. La fila y columna son convertidas a enteros.
fil =
Integer.parseInt(txtFila.getText());
col =
Integer.parseInt(txtColumna.getText());
nuevoValorCelda =
txtNuevoValorDeCelda.getText();
Luego se extrae (como
siempre) el modelo de la tabla y se usa un método suyo llamado setValueAt que permite
introducir un valor en una celda de la tabla. Concretamente, se introduce el
valor escrito por el usuario en la celda con fila y columna indicadas:
detamo = (DefaultTableModel)
tablaDatos.getModel();
detamo.setValueAt(nuevoValorCelda, fil,
col);
Este código es susceptible
de tener errores de ejecución (por ejemplo que el usuario introduzca un valor
equivocado en la fila y columna) por eso está rodeado de un try...catch.
- Ejecuta el programa.
Añade varias filas en blanco. Luego introduce un valor para la fila y la
columna y escribe un valor que quieras introducir. Al pulsar el botón Cambiar Valor de Celda dicho
valor aparecerá en la celda correspondiente:
CONCLUSIONES:
Existe una clase llamada JTable
que permite crear objetos con forma de tabla.
Estos objetos son ideales
para mostrar el contenido de las tablas de una base de datos, aunque pueden ser
usados de forma independiente también para mostrar cualquier tipo de datos.
Los objetos del tipo JTable
contienen un modelo de datos de tipo DefaultTableModel.
Cada vez que se quiera
trabajar con una tabla será necesario construir su modelo y asignárselo a la
tabla.
Cada vez que se quiera
modificar de alguna forma los datos de una tabla, será necesario acceder a su
modelo y trabajar con él.
A través del modelo de una
tabla podemos añadir nuevas filas a la tabla, eliminar filas, extraer datos de
las celdas de la tabla o añadir datos a las celdas de la tabla.
No hay comentarios.:
Publicar un comentario