Representación de Tablas en un JTable En la hoja guiada anterior vimos que existe un tipo de objeto llamado JTable que nos

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 básicamente 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 cómoda. El proceso será básicamente 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: conexión y sentencia . c. Programar el método PrepararBaseDatos de forma que el programa acceda a la base de datos y se construyan los objetos conexión y sentencia . d. Programar el evento windowClosing de la ventana principal d e forma que se cierre la conexión.

2. Una vez hecho esto, añade a la ventana principal un objeto JTable y llámalo simplemente tabla . 3. Añade en la parte inferior un botón llamado btnTrabajadores . La ventana principal quedará así:

4. Agregaremos al proyecto un objeto ³modelo de tabla´ ( DefaultTableModel ) llamado m que sea global. También añadiremos en el constructor una llamada a un método PrepararTabla y programaremos dicho método de la siguiente forma:

Luego se crea el modelo de tabla a partir de este vector vacío. etc) 5.Si observas el código. B. verás que en el método PrepararTabla se crea un vector de cadenas con cuatro elementos pero que no contiene nada. Y se asigna finalmente a la tabla. como títulos aparecen letras: A. . C. Ejecuta el programa para ver su aspecto de momento. El resultado de esto e s que la tabla aparecerá vacía y sin títulos (En realidad.

Programe lo siguiente: Estudiemos el código 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 .Debido a que hemos asignado un vector de títulos sin contenido. las columnas tienen como título letras. 6. ResultSet r = sentencia. El resultado de dicha consulta se almacenará en un objeto ResultSet llamado r.exe cuteQuery("select * from trabajadores"). . ahora programaremos el botón btnTrabajadores de forma que al pulsarlo se muestre el contenido de la tabla Trabajadores. Bien.

Finalmente asignamos el modelo creado a la tabla."Apellidos". Ahora ya solo nos queda recoger todo el contenido del ResultSet y mostrarlo en la tabla. y luego usam os este vector para crear el modelo de la tabla. 8."Sueldo". se extraerá información del ResultSet y se introducirá en la tabla."Nombre".titulos).setModel(m). modifique el código del actionPerformed del botón Trabajadores para que quede como sigue: . tabla. m=new DefaultTableModel(null. Lo primero que se hace es crear el modelo de la tabla definiendo la cabecera. Stringtitulos[] = {"DNI". 7. Como ves."Matrícula"}.A continuación. Para ello. Observe como al pulsar el botón Trabajadores la cabecera de la tabla pasa a contener los campos indicados en el vector títulos."Fecha". lo que hacemos es definir un vector de cadenas con los títulos correspondientes a los campos de la tabla. Observa el código. Ejecute el programa de momento.

Así pues. a través de una instrucción SELECT de SQL. contiene la tabla trabajadores .. el modelo de la tabla contiene exactamente lo mismo que el ResultSet. con lo que esta visualizará los datos del modelo. Estos registros son extraídos del ResultSet .next()) { En cada vuelta del bucle tomamos los valores de la fila del ResultSet y los almacenamos en el vector (en la posición correspondiente) Luego se añade el vector que se ha construido al modelo de la tabla. Una vez hecho esto.. . es decir. a la tabla. Es decir. que se corresponde a los campos de la tabla trabajadores. Cuando el bucle ha terminado. y empezamos a recorrer el ResultSet usando el típico: while (r. en cada vuelta se añadirá un registro más al m odelo m. Ya solo tenemos que asignar el modelo de la tabla al JTable correspondiente. Todo este proceso se rodea con un try.Si estudiamos el código.catch para evitar errores inesperados. Luego construimos un modelo de tabla ( DefaultTableModel ) llamado m usando un vector de títulos. creamos un vector de seis elementos. correspondiente a los seis datos que contiene cada fila. veremos que se extrae la tabla trabajadores entera introduciéndola en un ResultSet llamado r. ya que este fue el resultado de la consulta SQL ejecutada.

Si observa la tabla verá que la fecha aparece en el formato estándar de almacenamiento: Año-mes-diahora:min:seg Y que los sueldos aparecen con punto decimal. Mejore estos detalles haciendo los s iguientes cambios en el botón Trabajadores : . (Esto se hace ejecutando una consulta SQL de tipo SELECT a través del objeto sentencia ) Del ResultSet extraemos los datos a un modelo de tabla. Como ve.9. (Al hacer esto el objeto JTable muestra el contenido del modelo) - - - 10. Para entender el código anterior aquí tienes un pequeño gráfico explicativo: Base de Datos ResultSet Vector Modelo de Tabla JTable - De la base de datos extraemos datos a un ResultSet . 11. el objeto tabla muestra entonces el contenido de la tabla Trabajadores . Ejecute el programa y observe el resultado al pulsar el botón Trabajadores . (Cada vector extraido del ResultSet se inserta como fila e n el modelo de tabla) Se asigna el modelo de tabla al objeto JTable. (Esto se hace recorriendo el ResultSet y almacenando cada registro en un vector) Almacenamiento del vector en el modelo de tabla.

mes y d ía y se concatenan en un formato más habitual: dia/mes/año. antes de almacenar los sueldos en el modelo de la tabla se reemplazan el punto decimal por una coma. 12. se extrae de la cadena el año. Ejecuta ahora el programa y observa como se muestran las fechas y los sueldos: .Como se puede observar. Y en el caso de la fecha.

.

1. El primer objetivo será hacer que al ejecutar el programa aparezca automáticamente el contenido de la tabla Trabajadores en el JTable. Copia en él el código del actionPerformed del botón btnTrabajadores : . Para ello. 3. Abrir la aplicación 2. dotándola de opciones para la gestión de la tabla Trabajadores .En la hoja guiada anterior se vio como mostrar el contenido de una tabla de la base de datos en un JTable de la aplicación java. si eliminamos un registro sería interesante que automáticamente viéramos la tabla actualizada en el JTable. realice los siguientes cambios en el código del programa: Añade una llamada a un método MostrarTrabajadores. Por ejemplo. Crea el método MostrarTrabajadores : 4. en el constructor del programa. 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 aplicación java. En esta hoja guiada se mejorará la aplicación de la hoja guiada anterior.

la existencia del botón Trabajadores no tiene sentido.5. 6. Añade ahora en la parte inferior un panel llamado panelAcciones y un botón Eliminar Trabajador llamado btnEliminar : . Puesto que la tabla trabajadores se muestra al empezar el programa. Ejecuta el programa y comprueba el resultado. Lo que produce esta modificación del código es que al ejecutarse el programa se ejecute el método MostrarTrabajadores con lo que se ejecutará el código que hicimos en la hoja anterior para mostrar los datos de la tabla trabajadores en el JTable. 7. así pues elimina el botón Trabajadores de la ventana.

0). Si se seleccionó a un trabajador. Para ello. Si el usuario acepta la eliminación del trabajador. Pero antes. Observa el proceso: Extraemos del modelo del JTable el dni del trabajador seleccionado (este dni se encuentra en la fila seleccionada ±filsel. Si el valor devuelto es ±1 entonces es que no hay ninguna fila seleccionada. es interesante pedir confirmación. Esta eliminación por supuesto se verá reflejada en el JTable. Se pretende que el usuario seleccione uno de los trabajadores de la tabla y al pulsar el botón Eliminar dicho trabajador se elimine de la base de datos.columna 0 ±la primera columna -): m = (DefaultTableModel) tabla.getValueAt(filsel.8. programe en el botón Eliminar lo siguiente: Estudiemos con detenimiento el código programado. dni = (String) m. . entonces podemos bo rrar. entonces la llevamos a cabo. El programa avisa de esta circunstancia.getModel(). Esto es lo que se hace con el JOptionPane.showConfirmDialog. Lo primero que s e hace es recoger la fila seleccionada de la tabla usando el método getSelectedRow .

. . Para ello. Este diálogo se llamará dialogoNuevo . 10. - Y finalmente se llama al procedimiento MostrarTabla para que se extraiga de la base de datos y muestre de nuevo la tabla trabajadores . Ahora añade otro botón llamado btnNuevo: 11.executeUpdate("deletefrom trabajado res wheredni='"+dni+"'"). y se podrá ver que el trabajador ha sido eliminado. - 9. agrega un JDialog al proyecto. Observa como el JTable se actualiza cuando se produce la eliminación.catch para capturar errores inesperados. Todo esto está dentro de un try. Esto se hace concatenando y ejecutando la instrucción SQL a través del objeto sentencia : sentencia. Esto se conseguirá añadiendo un cuadro de diálogo a nuestro proyecto.- Ahora se construirá una instrucción de acción SQL del tipo DELETE para que se elimine el trabajador con el dni extraído.. Ejecuta el programa y prueba a eliminar algún trabajador. Esto actualizará el JTable. Cuando se pulse el botón Nuevo se pretende que aparezca un formulario donde se puedan introducir los datos de un nuevo trabajador.

aparecerá este cuadro de diálogo. Luego se muestra dicho cuadro de diálogo. y entonces estos datos se introducirán en la tabla trabajadores . Si el usuario pulsa Cancelar. Luego. Debe quedar como sigue. se define el dialogoNuevo como Modal. Haga doble clic en el Inspector sobre el dialogoNuevo para diseñarlo. Así pues. entre en el actionPerformed del botón btnNuevo y programe lo siguiente: Este código empieza asignando un tamaño al cuadro de diálogo dialogoNuevo . El JTable se actualizará para mostrar el resultado de la inser ción del nuevo trabajador. La idea es la siguiente. entonces no se hará nada. con los nombres que se indican a continuación: txtNuevoDni txtNuevoNombre txtNuevoApellidos txtNuevoSueldo txtNuevoDiatxtNuevoMestxtNuevoAnio txtNuevoMatricula btnNuevoAceptar btnNuevoCancelar 13. Y finalmente se actualiza el JTable por si se hubiera introducido un nuevo trabajador.12. El usuario introducirá los datos del nuevo trabajador y pulsará Aceptar. . Cuando el usuario pulse el botón Nuevo. Esto significa que hasta que no se termine de trabajar con este cuadro de diálogo no se podrá continuar usando el programa principal.

. Y finalmente se programará el botón Aceptar del cuadro de diálogo. Programa dentro de este botón lo siguiente: Vamos a analizar detenidamente este código. Empecemos por el botón Cancelar : Como ves. Luego. 15. cambiamos la coma decimal por punto decimal en el caso del sueldo y configuramos la fecha en el formato que entiende SQL: mes/dia/año. se construye por concatenación una instrucción SQL de tipo INSERT que permita introducir los datos del nuevo trabajador en la tabla trabajadores. con estas variables. tan sencillo como descargar el cuadro de diálogo. Recuerda que este botón es el que introduce en la base de datos a un nuevo trabajador. Al hacer esto. Lo primero que puedes observar es un conjunto de líneas que copian el contenido de los cuadros de texto en variables de cadena. Ahora programemos los botones del cuadro de diálogo dialogoNuevo . El botón Cancelar debe limitarse a quitar de la pantalla el cuadro de diálogo dialogoNuevo .14.

y luego pulse est e botón para efectuar la modificación.. Haz clic con el derecho sobre el cuadro de diálogo dialogoNuevo y activa Copiar : . Nuestro programa ya puede hacer altas y bajas. 16. es necesario un try. Por supuesto.. Para ello añade un nuevo botón a la ventana. Se pretende que el usuario seleccione en la tabla el trabajador cuyos datos quiere modificar. Y se cierra el cuadro de diálogo. Ejecuta el programa y prueba a introducir nuevos trabajadores. así que básicamente solo tendrás que ha cer una copia de dicho cuadro de diálogo y modificarlo un poco. 19.catch para evitar problemas inesperados. llamado btnModificar : 18. 17. Al pulsar este botón debe aparecer un cuadro de diálogo donde el usuario pueda cambiar fácilmente los datos. Ese cuadro de diálogo será muy parecido al que hemos hecho antes.Se ejecuta dicha instrucción SQL. Solo queda que pueda realizar modificaciones. A continuación se explica como hacerlo.

20. Sin embargo. Este cuadro tendrá como nombre dialogoNuevo1 . Vamos a modificar un poco el diseño del dialogoModificar . Haz doble clic sobre él y realiza las siguientes modificaciones en el diseño: . le cambiaremos el nombre para que sea más acorde con su función. Le llamaremos dialogoModificar . 22. Luego activa Pegar sobre Otros Componentes : 21. Aparecerá un nuevo cuadro de diálogo que es una copia del anterior. Cámbiale el nombre: 23.

Ahora es ³Modificar Trabajador´ Los nombres para los cuadros de texto y botones serán: txtModDni (Desactiva su propiedad editable) txtModNombre txtModApellidos txtModSueldo txtModDiatxtModMestxtModAnio txtModMatricula btnModAceptarbtnModCancelar 24.Cambia el título. Entra en el actionPerformed del botón Modificar y programa lo siguiente: . Empezaremos programando el botón Modificar . Se supone que el usuario ha seleccionado a este trabajador en la tabla anteriormente. Al pulsar este botón se debe mostrar el cuadro de diálogo anterior relleno con los datos del trabajador que se quiere modificar.

esas mismas variables se almace nan en los cuadros de texto del cuadro de diálogo dialogoModificar . Prueba a seleccionar una fila de la tabla y al pulsar el botón Modificar. ya que es necesario modificar la fila del trabajador que se quiere modificar. Una vez realizada la modificación (no programada aún) se muestran los trabajadores en la tabla llamando al método MostrarTrabajadores . Una vez hecho esto. Puedes comprobar el funcionamiento del programa de momento.Estudiemos el código. se extraen los datos del modelo del JTable y se almacenan en varias variables de cadena. Y finalmente se prepara el cuadro de diálogo dialogoModificar y se muestra en la pantalla. Primero se comprueba el número de la fila seleccionada. En el caso de que haya una fila seleccionada. Si no hubiera ninguna se muestra un mensaje de error. 25. .

... Y luego pulsa modificar.Selecciona.

Simplemente se cerrará el cuadro de diálogo.El resultado es que aparece el cuadro de diálogo dialogoModificar ya relleno con los datos del trabajador que se seleccionó. Ahora nos centraremos en el botón Aceptar. Lo bueno que tiene el rellenar el cuadro de diálogo dialogoModificar con los datos del trabajador que se quiere modificar es que no tenemos que escribir todos los datos. Este botón debe limit arse a cerrar el cuadro de diálogo dialogoModificar : 28. ya que entonces estaríamos modificando los datos de otro trabajador. El usuario realizará los cambios e n los cuadros de textos ya rellenos y luego pulsará el botón Aceptar para que se produzca la modificación. Si se pulsa Cancelar no sucede nada. . 26. Se empezará programando el botón Cancelar . Este botón debe realizar la modificación. y solo modificar el campo que nos interese. 27. introduciendo todos los datos de los cuadros de texto en la tabla trabajadores. El código siguiente tomará como referencia el DNI del trabajador que se está modificando. Es importante que este DNI no cambie.

Todo este código es sus ceptible de sufrir fallos por lo que está rodeado de un try. Luego. . Lo primero que se hace es recoger en variables los datos introducidos en los cuadros de texto.Esta es la razón por la que el cuadro de texto txtModDni se ha configurado como no editable .. Finalmente se cierra el cuadro de diálogo. se construye una instrucción SQL del tipo UPDATE que permite modificar los datos del trabajador con el dni indicado en el cuadro de diálogo. Prueba a realizar varias actualizaciones. con estas variables. para evitar que el usuario pueda cambiarlo accidentalente. Observa como el JTable se actualiza con las nuevas modif icaciones realizadas.. Programa el siguiente código en el botón Aceptar: Estudiemos el código. 29.catch. Ejecuta el programa y comprueba el funcionamiento de la actualización de trabajadores.

CONCLUSIÓN La más 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 aplicación 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 rápidamente el registro que queramos manipular. Para la inserción de nuevos registros en la tabla se recomienda la creación de un cuadro de diálogo que muestre un formulario donde el usuario pueda introducir los datos del nuevo registro cómodamente. Para la modificación de un registro. . se recomienda la creación de otro cuadro de diálogo que muestre los datos del registro que se quiere modificar.

Sign up to vote on this title
UsefulNot useful