Representación de Tablas en Un JTable
Representación de Tablas en Un JTable
Representación de Tablas en Un JTable
permite introducir tablas en nuestras aplicaciones. Estos objetos son ideales para mostrar el contenido de una tabla de la base de datos o del resultado de una consulta. Recuerda que para extraer datos de la base de datos realizamos una consulta SQL de tipo SELECT cuyo resultado se almacena en un objeto ResultSet . Un ResultSet bsicamente es una tabla almacenada en memoria (y por tanto no visible) Sin embargo, en esta hoja guiada veremos como trasladar el contenido de un ResultSet a un JTable para que el usuario pueda visualizar los datos de forma cmoda. El proceso ser bsicamente el siguiente:
Base de Datos
ResultSet
JTable
EJERCICIO GUIADO N 1
1. Crear un proyecto java y prepararlo para que pueda acceder a la base de datos MANEMPSA.MDB: a. Crear una subcarpeta Base y copiar dentro de ella el fichero de base de datos MANEMPSA.MDB b. Declarar los dos objetos globales: conexin y sentencia . c. Programar el mtodo PrepararBaseDatos de forma que el programa acceda a la base de datos y se construyan los objetos conexin y sentencia . d. Programar el evento windowClosing de la ventana principal d e forma que se cierre la conexin.
2. Una vez hecho esto, aade a la ventana principal un objeto JTable y llmalo simplemente tabla . 3. Aade en la parte inferior un botn llamado btnTrabajadores . La ventana principal quedar as:
4. Agregaremos al proyecto un objeto modelo de tabla ( DefaultTableModel ) llamado m que sea global. Tambin aadiremos en el constructor una llamada a un mtodo PrepararTabla y programaremos dicho mtodo de la siguiente forma:
Si observas el cdigo, vers que en el mtodo PrepararTabla se crea un vector de cadenas con cuatro elementos pero que no contiene nada. Luego se crea el modelo de tabla a partir de este vector vaco. Y se asigna finalmente a la tabla. El resultado de esto e s que la tabla aparecer vaca y sin ttulos (En realidad, como ttulos aparecen letras: A, B, C, etc)
Debido a que hemos asignado un vector de ttulos sin contenido, las columnas tienen como ttulo letras.
6. Bien, ahora programaremos el botn btnTrabajadores de forma que al pulsarlo se muestre el contenido de la tabla Trabajadores. Programe lo siguiente:
Estudiemos el cdigo detenidamente. Lo primero que se hace es extraer el contenido de la tabla Trabajadores de la base de datos, ejecutando una consulta SQL usando el objeto sentencia . El resultado de dicha consulta se almacenar en un objeto ResultSet llamado r.
ResultSet r = sentencia.exe cuteQuery("select * from trabajadores");
A continuacin, se extraer informacin del ResultSet y se introducir en la tabla. Lo primero que se hace es crear el modelo de la tabla definiendo la cabecera. Observa el cdigo.
Stringtitulos[] = {"DNI","Nombre","Apellidos","Sueldo","Fecha","Matrcula"}; m=new DefaultTableModel(null,titulos); tabla.setModel(m);
Como ves, lo que hacemos es definir un vector de cadenas con los ttulos correspondientes a los campos de la tabla, y luego usam os este vector para crear el modelo de la tabla. Finalmente asignamos el modelo creado a la tabla.
7. Ejecute el programa de momento. Observe como al pulsar el botn Trabajadores la cabecera de la tabla pasa a contener los campos indicados en el vector ttulos.
8. Ahora ya solo nos queda recoger todo el contenido del ResultSet y mostrarlo en la tabla. Para ello, modifique el cdigo del actionPerformed del botn Trabajadores para que quede como sigue:
Si estudiamos el cdigo, veremos que se extrae la tabla trabajadores entera introducindola en un ResultSet llamado r, a travs de una instruccin SELECT de SQL. Luego construimos un modelo de tabla ( DefaultTableModel ) llamado m usando un vector de ttulos, que se corresponde a los campos de la tabla trabajadores. Una vez hecho esto, creamos un vector de seis elementos, correspondiente a los seis datos que contiene cada fila, y empezamos a recorrer el ResultSet usando el tpico: while (r.next()) { En cada vuelta del bucle tomamos los valores de la fila del ResultSet y los almacenamos en el vector (en la posicin correspondiente) Luego se aade el vector que se ha construido al modelo de la tabla. As pues, en cada vuelta se aadir un registro ms al m odelo m. Estos registros son extrados del ResultSet . Cuando el bucle ha terminado, el modelo de la tabla contiene exactamente lo mismo que el ResultSet. Es decir, contiene la tabla trabajadores , ya que este fue el resultado de la consulta SQL ejecutada. Ya solo tenemos que asignar el modelo de la tabla al JTable correspondiente, es decir, a la tabla, con lo que esta visualizar los datos del modelo. Todo este proceso se rodea con un try...catch para evitar errores inesperados.
9. Para entender el cdigo anterior aqu tienes un pequeo grfico explicativo: Base de Datos ResultSet Vector Modelo de Tabla JTable
De la base de datos extraemos datos a un ResultSet . (Esto se hace ejecutando una consulta SQL de tipo SELECT a travs del objeto sentencia ) Del ResultSet extraemos los datos a un modelo de tabla. (Esto se hace recorriendo el ResultSet y almacenando cada registro en un vector) Almacenamiento del vector en el modelo de tabla. (Cada vector extraido del ResultSet se inserta como fila e n el modelo de tabla) Se asigna el modelo de tabla al objeto JTable. (Al hacer esto el objeto JTable muestra el contenido del modelo)
10. Ejecute el programa y observe el resultado al pulsar el botn Trabajadores . Como ve, el objeto tabla muestra entonces el contenido de la tabla Trabajadores .
11. Si observa la tabla ver que la fecha aparece en el formato estndar de almacenamiento: Ao-mes-diahora:min:seg Y que los sueldos aparecen con punto decimal. Mejore estos detalles haciendo los s iguientes cambios en el botn Trabajadores :
Como se puede observar, antes de almacenar los sueldos en el modelo de la tabla se reemplazan el punto decimal por una coma. Y en el caso de la fecha, se extrae de la cadena el ao, mes y d a y se concatenan en un formato ms habitual: dia/mes/ao. 12. Ejecuta ahora el programa y observa como se muestran las fechas y los sueldos:
En la hoja guiada anterior se vio como mostrar el contenido de una tabla de la base de datos en un JTable de la aplicacin java. Se puede aprovechar esta idea de forma que todas las operaciones que realicemos sobre una tabla se vean inmediatamente refleja das en el JTable de la aplicacin java. Por ejemplo, si eliminamos un registro sera interesante que automticamente viramos la tabla actualizada en el JTable. En esta hoja guiada se mejorar la aplicacin de la hoja guiada anterior, dotndola de opciones para la gestin de la tabla Trabajadores .
1. Abrir la aplicacin 2. El primer objetivo ser hacer que al ejecutar el programa aparezca automticamente el contenido de la tabla Trabajadores en el JTable. Para ello, realice los siguientes cambios en el cdigo del programa:
5. Lo que produce esta modificacin del cdigo es que al ejecutarse el programa se ejecute el mtodo MostrarTrabajadores con lo que se ejecutar el cdigo que hicimos en la hoja anterior para mostrar los datos de la tabla trabajadores en el JTable. Ejecuta el programa y comprueba el resultado.
6. Puesto que la tabla trabajadores se muestra al empezar el programa, la existencia del botn Trabajadores no tiene sentido, as pues elimina el botn Trabajadores de la ventana. 7. Aade ahora en la parte inferior un panel llamado panelAcciones y un botn Eliminar Trabajador llamado btnEliminar :
8. Se pretende que el usuario seleccione uno de los trabajadores de la tabla y al pulsar el botn Eliminar dicho trabajador se elimine de la base de datos. Esta eliminacin por supuesto se ver reflejada en el JTable. Para ello, programe en el botn Eliminar lo siguiente:
Estudiemos con detenimiento el cdigo programado. Lo primero que s e hace es recoger la fila seleccionada de la tabla usando el mtodo getSelectedRow . Si el valor devuelto es 1 entonces es que no hay ninguna fila seleccionada. El programa avisa de esta circunstancia. Si se seleccion a un trabajador, entonces podemos bo rrar. Pero antes, es interesante pedir confirmacin. Esto es lo que se hace con el JOptionPane.showConfirmDialog. Si el usuario acepta la eliminacin del trabajador, entonces la llevamos a cabo. Observa el proceso: Extraemos del modelo del JTable el dni del trabajador seleccionado (este dni se encuentra en la fila seleccionada filsel- columna 0 la primera columna -):
m = (DefaultTableModel) tabla.getModel(); dni = (String) m.getValueAt(filsel,0);
Ahora se construir una instruccin de accin SQL del tipo DELETE para que se elimine el trabajador con el dni extrado. Esto se hace concatenando y ejecutando la instruccin SQL a travs del objeto sentencia :
Y finalmente se llama al procedimiento MostrarTabla para que se extraiga de la base de datos y muestre de nuevo la tabla trabajadores . Esto actualizar el JTable, y se podr ver que el trabajador ha sido eliminado. Todo esto est dentro de un try...catch para capturar errores inesperados.
9. Ejecuta el programa y prueba a eliminar algn trabajador. Observa como el JTable se actualiza cuando se produce la eliminacin.
11. Cuando se pulse el botn Nuevo se pretende que aparezca un formulario donde se puedan introducir los datos de un nuevo trabajador. Esto se conseguir aadiendo un cuadro de dilogo a nuestro proyecto. Para ello, agrega un JDialog al proyecto. Este dilogo se llamar dialogoNuevo .
12. Haga doble clic en el Inspector sobre el dialogoNuevo para disearlo. Debe quedar como sigue, con los nombres que se indican a continuacin:
btnNuevoAceptar btnNuevoCancelar
13. La idea es la siguiente. Cuando el usuario pulse el botn Nuevo, aparecer este cuadro de dilogo. El usuario introducir los datos del nuevo trabajador y pulsar Aceptar, y entonces estos datos se introducirn en la tabla trabajadores . Si el usuario pulsa Cancelar, entonces no se har nada. El JTable se actualizar para mostrar el resultado de la inser cin del nuevo trabajador. As pues, entre en el actionPerformed del botn btnNuevo y programe lo siguiente:
Este cdigo empieza asignando un tamao al cuadro de dilogo dialogoNuevo . Luego, se define el dialogoNuevo como Modal. Esto significa que hasta que no se termine de trabajar con este cuadro de dilogo no se podr continuar usando el programa principal. Luego se muestra dicho cuadro de dilogo. Y finalmente se actualiza el JTable por si se hubiera introducido un nuevo trabajador.
14. Ahora programemos los botones del cuadro de dilogo dialogoNuevo . Empecemos por el botn Cancelar :
Como ves, tan sencillo como descargar el cuadro de dilogo. El botn Cancelar debe limitarse a quitar de la pantalla el cuadro de dilogo dialogoNuevo .
15. Y finalmente se programar el botn Aceptar del cuadro de dilogo. Recuerda que este botn es el que introduce en la base de datos a un nuevo trabajador. Programa dentro de este botn lo siguiente:
Vamos a analizar detenidamente este cdigo. Lo primero que puedes observar es un conjunto de lneas que copian el contenido de los cuadros de texto en variables de cadena. Al hacer esto, cambiamos la coma decimal por punto decimal en el caso del sueldo y configuramos la fecha en el formato que entiende SQL: mes/dia/ao. Luego, con estas variables, se construye por concatenacin una instruccin SQL de tipo INSERT que permita introducir los datos del nuevo trabajador en la tabla trabajadores.
Se ejecuta dicha instruccin SQL. Y se cierra el cuadro de dilogo. Por supuesto, es necesario un try...catch para evitar problemas inesperados. 16. Ejecuta el programa y prueba a introducir nuevos trabajadores.
17. Nuestro programa ya puede hacer altas y bajas. Solo queda que pueda realizar modificaciones. Para ello aade un nuevo botn a la ventana, llamado btnModificar :
18. Se pretende que el usuario seleccione en la tabla el trabajador cuyos datos quiere modificar, y luego pulse est e botn para efectuar la modificacin. Al pulsar este botn debe aparecer un cuadro de dilogo donde el usuario pueda cambiar fcilmente los datos. Ese cuadro de dilogo ser muy parecido al que hemos hecho antes, as que bsicamente solo tendrs que ha cer una copia de dicho cuadro de dilogo y modificarlo un poco. A continuacin se explica como hacerlo.
19. Haz clic con el derecho sobre el cuadro de dilogo dialogoNuevo y activa Copiar :
21. Aparecer un nuevo cuadro de dilogo que es una copia del anterior. Este cuadro tendr como nombre dialogoNuevo1 .
22. Sin embargo, le cambiaremos el nombre para que sea ms acorde con su funcin. Le llamaremos dialogoModificar . Cmbiale el nombre:
23. Vamos a modificar un poco el diseo del dialogoModificar . Haz doble clic sobre l y realiza las siguientes modificaciones en el diseo:
Cambia el ttulo. Ahora es Modificar Trabajador Los nombres para los cuadros de texto y botones sern: txtModDni (Desactiva su propiedad editable) txtModNombre txtModApellidos txtModSueldo txtModDiatxtModMestxtModAnio txtModMatricula btnModAceptarbtnModCancelar
24. Empezaremos programando el botn Modificar . Al pulsar este botn se debe mostrar el cuadro de dilogo anterior relleno con los datos del trabajador que se quiere modificar. Se supone que el usuario ha seleccionado a este trabajador en la tabla anteriormente. Entra en el actionPerformed del botn Modificar y programa lo siguiente:
Estudiemos el cdigo. Primero se comprueba el nmero de la fila seleccionada. Si no hubiera ninguna se muestra un mensaje de error, ya que es necesario modificar la fila del trabajador que se quiere modificar. En el caso de que haya una fila seleccionada, se extraen los datos del modelo del JTable y se almacenan en varias variables de cadena. Una vez hecho esto, esas mismas variables se almace nan en los cuadros de texto del cuadro de dilogo dialogoModificar . Y finalmente se prepara el cuadro de dilogo dialogoModificar y se muestra en la pantalla. Una vez realizada la modificacin (no programada an) se muestran los trabajadores en la tabla llamando al mtodo MostrarTrabajadores .
25. Puedes comprobar el funcionamiento del programa de momento. Prueba a seleccionar una fila de la tabla y al pulsar el botn Modificar.
El resultado es que aparece el cuadro de dilogo dialogoModificar ya relleno con los datos del trabajador que se seleccion.
26. Lo bueno que tiene el rellenar el cuadro de dilogo dialogoModificar con los datos del trabajador que se quiere modificar es que no tenemos que escribir todos los datos, y solo modificar el campo que nos interese. El usuario realizar los cambios e n los cuadros de textos ya rellenos y luego pulsar el botn Aceptar para que se produzca la modificacin. Si se pulsa Cancelar no sucede nada. Simplemente se cerrar el cuadro de dilogo. 27. Se empezar programando el botn Cancelar . Este botn debe limit arse a cerrar el cuadro de dilogo dialogoModificar :
28. Ahora nos centraremos en el botn Aceptar. Este botn debe realizar la modificacin, introduciendo todos los datos de los cuadros de texto en la tabla trabajadores. El cdigo siguiente tomar como referencia el DNI del trabajador que se est modificando. Es importante que este DNI no cambie, ya que entonces estaramos modificando los datos de otro trabajador.
Esta es la razn por la que el cuadro de texto txtModDni se ha configurado como no editable , para evitar que el usuario pueda cambiarlo accidentalente. Programa el siguiente cdigo en el botn Aceptar:
Estudiemos el cdigo. Lo primero que se hace es recoger en variables los datos introducidos en los cuadros de texto. Luego, con estas variables, se construye una instruccin SQL del tipo UPDATE que permite modificar los datos del trabajador con el dni indicado en el cuadro de dilogo. Finalmente se cierra el cuadro de dilogo. Todo este cdigo es sus ceptible de sufrir fallos por lo que est rodeado de un try...catch.
29. Ejecuta el programa y comprueba el funcionamiento de la actualizacin de trabajadores. Prueba a realizar varias actualizaciones. Observa como el JTable se actualiza con las nuevas modif icaciones realizadas.
CONCLUSIN La ms simple de las aplicaciones de base de datos debe ser capaz de realizar las siguientes operaciones sobre una tabla: Altas Bajas Modificaciones
Es muy interesante que la aplicacin muestre en pantalla continuamente un JTable con el contenido de la tabla de la base de datos sobre la que se est trabajando. El JTable nos permite visualizar los datos de la tabla y seleccionar rpidamente el registro que queramos manipular. Para la insercin de nuevos registros en la tabla se recomienda la creacin de un cuadro de dilogo que muestre un formulario donde el usuario pueda introducir los datos del nuevo registro cmodamente. Para la modificacin de un registro, se recomienda la creacin de otro cuadro de dilogo que muestre los datos del registro que se quiere modificar.