Implementación de Aplicaciones con Interfaz Gráfica y Acceso a Bases de Datos
Hasta ahora las aplicaciones Java desarrolladas no manejaban una cantidad demasiado grande de datos e interactuaban con el usuario a través de consola. Sin embargo, las aplicaciones profesionales de mayor entidad tiene asociada una interfaz gráfica que permite al usuario una interacción sencilla y funcional, y además manejan grandes volúmenes de información almacenada en una base de datos.
En este contexto, se hace necesario aprender a implementar aplicaciones a las que se les diseñe y contruya su propia interfaz gráfica y además manipulen la información almacenada en una base de datos, ambos conceptos serán trabajados en la presente tarea global
Índice de contenido
2)Preparando la aplicación para usar listeners 6
Tarea Global
Implementación de Aplicaciones con Interfaz Gráfica y Acceso a Bases de Datos
Lo primero que se debe hacer en el proyecto es crear la interfaz. Para ello, necesitamos sacar una ventana donde vamos a realizar la aplicación. Para crear la ventana se usa un Jframe. Para crear una clase Jframe, NetBeans nos proporciona un wizard tanto para la creación como para el diseño.
Para crear el Jframe es casi idéntico a crear una clase Java pero seleccionando Jframe Form:
Tras la creación, vemos que estamos en la pestaña “design” lo que nos ayudará a realizar el diseño.
Como se aprecia en la imagen del enunciado, el Jframe está separado en dos partes y hay un borde que lo separa. Para ello, arrastramos dos elementos Panel, situados a la derecha, hasta el Jframe y les damos el mismo tamaño a ambos:
Ahora sólo nos queda añadir el borde. Esto se hace modificando la propiedad border que aparece abajo a la derecha. Elegimos Bevel Border por ser el más parecido a la imagen:
Ya tenemos las dos partes, vamos a insertar el resto de los elementos. De la misma forma, arrastrando desde la derecha, arrastramos 6 Label para el texto fijo:
A continuación arrastramos 4 TextField (a la izquierda), un TextArea (a la derecha) y dos botones (uno a cada lado), obteniendo el mismo diseño:
Para terminar de tener exactamente lo mismo, pulsamos con el botón derecho sobre cada Label y button y elegimos “Edit Text” poniendo el texto que sale en el enunciado:
2)Preparando la aplicación para usar listeners
A pesar de tener la interfaz preparada, las variables de los objetos que contienen la información (JTextFields, JTextArea y Jbuttons) tienen unos nombres muy poco descriptivos. Vamos a cambiar los nombres para poder trabajar sin errores. Para ello, pulsamos con el botón derecho sobre cada elemento y seleccionamos “Change Variable Name…”:
- A los JButton los vamos a llamar btnInsertar y btnMostrar
A los JTextField los vamos a llamar tfCodigo, tfNombre, tfLoc y tfManager
Al JTextArea lo vamos a llamar taDatosMostrados
Ya casi estamos listos para poder ponernos con el algoritmo de los botones. Nos falta indicar que queremos que al pulsar un botón se llame a un método. Pulsamos con el botón derecho sobre cada botón, elegimos events→ Action → actionPerformed y nos aprecerá, entre paréntesis la función a la que va a llamar dicho botón cuando sea pulsado. (Internamente le añade un listener que llama a esa función):
3)Preparando el proyecto para atacar a una bd Oracle
Como en las funciones de los botones vamos a realizar operaciones contra una bd Oracle, necesitamos prepararnos para ello. Por tanto, es necesario añadir la librería de Oracle al proyecto NetBeans. Pulsando sobre libraries con el botón derecho, seleccionamos Add JAR/Folder…
Y, a continuación elegimos el jar de oracle:
Una última cosa antes de crear la función de los botones es saber la estructura de la tabla con la que vamos a trabajar. Por tanto, accedemos al botón de inicio (windows) y seleccionamos “Run SQL Command Line”:
Ejecutamos “connect”, introducimos el usuario (hr) y el password y estaremos conectados.
Finalmente pedimos la descripción de la tabla departments:
El método llamado al pulsar el botón de insertar es el nombre del botón seguido de ActionPerformed, en este caso: btnInsertarActionPerformed.
Dicho método está dividido en 4 pasos:
Cargar el driver, en este caso, de Oracle: “Class.forName(“oracle.jdbc.OracleDriver”);
Establecer la conexión con bd mediante “DriverManager.getConnection()”.
El primer parámetro es una cadena que indica que vamos a usar jdbc con el driver thin de oracle y que atacaremos a una base de datos que se encuentra en localhost (en este equipo) y usaremos el puerto 1521 y la bd XE
El segundo parámetro indica que usaremos el usuario HR
El tercer parámetro indica el password de dicho usuario
Realizar las operaciones de base de datos (Está especificado un poco más adelante)
Liberar los recursos, en este caso la conexión y la sentencia creadas
Falta explicar las operaciones realizadas en base de datos: Primero vamos a crear un PreparedStatement. Podríamos haber usado un statement e introducir los valores recuperados en la cadena del insert pero queda menos legible. La clase PreparedStatement nos permite usar placeholders que rellenaremos más adelante, antes de ejecutar la sentencia mediante los setters.
Por tanto, el PreparedStatement contiene un insert con las columnas implícitas. Los valores de los placeholders los establecerá recuperando el texto de los diferentes JTextField usando el método getText().
Por último se ejecutará la sentencia mediante un executeUpdate ya que es una operación DML.
Si observamos la estructura definida en el botón insertar, este botón va a tener una estructura idéntica. Por tanto, nos centraremos en la única parte que cambia, que es, las operaciones contra base de datos.
Como se tienen que recuperar todos los datos de la tabla departments, la manera más sencilla es usando un Statement con la misma query que lanzaríamos en base de datos.
Esa query se ejecutará mediante el método executeQuery y nos devolverá un objeto de tipo ResultSet sobre el que podremos iterar para ir obteniendo cada una de las filas.
Al iterar sobre cada fila, iremos añadiendo la información de dicha fila al final de lo que contenía dicho objeto previamente, para que cada fila nueva no sobreescriba la anterior. Esto se realiza con el método append. Al final de cada iteración, añadimos un \n para introducir un salto de línea.
Un detalle más, es que si no limpiamos el texto cada vez que se pulsa el botón, aparecerán las filas repetidas por cada vez pulsado. Para limpiar el JTextArea se usa un setText(“”)
He añadido un nuevo departamento y, a continuación he pulsado sobre el botón de mostrar y esta es una captura obtenida:
Si quieres el código completo del ejemplo lo tienes aquí :
[sociallocker]
proyectoFinal
[/sociallocker]