Manual Java Netbeans Con Ejemplos

EJERCICIO GUIADO. JAVA: CUADROS DE VERIFICACIÓN 1. Realiza un nuevo proyecto. 2. En la ventana principal debes añadir l

Views 369 Downloads 11 File size 11MB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

EJERCICIO GUIADO. JAVA: CUADROS DE VERIFICACIÓN

1. Realiza un nuevo proyecto. 2. En la ventana principal debes añadir lo siguiente: a. Un botón “Aceptar” llamado btnAceptar. b. Una etiqueta con borde llamada etiResultado. 3. Añade también tres cuadros de verificación. Estos cuadros son objetos del tipo JCheckBox.

4. Añade tres JCheckBox y cambia el texto de ellos, de forma que aparezca “Perro”, “Gato” y “Ratón”. 5. Debe cambiar el nombre de cada uno de ellos. Se llamarán: chkPerro, chkGato, chkRaton. 6. La ventana tendrá el siguiente aspecto cuando termine:

7. El programa debe funcionar de la siguiente forma: Cuando el usuario pulse aceptar, en la etiqueta aparecerá un mensaje indicando qué animales han sido “seleccionados”. Para ello hay que programar el evento actionPerformed del botón Aceptar. En ese evento añada el siguiente código: String mensaje="Animales elegidos: "; if (chkPerro.isSelected()) { mensaje=mensaje+"Perro "; } if (chkGato.isSelected()) { mensaje=mensaje+"Gato "; } if (chkRaton.isSelected()) { mensaje=mensaje+"Raton "; } etiResultado.setText(mensaje);

8. Observa el código. En él se hace lo siguiente: a. Se crea una variable de cadena llamada mensaje. b. En esa variable se introduce el texto “Animales elegidos: “ c. Luego, compruebo si está seleccionada la casilla de verificación chkPerro. Si es así concateno a la cadena mensaje la palabra “Perro”. d. Luego compruebo si está seleccionada la casilla de verificación chkGato y hago lo mismo. e. Lo mismo con la casilla chkRaton. f. Finalmente presento la cadena mensaje en la etiqueta etiResultado. 9. Observa el método isSelected() propio de las casillas de verificación, permiten saber si una casilla está activada o no. 10. Ejecute el programa. Seleccione por ejemplo las casillas Gato y Ratón. Al pulsar Aceptar el resultado debe ser el siguiente:

CONCLUSIÓN Los cuadros de verificación (JCheckBox) se usan cuando quieres seleccionar varias opciones.

EJERCICIO GUIADO. JAVA: BOTONES DE OPCIÓN 1. Realiza un nuevo proyecto. 2. En la ventana principal debes añadir lo siguiente: a. Un botón “Aceptar” llamado btnAceptar. b. Una etiqueta con borde llamada etiResultado. 3. Añade un panel. Un panel es una zona rectangular que puede contener elementos (botones, etiquetas, etc) La forma de poner un panel es a través del objeto JPanel.

4. Una vez añadido el panel en el JFrame, le pondremos un borde para poder localizarlo fácilmente. Debes hacer lo siguiente: a. Selecciona el panel que has añadido. b. Activa la propiedad Border (botón con tres puntos) c. Busca el tipo de borde llamado TitledBorder (borde con título) y pon el título colores.

5. Tu ventana debe quedar más o menos así:

6. Ahora debes añadir tres botones de opción (botones de radio) dentro del panel. Estos botones son objetos del tipo JRadioButton.

7. Añade tres JRadioButton y cambia el texto de ellos, de forma que aparezca “Rojo”, “Verde” y “Azul”. 8. Debe cambiar el nombre de cada uno de ellos. Se llamarán: optRojo, optVerde, optAzul. 9. La ventana tendrá el siguiente aspecto cuando termine:

10. Si ejecuta el programa, observará que pueden seleccionarse varios colores a la vez. Esto no es interesante, ya que los botones de opción se usan para activar solo una opción entre varias.

11. Hay que hacer que solo un botón de opción pueda estar seleccionado a la vez. Para ello, debe añadir un nuevo objeto. Realice los siguientes pasos: a. Añada un objeto del tipo ButtonGroup al formulario. ¡Atención! Este objeto es invisible, y no se verá en el formulario, sin embargo, lo podréis ver en el Inspector, en la parte de “Otros Componentes”:

b. Tienes que darle un nombre al ButtonGroup. El nombre será “grupoColores”. c. Ahora, hay que conseguir que los tres botones pertenezcan al mismo grupo. Es decir, que pertenezcan al grupo grupoColores. d. Selecciona el botón de opción optRojo y cambia su propiedad buttonGroup, indicando que pertenece al grupo colores (observa la imagen):

e. Haz lo mismo con los botones optVerde y optAzul.

12. Acabas de asociar los tres botones de opción a un mismo grupo. Esto produce que solo una de las tres opciones pueda estar activada. Pruébelo ejecutando el programa.

13. Ahora interesa que la opción “Rojo” salga activada desde el principio. Una forma de hacer esto es programando en el “Constructor” lo siguiente: optRojo.setSelected(true); El método setSelected hace que se pueda activar o desactivar un botón de opción. Prueba el programa. Observa como la opción Rojo está activada inicialmente.

14. El programa no está terminado aún. Interesa que cuando el usuario pulse el botón Aceptar, en la etiqueta aparezca el color elegido. Para ello, en el actionPerformed del botón Aceptar programe lo siguiente: String mensaje="Color elegido: "; if (optRojo.isSelected()) { mensaje=mensaje+"Rojo"; } else if (optVerde.isSelected()) { mensaje=mensaje+"Verde"; } else if (optAzul.isSelected()) { mensaje=mensaje+"Azul"; } etiResultado.setText(mensaje);

15. Observa el código. En él se hace lo siguiente: a. Se crea una variable de cadena llamada mensaje. b. En esa variable se introduce el texto “Color elegido: “ c. Luego se comprueba que opción está seleccionada, usando el método isSelected de los botones de opción. Este método te dice si un botón está seleccionado o no. d. Según la opción que esté seleccionada, se añade un texto u otro a la cadena mensaje. e. Finalmente se muestra la cadena mensaje en la etiqueta etiResultado.

16. Ejecute el programa. Seleccione por ejemplo la Verde. Al pulsar Aceptar el resultado debe ser el siguiente:

CONCLUSIÓN Los botones de opción, también llamados botones de radio (JRadioButton) se usan cuando quieres que el usuario pueda elegir una opción de entre varias. Es interesante que los botones de radio aparezcan dentro de un panel JPanel. Se recomienda colocar un borde al panel. Es totalmente necesario añadir un objeto del tipo ButtonGroup, y hacer que los botones de radio pertenezcan a dicho grupo. En caso contrario, será posible activar varios botones de opción a la vez.

EJERCICIO GUIADO. JAVA: CUADROS DE LISTA 1. Realiza un nuevo proyecto. 2. En la ventana principal debes añadir lo siguiente: a. Un botón “Aceptar” llamado btnAceptar. b. Una etiqueta con borde llamada etiResultado. 3. Añade un cuadro de lista. Los cuadros de listas son objetos JList.

4. Cámbiale el nombre al JList. Ten cuidado, ya que en los JList aparecen siempre dentro de otro objeto llamado jScrollPane. Si miras en el Inspector, verás que al pulsar en el botón + del jScrollPane aparecerá tu JList:

5. Aprovecha para cambiarle el nombre al JList. El nuevo nombre será lstColores. 6. Si te fijas en el JList, consiste en un cuadro que contiene una serie de Items. Estos elementos pueden ser cambiados a través de la propiedad Model del JList. 7. Busca la propiedad Model y haz clic en el botón de los tres puntos. Aparecerá un cuadro de diálogo parecido al siguiente. Solo tienes que seleccionar los elementos que quieras y pulsar el botón “Borrar” (Remove) para eliminarlos de la lista. 8. Puedes añadir elementos escribiéndolos en el cuadro Artículo y luego pulsando el botón “Añadir” (Add).

9. Debes hacer que la lista sea la siguiente: Rojo Verde Azul 10. Ahora programaremos el actionPerformed del botón Aceptar. Debes introducir el siguiente código: String mensaje; mensaje="El color seleccionado es: "+lstColores.getSelectedValue().toString(); etiResultado.setText(mensaje);

11. Observa el código: a. Se crea una variable de cadena llamada mensaje. b. Y dentro de esta variable se introduce una concatenación de cadenas. c. Observa la parte: lstColores.getSelectedValue(), esta parte devuelve el valor seleccionado de la lista. d. Hay que tener en cuenta que este valor no es una cadena, por eso hay que convertirla a cadena añadiendo .toString(). e. De esta manera puedes extraer el elemento seleccionado de un cuadro de lista. f. Luego simplemente ponemos la cadena mensaje dentro de la etiqueta. 12. Ejecuta el programa y observa su funcionamiento. Por ejemplo, si seleccionas el color verde y pulsas aceptar el resultado será el siguiente:

13. Vamos a mejorar el programa. Puede suceder que el usuario no seleccione ningún valor del cuadro de lista, y sería interesante en este caso que el programa avisara de ello. Cambie el código del botón Aceptar por este otro código: String mensaje; if (lstColores.getSelectedIndex()==-1) { mensaje="No hay un color seleccionado."; } else { mensaje="El color seleccionado es: "+lstColores.getSelectedValue().toString(); } etiResultado.setText(mensaje);

14. Observa el código: a. El método getSelectedIndex me dice el índice del elemento que está seleccionado.

b. Por ejemplo, si está seleccionado el primero el índice es 0, si está seleccionado el segundo el índice es 1, etc. c. Si este método devuelve -1, entonces es señal de que no hay ningún elemento seleccionado. d. Aprovecho esto para mostrar un mensaje indicando lo sucedido. 15. Si ejecuta el programa y pulsa el botón Aceptar sin seleccionar nada el resultado debería ser el siguiente:

16. Se podría haber prescindido del botón aceptar si el código anterior se hubiera puesto en el evento mouseClicked del cuadro de lista en vez de en el actionPerformed del botón Aceptar. En este caso, cada vez que se seleccionara un elemento de la lista, automáticamente aparecería el mensaje en la etiqueta. Se anima a que realice esta modificación.

CONCLUSIÓN El objeto JList permite crear cuadros de lista. Estos objetos contienen una serie de elementos que pueden ser seleccionados. A través del método getSelectedValue se puede obtener el elemento que está seleccionado. (Recuerda convertirlo a cadena con toString) A través del método getSelectedIndex se puede saber la posición del elemento seleccionado. Si este índice es -1, entonces sabremos que no hay ningún elemento seleccionado.

EJERCICIO GUIADO. JAVA: CUADROS COMBINADOS 1. Realiza un nuevo proyecto. 2. En la ventana principal debes añadir lo siguiente: a. Una etiqueta con borde llamada etiResultado. 3. Añade un cuadro combinado (combo). Los cuadros combinados son objetos del tipo JComboBox. Básicamente, un combo es una lista desplegable.

4. Cámbiale el nombre al JComboBox. El nombre será cboColores. Tu programa debe tener más o menos este aspecto.

5. Los elementos del cboColores pueden ser cambiados a través de la propiedad Model. Selecciona el combo y activa la propiedad Model (el botoncito con los tres puntos) Aparecerá lo siguiente:

6. Al igual que pasaba con los cuadros de lista, se pueden eliminar los elementos que contiene el combo y añadir elementos propios. Use los botones Añadir y Eliminar para añadir la siguiente lista de elementos: Rojo Verde Azul 7. Ejecuta el programa y observa el funcionamiento del desplegable...

8. Vamos a hacer que cuando se elija un elemento del desplegable, en la etiqueta aparezca un mensaje indicando el color elegido. Para ello, debes programar el evento actionPerformed del combo y añadir el siguiente código: String mensaje="El color elegido es "; mensaje=mensaje+cboColores.getSelectedItem().toString(); etiResultado.setText(mensaje);

9. Este código hace lo siguiente: a. Crea una variable de cadena. b. Concatena dentro de ella el mensaje “El color elegido es” con el color seleccionado. c. Observa el método getSelectedItem, se usa para saber el elemento seleccionado del combo. Es necesario convertirlo a texto con toString. d. Finalmente se coloca el mensaje en la etiqueta. 10. Ejecuta el programa y comprueba su funcionamiento. Por ejemplo, si elegimos el color verde, el aspecto del programa será el siguiente:

11. Los cuadros combinados pueden funcionar también como cuadros de texto. Es decir, pueden permitir que se escriba texto dentro de ellos. Para hacer esto, basta con cambiar su propiedad “editable” y activarla.

12. Ejecuta el programa y observa como se puede escribir dentro del combo. Al pulsar Enter, el programa funciona igualmente con el texto escrito.

Se escribe aquí y se pulsa enter

CONCLUSIÓN Los combos son listas desplegables donde se puede elegir una de las opciones propuestas. Los combos pueden funcionar también como cuadros de textos, si se activa la opción editable. A través del método getSelectedItem se puede extraer la opción seleccionada o el texto escrito en el combo.

EJERCICIO GUIADO. JAVA: MODELOS DE CUADRO DE LISTA 1. Realiza un nuevo proyecto. 2. En la ventana principal debes añadir lo siguiente: a. Una etiqueta con borde llamada etiResultado. 3. Añade un cuadro de lista al formulario (JList).

4. Borra todo el contenido de la lista (propiedad model) y cámbiale el nombre a la lista. La lista se llamará lstNombres. Recuerda que las listas aparecen dentro de un objeto del tipo JScrollPane.

5. Añade dos botones al formulario. Uno de ellos tendrá el texto “Curso 1” y se llamará btnCurso1 y el otro tendrá el texto “Curso 2” y se llamará btnCurso2.

6. En el evento actionPerformed del botón “Curso 1” programa lo siguiente: DefaultListModel modelo = new DefaultListModel(); modelo.addElement("Juan"); modelo.addElement("María"); modelo.addElement("Luis"); lstNombres.setModel(modelo);

7. En el evento actionPerformed del botón “Curso 2” programa lo siguiente: DefaultListModel modelo = new DefaultListModel(); modelo.addElement("Ana"); modelo.addElement("Marta"); modelo.addElement("Jose"); lstNombres.setModel(modelo);

8. Explicación de los códigos anteriores: a. Lo que hace cada botón es rellenar el cuadro de lista con una serie de nombres. En el caso del botón “Curso 1”, la lista se rellena con los nombres Juan, María y Luis, mientras que en el caso del botón “Curso 2”, la lista se rellena con los nombres Ana, Marta y Jose. b. El contenido de un cuadro de lista es lo que se denomina un “modelo”. El “modelo” es un objeto que contiene el listado de elementos de la lista. c. Los modelos de las listas son objetos del tipo DefaultListModel. d. Lo que hace el programa es crear un “modelo”. Luego rellena el “modelo” con datos, y finalmente asocia el “modelo” al cuadro de lista. Veamos como se hace todo esto.

e. Primero se crea el “modelo”, a través de la siguiente instrucción (será necesario añadir el import correspondiente, atento a la bombillita): DefaultListModel modelo = new DefaultListModel(); f.

El “modelo” tiene un método llamado addElement que permite introducir datos dentro de él. Así pues usamos este método para añadir los datos al modelo.

modelo.addElement("Ana"); modelo.addElement("Marta"); modelo.addElement("Jose"); g. Finalmente asociamos el “modelo” creado al cuadro de lista de la siguiente forma: lstNombres.setModel(modelo); h. Así pues, aquí tienes una forma de cambiar el contenido de un cuadro de lista desde el propio programa.

9. Prueba a ejecutar el programa. Observa como cuando pulsas cada botón cambia el contenido de la lista:

Click y cambia el listado.

10. Ahora añade el siguiente código al evento mouseClicked del cuadro de lista: etiResultado.setText(lstNombres.getSelectedValue().toString());

Esta instrucción hace que al seleccionar un elemento del cuadro de lista éste aparezca en la etiqueta etiResultado. Recuerda que el método getSelectedValue permite recoger el elemento seleccionado (hay que convertirlo a cadena con toString)

11. Ejecuta el programa:

Click y aparece el elemento seleccionado en la etiqueta.

12. Una propuesta. Añada un botón “Vaciar” llamado btnVaciar. Este botón vaciará el contenido de la lista. Para esto lo único que tiene que hacer es crear un modelo y, sin introducir ningún valor en él, asociarlo al cuadro de lista.

CONCLUSIÓN Un cuadro de lista es un objeto que contiene a su vez otro objeto denominado “modelo”. El objeto “modelo” es el que realmente contiene los datos de la lista. Cuadro de lista

Modelo

Datos

Se puede crear un “modelo” y luego introducir datos en él. Luego se puede asociar ese “modelo” a la lista. De esta manera se puede cambiar el contenido de la lista en cualquier momento.

EJERCICIO GUIADO. JAVA: MODELOS DE CUADRO DE LISTA 1. Realiza un nuevo proyecto. 2. En la ventana principal debes añadir lo siguiente: a. b. c. d.

Un combo llamado cboNumeros. Un botón “Pares” llamado btnPares. Un botón “Impares” llamado btnImpares. Una etiqueta con borde llamada etiResultado.

3. Elimina todos los elementos que contenga el combo. Recuerda, debes usar la propiedad “model” del combo para cambiar sus elementos. 4. Después de haber hecho todo esto, tu ventana debe quedar más o menos así:

5. En el evento actionPerformed del botón Pares, programa lo siguiente: int i; DefaultComboBoxModel modelo = new DefaultComboBoxModel(); for (i=0;i=200

Campos

Coste

Criterios

= 10-12-2007

Posterior al 10 del 12 del 2007 (incluyendo dicha fecha)

< 10-12-2007

Anterior al 10 del 12 del 2007

1000

Busca aquellas personas que tengan un nombre que termine en José y cobren más de 1000 euros.

Se pueden establecer varios criterios en una misma consulta colocándolos en filas distintas. Esto es como mostrar el resultado de varias consultas en una sola. Por ejemplo:

Campos

Nombre

Sueldo

Criterios

*José

>1000 300

Antonio

Muestra aquellas personas que tengan un nombre que termine en José y cobren más de 1000 euros. Muestra también aquellas personas que cobran 300 euros Y muestra también aquellas personas que se llamen Antonio.

NOTA. La creación de consultas en Microsoft Access es un campo amplio. Se recomienda al alumno buscar información adicional sobre el tema. En Internet podrá encontrar múltiples tutoriales de aprendizaje de Access.

CONCLUSIÓN Una consulta muestra una parte de información de toda la base de datos. Se muestran determinados campos y también aquellos registros que cumplan un criterio determinado. En Access se pueden diseñar consultas y almacenarlas permanentemente. Access tiene una zona de consultas donde encontrará el listado de las consultas ya creadas y donde podrá crear nuevas consultas. Para crear una consulta en Access básicamente hay que seguir tres pasos: - Indicar las tablas que contienen los campos necesarios. - Indicar los campos que se quieren visualizar. - Indicar el criterio de selección de registros. Las relaciones creadas en Access y almacenadas pueden ser usadas luego desde la aplicación programada en Java, como si fueran tablas normales y corrientes.

EJERCICIO GUIADO. BASES DE DATOS. SQL

Lenguaje de Consulta SQL El lenguaje SQL (lenguaje de consulta estructurado) es un lenguaje que permite “actuar” sobre una base de datos. Con este lenguaje se pueden construir órdenes que permiten hacer lo siguiente (entre otras cosas): -

Añadir registros a las tablas. Modificar registros de las tablas. Eliminar registros de las tablas. Realizar Consultas sobre las tablas.

Gracias a este lenguaje, se construirán órdenes desde nuestra aplicación java, que se aplicarán a la base de datos, actuando sobre ella.

Las órdenes de añadir, modificar, eliminar realizan cambios dentro de la base de datos, pero no devuelven nada al programa java.

Programa Java

ÓRDENES SQL añadir, modificar, eliminar

Base de Datos

Por otro lado, cuando se da una orden de realizar una consulta, la base de datos nos devuelve el resultado de dicha consulta:

Consulta SQL Programa Java

Base de Datos Resultado de la consulta

Gracias a este lenguaje, nuestra aplicación tiene dominio total sobre la base de datos. Puede actuar sobre ella introduciendo nuevos datos, o modificando los que había, o eliminándolos. También puede extraer información de ella accediendo a las consultas de la base de datos o realizando nuevas consultas. A continuación se comentarán las reglas básicas de este lenguaje.

Creación de consultas en SQL

Se empezará estudiando como realizar consultas sobre una base de datos usando el lenguaje SQL (más adelante se verá como realizar consultas de acción: añadir, modificar eliminar)

Código base en SQL para realizar consultas Para consultar una base de datos usará un código general como el que sigue: SELECT campos a visualizar FROM tablas donde se encuentran dichos campos WHERE condiciones que deben cumplir los registros ORDER BY forma de ordenar la consulta; Como puede ver, una consulta en SQL tiene cuatro partes (SELECT, FROM, WHERE y ORDER BY) de las cuales solo las dos primeras son obligatorias. Se debe mantener el orden indicado. Es decir, primero SELECT, luego FROM, luego WHERE y luego ORDER BY. Este código debe terminar siempre con punto y coma ; A continuación se verán ejemplos de uso de este código general.

Visualizar una tabla entera (todos los campos y todos los registros) Ejemplo: “Visualizar la tabla Clientes” SELECT * FROM clientes; Observa, el * significa ver todos los campos. En el FROM se indica la tabla que se quiere ver. Observa como hay que terminar con un ;

Visualizar algunos campos de una tabla (algunos campos y todos los registros) Ejemplo: “Visualizar CIF, nombre y Direccion de todos los clientes” SELECT clientes.CIF, clientes.nombre, clientes.direccion FROM clientes;

Observa como se indican los campos a visualizar en la cláusula SELECT. Se indica la tabla y luego el nombre del campo, separados por un punto.

Visualizar solo aquellos registros de la tabla que cumplan una condición Ejemplo: “Visualizar todos los campos de aquellos trabajadores que cobren un sueldo superior a los 1000 euros” SELECT * FROM trabajadores WHERE trabajadores.sueldo > 1000;

Observa el uso de la cláusula WHERE para aplicar una condición al resultado.

Ejemplo: “Visualizar el nombre, apellido y sueldo de aquellos trabajadores que cobren un sueldo entre 800 y 2000 euros” SELECT trabajadores.nombre, trabajadores.apellidos, trabajadores.sueldo FROM trabajadores WHERE trabajadores.sueldo BETWEEN 800 AND 2000;

Observa el uso de BETWEEN – AND para indicar que el sueldo esté entre 800 y 2000 Nota. Más adelante en este ejercicio guiado se muestran las distintas posibilidades que tenemos a la hora de indicar criterios en la cláusula WHERE

Visualizar el contenido de una tabla ordenado Ejemplo: “Visualizar la tabla de trabajadores ordenada por sueldo de menor a mayor” SELECT * FROM trabajadores ORDER BY trabajadores.sueldo ASC;

Observa el uso de la cláusula ORDER BY para indicar que se ordene por sueldo. La palabra ASC indica “ascendente” (de menor a mayor)

Ejemplo: “Visualizar nombre, apellidos y sueldo de los trabajadores ordenados por sueldos de mayor a menor” SELECT trabajadores.nombre, trabajadores.apellidos, trabajadores.sueldo FROM trabajadores ORDER BY trabajadores.sueldo DESC;

Observa el uso de DESC para indicar una ordenación descendente.

Ejemplo: “Visualizar nombre, apellidos y sueldo de los trabajadores que cobren más de 1000 euros, ordenados por apellidos y nombre” SELECT trabajadores.nombre, trabajadores.apellidos, trabajadores.sueldo FROM trabajadores WHERE trabajadores.sueldo > 1000 ORDER BY trabajadores.apellidos ASC, trabajadores.nombre ASC;

Observa aquí como ordenar por dos campos, primero por apellidos y luego por nombre. Esto significa que aquellos trabajadores que tengan el mismo apellido serán ordenados por nombre.

Visualizar datos de varias tablas Ejemplo: “Visualizar todos los servicios. Interesa que aparezca el nombre del trabajador que hizo el servicio, la fecha del servicio realizado y el tipo de servicio” SELECT trabajadores.nombre, servicios.fecha, servicios.tipo FROM trabajadores, servicios WHERE trabajadores.DNI=servicios.DNI;

Observa aquí como se indica en la cláusula FROM las dos tablas de las que extraemos datos. Es importante que te fijes también en como se unen ambas tablas igualando en la cláusula WHERE el campo de unión de ambas tablas, que en el ejemplo es el DNI.

Ejemplo: “Visualizar todos los servicios. Interesa que aparezca el nombre del trabajador que hizo el servicio, el tipo de servicio y el nombre del cliente al que se le hizo el servicio” SELECT trabajadores.nombre, servicios.tipo, clientes.nombre FROM trabajadores, servicios, clientes WHERE trabajadores.DNI=servicios.DNI AND clientes.CIF=servicios.CIF;

Observa aquí una consulta sobre tres tablas, las cuales aparecen en el FROM. Es necesario indicar en la cláusula WHERE los campos de unión. La tabla Trabajadores se relaciona con la tabla Servicios a través del campo DNI, y la tabla Trabajadores se relaciona con Clientes a través del campo CIF. Observa el uso de AND para unir varias condiciones.

Ejemplo: “Visualizar los servicios que hayan costado más de 200 euros. Interesa ver la fecha del servicio, el nombre del cliente y el coste ordenado por cantidad” SELECT servicios.fecha, clientes.nombre, servicios.cantidad FROM servicios, clientes WHERE servicios.CIF=clientes.CIF AND servicios.cantidad>200 ORDER BY servicios.cantidad;

Observa como la cláusula WHERE contiene por un lado la condición de unión de ambas tablas y por otro lado la condición que se busca (cantidad > 200)

FORMA DE INDICAR CRITERIOS EN LA CLÁUSULA WHERE Se van a indicar a continuación una serie de reglas que se deben seguir a la hora de crear condiciones en la cláusula WHERE de una consulta SQL Operadores Relacionales Operador =

Significa… Igual que

Ejemplos WHERE cantidad = 200 WHERE tipo = ‘Limpieza’ WHERE fecha = #8-5-2006#

>

Mayor que (para números)

WHERE cantidad > 200 WHERE fecha > #8-5-2006#

Posterior a (para fechas) >=

Mayor o igual que (para números)

WHERE cantidad >= 200 WHERE fecha >= #8-5-2006#

Esa fecha o posterior (para fechas)
200.12 Valores de texto Los valores de texto se indican rodeándolos entre comillas simples: ‘ Ejemplos: WHERE nombre = ‘Jose’

WHERE dirección LIKE ‘*avenida*’

Valores de fecha Las fechas se indican rodeándolas entre almohadillas #. Se debe tener en cuenta que las fechas deben indicarse separadas por guiones – o barras / y que su formato debe ser el siguiente: Mes – Dia – Año

Ejemplos: WHERE fecha > #02-01-2005# (Significa que la fecha debe ser posterior al 1 de febrero de 2005) WHERE fecha #10-12-2006# (Significa que la fecha debe ser distinta del 12 de Octubre de 2006) Forma de indicar los campos Normalmente los campos que se usan en el WHERE (y en otras cláusulas) se indican de la siguiente forma: Tabla.Campo Por ejemplo, WHERE trabajadores.sueldo > 1000 (Sueldo es un campo de la tabla trabajadores) Si tenemos la seguridad de que no existe otro campo de otra tabla que se llame igual, entonces podemos prescindir del nombre de la tabla. Por ejemplo, WHERE sueldo > 1000 (No existe otro campo sueldo en otras tablas de la consulta) En el caso de que el nombre del campo contenga espacios, entonces tendremos que rodear el campo con corchetes. Por ejemplo, WHERE [sueldo del trabajador] > 1000 (El campo se llama sueldo del trabajador)

EJERCICIO GUIADO Nº 1 ACCESS permite la creación de consultas usando SQL. Esto nos permitirá practicar con el lenguaje SQL antes de que se aplique posteriormente en nuestras aplicaciones Java. En este ejercicio guiado se explicará como crear una consulta usando el lenguaje SQL en Access. 1. Entre en Mis Documentos. Allí verá la base de datos MANEMPSA. Ábrala. 2. Active la opción de Consultas para acceder al listado de consultas de la base de datos.

3. Vamos a crear una nueva consulta, por lo que tendrá que activar la opción Crear una consulta en vista Diseño:

4. En el cuadro de elección de tablas no agregaremos ninguna. Así pues pulsaremos directamente el botón Cerrar.

5. El resultado es que aparece la ventana de diseño de consultas. En la parte superior izquierda de esa ventana podrás ver un botón con el texto SQL. Este botón nos permitirá crear la consulta usando el lenguaje SQL. Púlsalo.

6. Aparecerá una pantalla casi en blanco donde escribirá la consulta SQL. Observe que ya aparece la cláusula SELECT escrita:

7. Para empezar mostraremos el contenido de la tabla Trabajadores. Para ello, debe escribir la siguiente consulta SQL: SELECT * FROM trabajadores;

8. Para ver el resultado de esta consulta debe pulsar el botón Vista que se encuentra en la parte superior izquierda de la ventana:

9. El resultado es que verá el contenido de la tabla Trabajadores:

10. Acaba de crear una consulta dentro de Access usando el lenguaje SQL. Para modificar de nuevo la consulta SQL tendrá que desplegar el botón Vista y activar de nuevo la opción SQL:

11. De esta manera entrará de nuevo en el editor de consultas SQL de Access, donde aún permanecerá la consulta creada:

12. Ahora modificaremos la consulta para que solo nos muestre los campos nombre, apellidos, sueldo y fecha. Para ello tendrá que escribir la siguiente consulta: SELECT trabajadores.nombre, trabajadores.apellidos, trabajadores.sueldo, trabajadores.fecha FROM trabajadores;

13. Usa el botón Vista para ver el resultado de la consulta. Observa como ahora solo vemos los campos indicados:

14. Vuelve a la zona de edición de consultas SQL y cambia la consulta para que quede así: SELECT trabajadores.nombre, trabajadores.apellidos, trabajadores.sueldo, trabajadores.fecha FROM trabajadores WHERE trabajadores.apellidos LIKE '*ez';

Como ves, hemos añadido una cláusula where, para buscar solo aquellos trabajadores cuyo apellido termine en ez.

15. Comprueba el resultado:

16. Vuelve a la zona de edición SQL. Vamos a complicar un poco la consulta. Supongamos que queremos ver los servicios que han realizado cada uno de estos trabajadores. Para ello tendremos que incluir a la tabla servicios en la consulta. Supongamos que queremos ver el tipo de servicio realizado y el coste de cada servicio. Por otro lado, de cada trabajador solo queremos ver el nombre y los apellidos. Hay que tener en cuenta que es necesario añadir en el WHERE una condición que iguale el campo de unión entre la tabla trabajadores y la tabla servicios. Este campo de unión es el DNI. La consulta debe quedar así: SELECT trabajadores.nombre, trabajadores.apellidos, servicios.tipo, servicios.cantidad FROM trabajadores, servicios WHERE trabajadores.apellidos LIKE '*ez' AND trabajadores.DNI=servicios.DNI;

(Observa la inclusión en el FROM de la tabla servicios, y como se ha añadido una condición de unión entre la tabla trabajadores y servicios a través del campo DNI)

17. Visualiza el resultado de la consulta (botón Vista) Aparecerá lo siguiente:

Como ves, aparecen todos los servicios y el nombre y apellidos del trabajador que hizo cada uno. Solo aparecen los servicios de los trabajadores cuyo apellido termine en ‘ez’.

18. Vuelve a la vista de edición SQL. Vamos a complicar aún más la consulta. Esta vez vamos a hacer que aparezca el nombre del cliente al que se le hizo el servicio. Esto implica la inclusión de una nueva tabla (clientes) y la necesidad de relacionar la tabla servicios con la tabla clientes según el modelo E-R de esta base de datos. El campo de unión es el CIF.

Modifica la consulta para que quede de la siguiente forma: SELECT trabajadores.nombre, trabajadores.apellidos, servicios.tipo, servicios.cantidad, clientes.nombre FROM trabajadores, servicios, clientes WHERE trabajadores.apellidos LIKE '*ez' AND trabajadores.DNI=servicios.DNI AND servicios.CIF=clientes.CIF;

(Observa la inclusión de la tabla clientes en la cláusula FROM, y la adición de una nueva condición de unión, entre la tabla servicios y la tabla clientes en la cláusula WHERE. Esta condición de unión une ambas tablas usando el campo CIF)

19. Veamos el resultado de la consulta:

Como se puede observar, aparece el listado de los servicios realizados por los trabajadores cuyo apellido termine en ‘ez’. Aparece información incluida en tres tablas distintas: trabajadores, servicios y clientes.

20. Vuelve a la zona de diseño SQL. Añadiremos una última modificación a la consulta y la finalizaremos. Ahora estableceremos un orden. Concretamente, ordenaremos el resultado de la consulta según apellidos del trabajador. Para ello tendremos que añadir una cláusula ORDER BY: SELECT trabajadores.nombre, trabajadores.apellidos, servicios.tipo, servicios.cantidad, clientes.nombre FROM trabajadores, servicios, clientes WHERE trabajadores.apellidos LIKE '*ez' AND trabajadores.DNI=servicios.DNI AND servicios.CIF=clientes.CIF ORDER BY trabajadores.apellidos ASC;

21. Ejecuta la consulta y observa el resultado. Ahora el listado de servicios aparece ordenado según el apellido del trabajador que lo realiza, alfabéticamente.

22. Hemos finalizado con la consulta. Ciérrela y guárdela. Puede ponerle de nombre Servicios realizados por trabajadores ez.

23. Este ha sido un ejemplo de consulta realizada en Access usando el lenguaje de consulta SQL. Este lenguaje será vital para hacer que nuestra aplicación java manipule la base de datos correspondiente.

NOTA. En Internet se pueden encontrar múltiples manuales sobre SQL. Se recomienda buscar información sobre el tema para ampliar los conocimientos aquí expuestos.

La sintaxis del lenguaje SQL puede variar según el programa de base de datos que se use. En este ejercicio guiado se ha usado la sintaxis del SQL incluido en el programa Access. Tenga en cuenta que puede haber variaciones entre este SQL y el incluido en otro gestor de base de datos, aunque estas variaciones son mínimas.

CONCLUSIÓN El lenguaje de consulta SQL permite manipular la base de datos. A través de este lenguaje, se pueden crear órdenes que permitan: - Introducir nuevos datos en la base de datos. - Eliminar datos de la base de datos. - Modificar datos de la base de datos. - Realizar consultas sobre la base de datos. Para realizar consultas en la base de datos usando el lenguaje SQL es necesario usar instrucciones SELECT, las cuales tienen la siguiente forma general: SELECT campos a visualizar FROM tablas a las que pertenecen dichos campos WHERE condiciones a cumplir, condiciones de unión de tablas ORDER BY campos por los que se ordena El programa ACCESS permite crear consultas usando el lenguaje SQL, por lo que puede ser una buena herramienta para practicar este lenguaje. Nuestro programa de bases de datos java, usará este lenguaje para manipular la base de datos correspondiente.

EJERCICIO GUIADO. BASES DE DATOS. SQL

Acciones en SQL En la hoja guiada anterior se ha visto como se pueden crear instrucciones usando el lenguaje SQL para consultar una base de datos, y, de esta forma, extraer información de ella. Pero el lenguaje SQL no se queda simplemente ahí, sino que proporciona instrucciones que pueden realizar acciones sobre la base de datos. Estas acciones son (entre otras): -

Añadir nuevos registros a una tabla. Eliminar registros de una tabla. Modificar datos de una tabla.

Programa Java

ÓRDENES SQL añadir, modificar, eliminar

Base de Datos

En esta hoja guiada veremos como ejecutar instrucciones SQL que permitan añadir, eliminar o modificar registros de las tablas de la base de datos.

Alta de registros en SQL Se empezará estudiando como añadir nuevos registros en una base de datos usado el lenguaje SQL. Código base en SQL para añadir nuevos registros Para añadir un registro en una tabla se usa la siguiente sintaxis: INSERT INTO tabla VALUES (valor1, valor2, valor3, ..., valor n); En la cláusula INSERT INTO se indica la tabla que en la que se quiere introducir una nueva fila (registro), y en la cláusula VALUES se indican los valores de la fila que se quiere insertar. Estos valores tienen que estar indicados en el orden en el que están definidos los campos en la tabla correspondiente. Por ejemplo: INSERT INTO trabajadores VALUES (’30.234.234-A’, ‘María’, ‘ López’, 1250.45, #01/02/2006# ‘4455-RSD’);

En esta instrucción se está introduciendo un nuevo trabajador en la tabla trabajadores. Concretamente se está introduciendo un trabajador con las siguientes características: DNI: 30.234.234-A Nombre: María Apellidos: López Sueldo: 1250,45 Fecha de entrada: 02/01/2006 Matrícula: 4455-RSD Los valores están indicados en el mismo orden en el que están los campos en la tabla: DNI, Nombre, Apellidos, Sueldo, Fecha, Matrícula. Si se quiere introducir un nuevo registro, pero indicando solo los valores de algunos campos, se puede usar entonces esta otra sintaxis para la instrucción INSERT INTO: INSERT INTO tabla (campo a, campo b, campo c) VALUES (valor del campo a, valor del campo b, valor del campo c); En este caso solo se introducen los valores correspondientes a tres campos, el resto de los campos del registro se quedarán vacíos. Por ejemplo: INSERT INTO trabajadores (DNI, Apellidos, Sueldo) VALUES (’30.234.234-A’, ‘ López’, 1250.45); En este caso introducimos a un trabajador de apellido López, con DNI 30.234.234-A que cobra 1250,45 euros. Tanto la matrícula de su coche como su nombre y la fecha quedan en blanco.

Formato de los valores. Recuerda que debes seguir ciertas reglas para introducir valores: Las cadenas se escriben entre comillas simples. Por ejemplo: ‘López’ Se usa el punto decimal en los números reales: Por ejemplo: 1250.45 Las fechas se indicarán entre almohadillas # y hay que indicar primero el mes, luego el día y finalmente el año. Por ejemplo: #12-20-2007# es 20 de diciembre de 2007. En el caso de querer especificar explícitamente que un campo esté vacío, se puede indicar el valor NULL. Ejemplo: INSERT INTO trabajadores (DNI, Apellidos, Sueldo) VALUES (’30.234.234-A’, NULL, 1250.45); Los apellidos del trabajador están vacíos en este ejemplo.

EJERCICIO GUIADO Nº 1

1. Entra en la base de datos MANEMPSA de la carpeta Mis Documentos. 2. Crearemos una consulta SQL para añadir registros a la tabla trabajadores. Para ello, accede a la zona de consultas.

3. Crea una consulta en vista Diseño y no agregues ninguna tabla. Simplemente pulsa el botón Cerrar.

4. Pulsa el botón SQL que se encuentra en la parte superior izquierda de la ventana para crear una consulta SQL.

5. Aparecerá entonces el editor de consultas SQL. En él, escribe la siguiente instrucción SQL: INSERT INTO trabajadores VALUES ('33.444.333-B','Antonio','Romero',1300.5,#01/02/2006#,NULL);

Verás que lo que se pretende es introducir un nuevo trabajador. Este trabajador tendrá los siguientes datos: DNI: 33.444.333-B Nombre: Antonio Apellidos: Romero Sueldo 1300,5 Fecha de entrada: 2-1-2006 (Observa como en la cláusula VALUES se indica la fecha en formato mes-dia-año) Matrícula de su coche: No se indica (NULL)

6. Este tipo de consulta es de acción. Esto significa que no debe mostrar nada, simplemente ejecuta una acción sobre la base de datos (en este caso, añadir un registro nuevo en la tabla trabajadores) Para ejecutar esta consulta de acción activa el botón Ejecutar:

7. Access avisará de que vas a añadir un nuevo registro, y te pide confirmación. Acepta la acción:

8. Se acaba de ejecutar la consulta. Para comprobar el resultado tendremos que ver el contenido de la tabla Trabajadores y observaremos que hay un nuevo trabajador añadido. Primero cierra la consulta, pero no la guardes.

9. Accede a la zona de tablas de la base de datos.

10. Abre la tabla trabajadores. Observa el nuevo trabajador que se ha añadido:

11. Cierra la base de datos.

Modificación de registros en SQL Es posible usar el lenguaje SQL para modificar los datos de una tabla. Se puede incluso modificar los datos de aquellos registros que cumplan una condición en concreto. Código base en SQL para modificar registros Para modificar los datos de los registros de una tabla se usará el siguiente código general: UPDATE tabla a modificar SET campo1 = nuevovalor1, campo2 = nuevovalor2, …, campon = nuevovalorn WHERE condición;

En la cláusula UPDATE se indica la tabla cuyos registros se van a modificar. La cláusula SET permite indicar los cambios que se realizarán. Se debe indicar el campo que se va a cambiar y el nuevo valor que se introducirá en el campo. Como puede observar, se pueden indicar varios campos a modificar. La cláusula WHERE permite indicar una condición. Esto hará que solo se cambien los valores de aquellos registros que cumplan la condición. La cláusula WHERE es opcional, y si no se indicara se cambiarían todos los registros de la tabla. Ejemplo: UPDATE trabajadores SET sueldo = 1200, matricula=’3355-AAA’ WHERE fecha < #01/01/2004#;

En este ejemplo se les asigna un sueldo de 1200 euros y el coche con matrícula 3355-AAA a todos aquellos trabajadores que hayan entrado en la empresa antes del 1-1-2004. Ejemplo: UPDATE trabajadores SET sueldo = 1300;

En este ejemplo, se les asigna a todos los trabajadores un sueldo de 1300 euros ya que no se ha indicado cláusula WHERE.

Si se quisiera hacer un cambio puntual a un registro en concreto, tendremos que hacer uso de su campo clave para indicar la condición. Recuerda que el campo clave es el que identifica de forma única a un registro de la tabla. Por ejemplo: UPDATE trabajadores SET sueldo = 1300 WHERE DNI=’33.444.333-A’;

En este ejemplo se estoy asignando un sueldo de 1300 al trabajador con DNI 33.444.333-A, y a ningún otro (ya que se supone que no habrá otro con dicho DNI)

EJERCICIO GUIADO Nº2 1. Entra en la base de datos MANEMPSA. 2. Accede a la zona de consultas y crea una consulta en vista diseño. 3. No agregues ninguna tabla y pulsa directamente el botón Cerrar. 4. Pulsa el botón SQL para entrar en la zona de edición de consulta SQL.

5. Escribe la siguiente instrucción SQL: UPDATE trabajadores SET sueldo = 800, matricula=’1111-AAA’ WHERE DNI=’33.444.333-B’;

Como puedes observar, en esta instrucción SQL vamos a asignarle un sueldo de 800 euros y el coche con matricula 1111-AAA al trabajador con DNI 33.444.333-B, que es precisamente el trabajador que añadimos en el ejercicio guiado anterior. 6. Ejecuta esta consulta de acción pulsando el botón Ejecutar: 7. Access avisará de que va a actualizar una fila en la tabla trabajadores y pedirá confirmación para hacerlo. Acepte la confirmación. 8. El resultado de esta instrucción SQL de acción es que se habrán modificado los datos del trabajador con DNI 33.444.333-B. Para comprobarlo accederemos a la tabla trabajadores y observaremos su contenido. 9. Cierre la consulta que está realizando (no hace falta que la guarde) 10. Acceda a la zona de tablas de la base de datos y entre en la tabla trabajadores, observe su contenido. El trabajador con DNI 33.444.333-B habrá cambiado:

11. Cierra la base de datos.

Eliminación de registros en SQL Al igual que podemos añadir nuevos registros (filas) a las tablas usando SQL, también podemos usar este lenguaje para eliminar registros de las tablas. Código base en SQL para eliminar registros Para eliminar registros de una tabla se usará el siguiente código general:

DELETE FROM tabla de la que se quiere eliminar WHERE condición de los registros que se eliminarán; En la cláusula DELETE FROM se indica la tabla de la que eliminaremos registros. En la cláusula WHERE se indica la condición que deben cumplir los registros que eliminaremos. Por ejemplo:

DELETE FROM trabajadores WHERE sueldo>1000; En este ejemplo se están eliminando de la tabla trabajadores aquellos trabajadores cuyo sueldo sea superior a 1000. Si se quiere eliminar un solo registro de la tabla, será necesario hacer referencia a su campo clave. Recuerda que el campo clave es el que identifica de forma única a cada registro. Por ejemplo, si queremos eliminar un trabajador en concreto, indicaremos su DNI en la condición:

DELETE FROM trabajadores WHERE DNI=’33.444.555-A’; Esta instrucción SQL borra al trabajador con DNI 33.444.555-A (solamente a él, ya que se supone que no habrá otro trabajador que tenga ese mismo DNI) En la cláusula WHERE de una instrucción DELETE, las condiciones se indican tal como se vio en la hoja anterior para las instrucciones SELECT. Si se quiere eliminar todo el contenido de una tabla, se puede usar una instrucción DELETE sin indicar ninguna condición. Por ejemplo:

DELETE FROM trabajadores; Esta instrucción eliminaría todos los registros de la tabla trabajadores.

EJERCICIO GUIADO Nº 3

11. Entra en la base de datos MANEMPSA. 12. Accede a la zona de consultas y crea una consulta en vista diseño. 13. No agregues ninguna tabla y pulsa directamente el botón Cerrar. 14. Pulsa el botón SQL para entrar en la zona de edición de consulta SQL.

15. Escribe la siguiente instrucción SQL: DELETE FROM trabajadores WHERE DNI = '33.444.333-B';

Como puedes observar, esta instrucción eliminará al trabajador con DNI 33.444.333B, que es precisamente el trabajador que se añadió en el ejercicio guiado 1.

16. Ejecuta esta instrucción de acción activando el botón Ejecutar:

17. Access avisará de que va a eliminar una fila de la tabla trabajadores, y pedirá confirmación. Confirme la eliminación. 18. Para comprobar el ejemplo tendrá que acceder a la tabla trabajadores y comprobar que el trabajador con DNI 33.444.333-B ya no está. Para ello cierre la consulta (no hace falta que la guarde) y acceda a la zona de tablas. 19. Abra la tabla trabajadores. Observe como el trabajador ha desaparecido:

20. Cierre Access.

CONCLUSIÓN El lenguaje de consulta SQL no solo permite extraer información de una base de datos, sino que también permite realizar acciones sobre la base de datos: - Introducir nuevos datos en la base de datos. - Eliminar datos de la base de datos. - Modificar datos de la base de datos. Para introducir nuevos datos en la base de datos usará la instrucción SQL llamada INSERT INTO Para eliminar datos de la base de datos usará la instrucción SQL llamada DELETE Para modificar datos de la base de datos usará la instrucción SQL llamada UPDATE

EJERCICIO GUIADO. JAVA. ACCESO A BASE DE DATOS

Acceso a Base de Datos desde una aplicación Java El objetivo de todas las hojas guiadas anteriores dedicadas a las bases de datos, es finalmente aprender a crear un fichero que contenga toda la información que la empresa necesita gestionar. Es decir, crear un fichero de base de datos. Este fichero se incluirá con el programa java que se realice. Nuestro programa java accederá a este fichero continuamente para añadir nuevos datos, o modificar datos, eliminar datos, o extraer datos según lo ordene el usuario del programa. En esta hoja guiada, se verán los pasos necesarios para conectar un proyecto java con un fichero de base de datos creado en Access.

Pasos Generales para preparar una Aplicación Java para acceder a una Base de Datos Para preparar nuestra aplicación Java para que pueda acceder a una Base de Datos, es necesario realizar tres pasos: 1. Cargar el controlador de la base de datos. El controlador define el tipo de base de datos que se va a usar (base de datos de Access, o de MySQL, o de cualquier otro gestor de base de datos) En nuestro caso, tendremos que indicar el controlador para base de datos de Access. 2. Crear un objeto conexión (Connection) Para crear este objeto hay que indicar la situación del fichero de base de datos, el usuario y la contraseña de dicha base de datos. El objeto conexión abre el fichero de la base de datos. 3. Crear un objeto sentencia (Statement) El objeto sentencia se crea a partir del objeto conexión anterior. Los objetos sentencia permiten realizar acciones sobre la base de datos usando instrucciones SQL. Es decir, a través del objeto sentencia introduciremos datos en la base de datos, eliminaremos datos, haremos modificaciones, y extraeremos datos de la base de datos. Así pues, este objeto es vital. Este objeto es el que realmente permite el acceso a los datos de la base de datos y la manipulación de dicha base de datos.

EJERCICIO GUIADO Nº 1 PLANTEAMIENTO En este ejercicio se pretende crear una pequeña aplicación de bases de datos que permita simplemente mostrar los datos de los trabajadores almacenados en la base de datos MANEMPSA.

1. Entre en NetBeans. Crea un nuevo proyecto llamado AccesoBD. Dentro de este proyecto crea un paquete principal llamado paqueteprincipal y dentro de él un JFrame llamado ventanaprincipal:

2. En la parte superior de la ventana añade un botón con el texto Ver Datos Trabajadores que se llame btnVerDatos.

3. Se pretende simplemente que al pulsar el botón btnVerDatos aparezcan en un JOptionPane datos sobre los trabajadores almacenados en la base de datos.

SITUACIÓN DEL FICHERO DE BASE DE DATOS 4. Antes de empezar con la programación de nuestra aplicación, introduciremos el fichero de base de datos en la carpeta del proyecto java que estamos haciendo. Para ello, accede a la carpeta del proyecto AccesoBD. Esta carpeta se encontrará allá donde estés guardando tus proyectos:

5. Entra dentro de esta carpeta y observarás una serie de carpetas creadas por el propio NetBeans. (Entre ellas, la más interesante es la llamada src, la cual es la que contiene los ficheros con el código java)

6. Para tener todo bien organizado, crearemos una carpeta llamada Base dentro de la carpeta de proyecto, de manera que su contenido quede así:

7. Ahora lo único que tiene que hacer es copiar el fichero de base de datos MANEMPSA.MDB que se encuentra en Mis Documentos dentro de la carpeta Base. (La extensión de los ficheros de base de datos de Access es MDB)

8. De esta manera, tenemos el fichero de base de datos que hemos creado con Access guardado dentro de la misma carpeta de proyecto java que usará dicha base de datos. Se recomienda que esto lo haga cada vez que programe una aplicación de bases de datos Java. 9. Ahora ya podemos volver al NetBeans y continuar con nuestro trabajo.

PREPARACIÓN DE LA APLICACIÓN JAVA PARA EL ACCESO A LA BASE DE DATOS 10. Para poder acceder y manipular una base de datos, es necesario tener dos objetos: -

Un objeto del tipo Connection, al que llamaremos conexion. Este objeto define la conexión con la base de datos.

-

Un objeto del tipo Statement, al que llamaremos sentencia. Este objeto permite manipular la base de datos.

11. Así pues, lo primero que haremos será definir estos objetos como globales en la clase de la ventana principal, para así poderlos usar desde cualquier lado:

Aparecerán subrayados ya que será necesario indicar el import para las clases Connection y Statement. Estos import son respectivamente: java.sql.Connection y java.sql.Statement Agrega los import correspondientes para eliminar los errores. 12. Una vez definidos los objetos conexión y sentencia, necesarios para el acceso a la base de datos, prepararemos nuestro programa para que pueda acceder a la base de datos MANEMPSA.MDB. Esto se hará en el constructor. 13. En primer lugar, añade al constructor una llamada a una función PrepararBaseDatos:

14. Crea el método PrepararBaseDatos debajo del constructor y empieza a programar lo siguiente:

El código que acabas de programar es el primer paso a realizar para el acceso a una base de datos: La Carga del Controlador. Recuerda que el controlador le indica a Java que tipo de base de datos usaremos: Access, MySQL, etc… El controlador que le indica al java que usaremos una base de datos de Access viene definido a través de la siguiente cadena de texto: sun.jdbc.odbc.JdbcOdbcDriver

Y la forma de activar dicho controlador es a través de la instrucción: Class.forName(controlador).newInstance(); Donde controlador es una variable de cadena que contiene la cadena anterior.

Básicamente, lo que hacen estas dos líneas de código, es preparar a Java para poder usar Access. En el caso de que se quisiera usar una base de datos realizada en otro programa que no fuera Access, habría que cambiar la cadena de texto correspondiente a su controlador. Por ejemplo, para usar una base de datos creada con el gestor de base de datos MySQL se usa la cadena: com.mysql.jdbc.Driver. En nuestro caso siempre usaremos Access. También puedes observar que es obligatorio encerrar el código de la carga del controlador entre try … catch para capturar cualquier error imprevisto.

15. Ahora añade el siguiente código a continuación del anterior:

El código que acabas de añadir se corresponde con el segundo paso para acceder a una base de datos: Crear el objeto Conexión. El objeto conexión es el que efectúa la conexión real con la base de datos. Se podría decir que es el objeto que permite abrir la puerta del fichero de base de datos para entrar en él. Para construir este objeto conexión (el cual ya está declarado en la parte global de la clase) hacen falta tres datos: •

El nombre del usuario que manipulará la base de datos. En el caso de Access no necesitamos indicar ningún nombre de usuario, por eso verás la instrucción:

String user = “”; •

El password del usuario que manipulará la base de datos. En el caso de Access tampoco necesitaremos ningún password, por eso verás la instrucción:

String password = “”; •

La DSN de la base de datos. DSN significa “nombre del origen de datos” y es una cadena de texto algo compleja que contiene información sobre el fichero de base de datos que queremos usar. La parte inicial de la cadena de la DSN siempre será igual para las bases de datos de Access: "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ="

Sin embargo, lo que nos interesa realmente de esta cadena es su parte final, donde hay que indicar el camino del fichero de base de datos al que accederemos. En nuestro caso, indicaremos el camino de MANEMPSA.MDB, el fichero de la base de datos. Observa como indicamos el camino del fichero: Base\\MANEMPSA.MDB Base es la carpeta donde hemos guardado el fichero, dentro de nuestro proyecto java, y MANEMPSA.MDB como ya sabes es el fichero de Access que contiene la base de datos. Observa la necesidad de escribir dos barras. En el código podrás ver la creación de la DSN: String DSN = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ="+ "Base\\MANEMPSA.MDB"; Finalmente se usa la instrucción conexion=DriverManager.getConnection(DSN,user,password); para crear la conexión. Será necesario añadir un import para la clase DriverManager. Al igual que con el primer paso, es necesario rodear la creación de la conexión con un try…catch para capturar cualquier error inesperado que se pueda producir en este paso.

16. Ahora añade el siguiente código a continuación del anterior:

Este código que acabas de añadir se corresponde con el tercer paso necesario para poder acceder a una base de datos: Creación del objeto Sentencia. El objeto sentencia será el que nos permita ejecutar órdenes SQL sobre la base de datos. Es decir, el objeto que nos permite actuar y manipular la base de datos. Este objeto es vital, y es el objetivo de toda esta preparación. El objeto sentencia se crea a partir del objeto conexión creado en el paso anterior, usando la siguiente instrucción: sentencia=conexion.createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);

Y como sucedió en los dos pasos anteriores, es necesario rodear esta instrucción con un try…catch para capturar cualquier tipo de error inesperado que se pudiera producir.

17. Así pues ya tenemos preparado nuestro programa para acceder a la base de datos. Esta preparación se realiza en el momento en que se ejecuta el programa, ya que hemos introducido este código en el constructor. Es cierto que este código puede resultar bastante abstracto y complejo, pero tiene la gran ventaja de que siempre es igual. Para nuestros ejercicios, solo tendremos que cambiar el nombre de la base de datos que se esté usando en ese momento. El resto del código queda igual. Observa:

El método PrepararBaseDatos siempre será igual, solo cambiará el nombre de la base de datos a usar.

18. El objetivo de todo este código de preparación para el acceso al fichero de la base de datos es obtener un objeto llamado sentencia que nos posibilitará la manipulación de los datos de la base de datos, usando órdenes SQL. En este ejercicio guiado usaremos el objeto sentencia para averiguar información acerca de los trabajadores.

REALIZAR CONSULTAS SQL USANDO EL OBJETO SENTENCIA

19. Cuando se pulse el botón Ver Datos de Trabajadores tendremos que extraer los datos de la tabla trabajadores para poder mostrarlos. Para ello, escribe el siguiente código dentro del evento actionPerformed del botón btnVerDatos:

Observa el código: ResultSet r = sentencia.executeQuery(“select * from trabajadores order by nombre”);

El objeto sentencia se usa para dar órdenes a la base de datos. Esas órdenes se dan usando el lenguaje de consulta SQL. Se usa el método executeQuery del objeto sentencia para ejecutar la consulta SQL “select * from trabajadores order by nombre”. Esta consulta extraerá todos los datos de la tabla trabajadores ordenados por nombre. El método executeQuery recibe como parámetro una cadena representando la consulta SQL. No es necesario indicar el punto y coma final de la consulta SQL. El resultado de la consulta se guarda en un objeto del tipo ResultSet al que se ha llamado simplemente “r”. Los objetos ResultSet almacenan el resultado de una consulta SQL. (Será necesario incluir el import necesario para la clase ResultSet) Y como puedes observar, es necesario rodear la ejecución de una consulta SQL con un try…catch para capturar errores inesperados al realizar la consulta.

LOS OBJETOS RESULTSET

20. Debes imaginarte el objeto ResultSet r como una tabla que contiene el resultado de la consulta SQL que se ha ejecutado. En nuestro caso, la consulta SQL que hemos ejecutado ha extraído toda la tabla trabajadores. Por tanto nuestro ResultSet contiene toda la tabla trabajadores. El objeto r por tanto podría representarse así:

Trabajadores DNI

Nombre Apellidos Sueldo Fecha Matricula BOF 21.123.123-A Ana Ruiz 1200 02/03/2002 3322-ASR 22.333.444-C Francisco López 1000 01/06/2006 1144-BBB 12.321.567-B Juan Pérez 1120 04/05/2002 4433-ABB EOF

21. La fila BOF significa “comienzo de fichero” y representa una fila anterior al primer registro del ResultSet. La fila EOF significa “final de fichero” y representa una fila posterior al último registro del ResultSet. La flecha indica la posición actual donde estamos situados dentro de la tabla del ResultSet. 22. Añade la siguiente línea al código del actionPerformed:

El método next del ResultSet hará que avancemos una fila en el ResultSet. Es decir, ahora estaremos situados en la primera fila del ResultSet (la flecha avanza una posición)

Trabajadores DNI

Nombre Apellidos Sueldo Fecha Matricula BOF 21.123.123-A Ana Ruiz 1200 02/03/2002 3322-ASR 22.333.444-C Francisco López 1000 01/06/2006 1144-BBB 12.321.567-B Juan Pérez 1120 04/05/2002 4433-ABB EOF

23. Ahora que estamos situados en la posición del primer trabajador (Ana), podemos extraer información referente a sus campos. Añade el siguiente código al actionPerformed del botón:

Lo que se ha hecho primero es declarar una variable de cadena llamada info. Luego, a esta variable se le ha asignado una concatenación de cadenas: info="El trabajador se llama "+r.getString("nombre")+" "+r.getString("apellidos")+ " y cobra "+r.getString("sueldo");

Lo interesante de esto es el método getString del objeto ResultSet r. El método getString permite extraer una cadena con el valor del campo indicado como parámetro. En nuestro caso: r.getString(“nombre”) r.getString(“apellidos”) r.getString(“sueldo”)

Extrae el nombre del trabajador actual (“Ana”) Extrae los apellidos del trabajador actual (“Ruiz”) Extrae el sueldo del trabajador actual (“1200”)

Luego se muestra la cadena info en un simple JOptionPane.

24. Ya puedes ejecutar el programa.

Pulsa el botón… Y aparecerá información sobre el primer trabajador de la base de datos

25. Sigamos haciendo cambios en el código del botón para entender mejor el funcionamiento de los ResultSet. Añade la siguiente línea:

26. Se ha añadido un segundo next. Esto producirá que la flecha avance dos posiciones en el ResultSet, y por tanto se coloque en la segunda fila:

Trabajadores DNI

Nombre Apellidos Sueldo Fecha Matricula BOF 21.123.123-A Ana Ruiz 1200 02/03/2002 3322-ASR 22.333.444-C Francisco López 1000 01/06/2006 1144-BBB 12.321.567-B Juan Pérez 1120 04/05/2002 4433-ABB EOF

27. Esto quiere decir que si se ejecuta el programa se mostrará información sobre Francisco López. Compruébalo:

28. Los objetos ResultSet poseen diversos métodos para cambiar la posición actual en la tabla del ResultSet. Dicho de otro modo: “para mover la flecha”. Veamos algunos de estos métodos (se supone que el objeto ResultSet se llama r): r.next(); r.previous(); r.first(); r.last(); r.beforeFirst() r.afterLast() r.absolute(n)

Mueve la flecha a la siguiente fila Mueve la flecha a la fila anterior Mueve la flecha a la primera fila Mueve la flecha a la última fila Mueve la flecha a la fila BOF Mueve la flecha a la fila EOF Mueve la flecha a la fila n del ResultSet. Las filas se empiezan a numerar por 1.

29. Haga el siguiente cambio en el actionPerformed simplemente para experimentar:

En este caso la flecha se coloca en EOF (afterLast) y luego retrocede una fila (previous). Por tanto, al ejecutar el programa se mostrarán los datos del último trabajador. Compruebalo.

Trabajadores DNI

Nombre Apellidos Sueldo Fecha Matricula BOF 21.123.123-A Ana Ruiz 1200 02/03/2002 3322-ASR 22.333.444-C Francisco López 1000 01/06/2006 1144-BBB 12.321.567-B Juan Pérez 1120 04/05/2002 4433-ABB EOF

30. Otro experimento. Cambie ahora el código de esta forma:

Este código coloca la flecha en la fila 2 ( absolute(2) ), luego avanza una fila (next), luego retrocede una fila (previous) y finalmente retrocede una fila (previous) Así pues, finalmente, la flecha queda colocada en la primera fila. Por lo tanto se muestran los datos del primer trabajador. Compruébalo.

Trabajadores DNI

Nombre Apellidos Sueldo Fecha Matricula BOF 21.123.123-A Ana Ruiz 1200 02/03/2002 3322-ASR 22.333.444-C Francisco López 1000 01/06/2006 1144-BBB 12.321.567-B Juan Pérez 1120 04/05/2002 4433-ABB EOF

31. Como ves, podemos movernos dentro del contenido del ResultSet gracias a todos estos métodos, para luego poder extraer los datos de la fila correspondiente. Ahora, estudiaremos la forma de recorrer todas las filas del ResultSet para así extraer la información de todos sus registros. 32. Vamos a modificar nuestro código para que se muestren todos los trabajadores del ResultSet. Para ello, realiza el siguiente cambio:

En este código se ha inicializado la variable info a la cadena vacía “” y luego se ha añadido un bucle bastante interesante: r.beforeFirst(); while (r.next()) { info=info+r.getString("nombre")+" "+r.getString("apellidos")+" "+r.getString("sueldo")+"\n"; }

Analicemos este bucle: -

Lo primero que se hace es colocar explícitamente la flecha en la fila BOF, es decir, antes del primer trabajador: r.beforeFirst();

-

Luego tenemos un bucle mientras que comienza así: while (r.next()) {

El método next intenta colocar la flecha en la siguiente fila, y si lo hace bien, devuelve el valor verdadero. Cuando no se puede avanzar más, el método next devolverá falso. Así pues, este while significa “mientras se haya podido avanzar una fila, haz lo siguiente”. O dicho de otro modo, este bucle se repetirá para cada fila de la tabla del ResultSet.

-

Si analizamos el contenido del bucle, básicamente veremos una concatenación de cadenas dentro de la variable info. En cada vuelta del bucle se concatenará el nombre, apellidos y sueldo de cada trabajador. info=info+r.getString("nombre")+" "+r.getString("apellidos")+" "+r.getString("sueldo")+"\n";

-

Finalmente se visualiza la variable info en un JOptionPane.

33. Ejecuta el programa y comprueba su funcionamiento. Al pulsar el botón… Aparecen los datos de todos los trabajadores de la base de datos.

34. El bucle que acabas de programar es un código “clásico” para manipular un ResultSet. Siempre que quieras recorrer todas las filas del ResultSet harás algo como esto: r.beforeFirst(); while (r.next()) { manipulación de la fila }

35. Se ha visto que para obtener un dato de la fila actual se usa el método getString indicando como parámetro el dato que se quiere obtener. Por ejemplo: r.getString(“sueldo”); Obtiene el sueldo del trabajador señalado actualmente con la flecha. Este sueldo se obtiene convertido en cadena.

36. Los ResultSet poseen otros métodos para obtener los datos convertidos en números como son: getInt(“campo”) y getDouble(“campo”) para obtener el dato en entero o double, respectivamente. Esto nos permite el realizar operaciones con los datos extraídos del ResultSet.

37. Como ejemplo de esto último, realice la siguiente mejora al programa:

En este nuevo código se ha añadido una variable double acumuladora llamada totalsu, donde sumaremos todos los sueldos. Dentro del bucle, se van acumulando el sueldo de cada trabajador. Observa el uso de getDouble para obtener el campo sueldo de forma numérica, en vez de usar getString: totalsu=totalsu+r.getDouble("sueldo"); Y finalmente usamos otro JOptionPane para ver la suma de los sueldos calculada. Ejecuta el programa y comprueba su funcionamiento.

38. Una vez finalizado el programa, es una buena costumbre cerrar la base de datos que estamos manejando. Esto se hace cerrando la “conexión” con la base de datos. Para hacer esto se usa el método close del objeto conexión. Esto se hará en el momento en que se finalice el programa, es decir, en el evento windowClosing de la ventana principal:

Como ves, también hay que encerrar este código entre try…catch para evitar posibles errores.

CONCLUSIÓN Para crear un programa Java que pueda usar una base de datos será necesario realizar los siguientes pasos: - Colocar el fichero de base de datos en una subcarpeta de la carpeta del proyecto java. - Preparar el acceso a la base de datos (en el constructor) * Se crearán dos objetos: conexión (Connection) y sentencia (Statement) * Se cargará el controlador del tipo de base de datos a usar * Se creará el objeto conexión indicando el fichero de la base de datos. * Se creará el objeto sentencia a partir del objeto conexión - Se usará el objeto sentencia para ejecutar consultas SQL en la base de datos. - Las consultas SQL ejecutadas en la base de datos se almacenan en objetos del tipo ResultSet

- Un objeto ResultSet tiene forma de tabla conteniendo el resultado de la consulta SQL * Los objetos ResultSet tienen métodos para seleccionar el registro de la tabla * Los objetos ResultSet tienen métodos que permiten extraer el dato de un campo en concreto.

EJERCICIO GUIADO. JAVA. ACCESO A BASE DE DATOS

Recapitulando… Para hacer una aplicación java que acceda a una base de datos se tiene que… -

Introducir la base de datos en una subcarpeta del proyecto. Preparar la base de datos desde el constructor. Usar el objeto sentencia cada vez que se quiera consultar la base de datos o actuar sobre ella. Los resultados de las consultas ejecutadas sobre la base de datos se recogerán en objetos ResultSet que contendrán los datos devueltos por la consulta. Cerrar la conexión a la base de datos cuando ya no haya que usarla más.

Consultar la Base de Datos En la hoja anterior se vio que se puede usar el objeto sentencia para ejecutar una consulta SQL en la base de datos. Al hacer esto se consigue un objeto ResultSet que contiene el resultado de la consulta. El contenido del ResultSet tiene forma de tabla, y podemos extraer la información colocándonos en la fila correspondiente del ResultSet y luego usando los métodos: getString getDouble getInt según queramos extraer el dato en forma de cadena, de número real o número entero. En esta hoja guiada se insistirá sobre la forma de manipular los datos contenidos en un ResultSet

EJERCICIO GUIADO Nº 1 PLANTEAMIENTO Se quiere realizar una pequeña aplicación de base de datos que nos muestre información sobre los servicios realizados en la empresa MANEMPSA. Para ello, siga los pasos que se indican a continuación:

1. Entre en NetBeans. Crea un nuevo proyecto llamado ServiciosBD. Dentro de este proyecto crea un paquete principal llamado paqueteprincipal y dentro de él un JFrame llamado ventanaprincipal:

2. En la parte superior de la ventana añade un botón con el texto Ver Datos Servicios que se llame btnServicios.

3. Se pretende simplemente que al pulsar el botón btnServicios aparezcan en un JOptionPane datos sobre los servicios almacenados en la base de datos.

SITUACIÓN DEL FICHERO DE BASE DE DATOS 4. Como se vio en la hoja anterior, interesa colocar el fichero de la base de datos que se va a usar en una subcarpeta de la carpeta de proyecto que se está haciendo. Así pues, entre en la carpeta de proyecto ServiciosBD

5. Y dentro de ella crea una carpeta Base. Dentro de la carpeta Base copia el fichero de base de datos MANEMPSA.MDB, el cual se encuentra dentro de la carpeta Mis Documentos.

Copia aquí dentro el fichero de base de datos MANEMPSA.MDB

6. Ahora ya podemos volver al NetBeans y continuar con nuestro trabajo.

PREPARACIÓN DE LA APLICACIÓN JAVA PARA EL ACCESO A LA BASE DE DATOS 7. Preparar nuestro proyecto para que permita el acceso a la base de datos MANEMPSA.MDB es un proceso complejo, aunque afortunadamente siempre se hace igual. Solo tiene que añadir el siguiente código a su ventana principal:

Declara los objetos globales conexión y sentencia

Haz la llamada al método PrepararBaseDatos

Recuerda que el método PrepararBaseDatos siempre será igual, solo tienes que indicar aquí el nombre de la base de datos a usar.

REALIZAR CONSULTAS SQL USANDO EL OBJETO SENTENCIA 8. Ahora que hemos preparado nuestro proyecto para poder usar la base de datos MANEMPSA.MDB, ya podemos programar el botón para visualizar los servicios. Entra dentro del actionPerformed de este botón y programa lo siguiente:

Si observas el código, lo que hace es ejecutar la consulta SQL select * from servicios order by cantidad la cual extrae todos los servicios almacenados en la tabla servicios ordenados por cantidad de menor a mayor. El resultado de esta consulta se almacena en un ResultSet y se usa un bucle típico que recorre el ResultSet y muestra el tipo de cada servicio y la cantidad: while (r.next()) { info=info+r.getString("tipo")+" "+r.getString("cantidad")+"\n"; }

Puedes ejecutar el programa para ver como funciona.

9. Aunque no es vital para el programa, añadamos el cierre de la conexión de la base de datos en el windowClosing de nuestra ventana:

EXTRAER FECHAS DEL RESULTSET 10. Se va a mejorar el programa de forma que se muestre de cada servicio el tipo, la cantidad y la fecha en que se hizo. Por tanto, haz el siguiente cambio en el código del actionPerformed del botón btnServicios:

Simplemente estamos cambiando la concatenación de la cadena info de forma que aparezca la fecha de cada servicio, el tipo y la cantidad.

11. Ejecuta el programa y observa el resultado.

Como se puede ver, las fechas aparecen en orden cambiado (año-mes-dia) Y además incluyen el formato de hora.

12. Como se ha podido observar, las fechas extraídas del ResultSet tienen un formato distinto al que usamos normalmente. Para mejorar la presentación de las fechas extraídas del ResultSet haz los siguientes cambios en el código:

El código se ha mejorado de forma que la fecha aparezca en un formato español correcto. Ejecuta el programa para comprobar el resultado:

Observa como ahora las fechas aparecen correctamente…

13. Estudiemos el código que acabamos de añadir: Lo primero que se ha hecho es crear varias variables de cadenas para contener el día, mes y año de la fecha así como la fecha completa. String String String String

cadfecha; //cadena para fechas caddia; //cadena para el dia cadmes; //cadena para el mes cadanio; //cadena para el año

Dentro del bucle extraemos la fecha del ResultSet y la almacenamos en la variable cadfecha: cadfecha=r.getString("fecha"); Ahora mismo, la variable cadfecha contendrá una cadena como la siguiente: 2

0

0

5

-

1

2

-

2

1

-

0

0

:

0

0

:

0

0

Para extraer el año de la cadena, extraemos los caracteres comprendidos entre la posición 0 y la posición 3. Esto se hace usando el método substring de la siguiente forma: cadanio=cadfecha.substring(0,4); Para extraer el mes de la cadena, tendremos que extraer los caracteres comprendidos entre la posición 5 y la posición 6. Esto se hace usando el método substring de la siguiente forma: cadmes=cadfecha.substring(5,7); Para extraer el dia de la cadena, tendremos que extraer los caracteres comprendidos entre la posición 8 y la posición 9 de la cadena. Esto se hace usando el método substring de la siguiente forma: caddia=cadfecha.substring(8,10); Una vez extraídos dia, mes y año, de la cadena, podemos concatenarlos formando una fecha en formato dia/mes/año de la siguiente forma: cadfecha=caddia+"/"+cadmes+"/"+cadanio; Así pues, finalmente tenemos una variable cadfecha que será la que se visualizará en el JOptionPane: info=info+cadfecha+" "+r.getString("tipo")+" "+ r.getString("cantidad")+"\n";

PRESENTACIÓN DE COMAS DECIMALES 14. Ahora mejoraremos el programa para que los costes de los servicios aparezcan con coma decimal, en vez de punto decimal:

Haremos que aquí aparezcan comas, en vez de puntos…

Modifica el código de la siguiente forma:

Se ha añadido una variable de cadena llamada cadcoste que almacenará el coste de cada servicio. En el código del bucle, recogemos la cantidad en dicha variable y luego usamos el método de cadena replace para reemplazar los puntos por comas: cadcoste=r.getString("cantidad"); cadcoste=cadcoste.replace(".",",");

Finalmente, mostramos la cadena de coste en la concatenación: info=info+cadfecha+" "+r.getString("tipo")+" "+cadcoste+"\n";

Ejecuta el programa y observa el resultado:

Ahora ya tenemos las comas decimales…

VALORES NULOS 15. Es posible que algún campo de algún registro de la tabla esté vacío. Es decir, que sea nulo. Si esto ocurre, entonces al extraer dicho dato de la tabla usando getString aparecerá el valor null en el JOptionPane. 16. Para comprobar esta circunstancia, agrega un nuevo botón a la ventana principal con el texto “Ver Datos de Clientes”. Llámalo por ejemplo btnClientes. 17. Al pulsar este botón aparecerá el listado de clientes de la empresa. Concretamente debe aparecer el nombre del cliente, el teléfono 1 y el teléfono 2. Para ello añade el siguiente código dentro del evento actionPerformed del botón.

Este código es prácticamente igual que el anterior. Simplemente ejecuta una consulta SQL usando el objeto sentencia que permite extraer el contenido de la tabla clientes, y luego recorre el ResultSet mostrando los campos nombre, teléfono 1 y teléfono 2 en un JOptionPane. 18. Ejecuta el programa ahora y prueba a pulsar este nuevo botón. Observa el resultado. Cada vez que un cliente no tenga un teléfono, aparecerá el valor “null” en el JOptionPane:

19. Vamos a arreglar esto de forma que aparezca el texto “no tiene” en vez de la cadena “null”. Modifique el código como se indica:

Como puedes ver, lo que se hace ahora es comprobar si el valor extraído del ResultSet es null, y en ese caso, se concatena la cadena no tiene. En caso contrario se concatena el valor del campo.

CONCLUSIÓN A través del objeto sentencia podemos ejecutar una consulta SQL en una base de datos. El resultado de la consulta se almacena en un objeto del tipo ResultSet. Al extraer el valor de un campo fecha desde el objeto ResultSet observaremos que tiene el siguiente formato: Año – Mes – Dia – Hora : Minutos : Segundos Así pues puede ser necesario realizar cambios en esta cadena. Al extraer el valor de un campo numérico real, obtendremos un número con punto decimal. Quizás sea necesario cambiar este punto por una coma decimal. Cuando un campo está vacío, al intentar extraer su valor obtendremos el valor null.

EJERCICIO GUIADO. JAVA. ACCESO A BASE DE DATOS

Recapitulando. Ejecución de consultas desde la aplicación. Para ejecutar una consulta sobre la base de datos desde tu aplicación java se tiene que ejecutar una instrucción usando el objeto sentencia de la siguiente forma: ResultSet r = sentencia.executeQuery(“consulta_sql”); La consulta_sql es una cadena que tiene forma de consulta SQL bien escrita (sin fallos). Por ejemplo: String consulta; consulta=”select * from trabajadores”; ResultSet r = sentencia.executeQuery(consulta);

En este código que se acaba de mostrar, se crea una cadena llamada consulta. Se le asigna a esta cadena una instrucción SQL para extraer todos los trabajadores, y finalmente se ejecuta dicha instrucción SQL usando el objeto sentencia. La cadena consulta puede ser construida a través de concatenaciones de cadenas. Observa atentamente este ejemplo. Es parecido al anterior pero tiene una ligera diferencia:

//Supongamos que txtTabla es un cuadro de texto String consulta; consulta=”select * from ” + txtTabla.getText(); ResultSet r = sentencia.executeQuery(consulta);

En este caso, la cadena consulta es la concatenación de… “select * from “ con lo que contenga el cuadro de texto txtTabla - es decir, txtTabla.getText()

La gran ventaja de esto, es que el usuario podrá escribir el nombre de una tabla cualquiera dentro del cuadro de texto txtTabla y al ejecutarse este código se extraerá el contenido de dicha tabla. Es decir, el usuario podrá decidir lo que quiere consultar. El usuario afecta a la construcción de la consulta SQL, y por tanto, tiene cierto control sobre esta consulta.

La construcción de consultas SQL a partir de la concatenación de cadenas y datos proporcionados por el usuario es algo muy usado en los programas de base de datos. En esta hoja guiada se insistirá en esta idea.

EJERCICIO GUIADO Nº 1 PLANTEAMIENTO Se quiere realizar una aplicación de base de datos que nos muestre información sobre los trabajadores de la empresa MANEMPSA. Esta aplicación le dará al usuario la capacidad de elegir la información que quiere extraer de la base de datos. Es decir, el usuario tendrá cierto control sobre las consultas que se realicen.

1. Entre en NetBeans. Crea un nuevo proyecto llamado TrabajadoresBD. Dentro de este proyecto crea un paquete principal llamado paqueteprincipal y dentro de él un JFrame llamado ventanaprincipal:

2. Añade a la ventana un JTextPane y un botón de momento:

El botón se llamará btnTodos y el JTextPane se llamará txtPanel.

3. Para que este programa pueda trabajar con la base de datos MANEMPSA tendrá que prepararlo haciendo lo siguiente: -

Crear la subcarpeta Base y copiar en ella el fichero de base de datos MANEMPSA.MDB que tiene en la carpeta Mis Documentos.

-

Añadir al programa los objetos conexión (Connection) y sentencia (Statement) como globales.

-

Crear el procedimiento PrepararBaseDatos y llamarlo desde el constructor.

-

Cerrar la conexión desde el evento windowClosing

Realice estos cuatro pasos que se han indicado antes de continuar. 4. Ya se puede programar el botón btnTodos. Se pretende que al pulsar este botón aparezca en el panel txtPanel el contenido de la tabla trabajadores. Para ello, programe el siguiente código dentro del actionPerformed del botón btnTodos:

Si analiza este código, verá que es igual al que hemos realizado en hojas anteriores. Básicamente lo que hace es lo siguiente: -

Ejecuta la consulta “select * from trabajadores order by sueldo”

-

Luego extrae del ResultSet los campos nombre, apellidos, sueldo y fecha.

-

Hay que indicar que al campo sueldo se le cambia el punto decimal por la coma decimal.

-

Por otro lado, la fecha se transforma para que tenga el formato dia/mes/año

-

Finalmente se muestra el resultado de la consulta en el JTextPane: txtPanel. (Antes de mostrarlo se borra todo lo que hubiera en el panel)

5. Ejecuta el programa y prueba el funcionamiento de este botón:

Al pulsar el botón, se muestran los datos de todos los trabajadores.

6. Se va a mejorar el programa. Añada un cuadro de texto llamado txtSueldo y luego tres botones llamados respectivamente btnMayor, btnMenor y btnIgual. La parte inferior de la ventana quedará así:

7. Se pretende que estos botones funcionen de la siguiente forma: -

El usuario introducirá un sueldo en el cuadro de texto txtSueldo. Luego, si pulsa el botón Igual, aparecerá en el panel todos los trabajadores que tengan un sueldo igual al introducido. En cambio, si pulsa el botón Mayor, aparecerá en el panel todos los trabajadores que tengan un sueldo mayor que el introducido. Y si pulsa el botón Menor, aparecerá en el panel todos los trabajadores que tengan un sueldo menor que el introducido.

Se empezará programando el botón Igual.

8. Programe en el actionPerformed del botón btnIgual lo siguiente. (Nota: El código siguiente es prácticamente igual al anterior, solo se hace un pequeño cambio. Puede copiar y pegar y luego hacer la modificación que se indica)

Estudiemos detenidamente el código remarcado: String consulta; consulta = “select * from trabajadores where sueldo = “+txtSueldo.getText(); ResultSet r = sentencia.executeQuery(consulta);

Aquí se crea una variable de texto llamada consulta y luego se concatena en ella la cadena: select * from trabajadores where sueldo =

con lo que contenga el cuadro de texto sueldo – es decir txtSueldo.getText()

Si el cuadro de texto del sueldo contuviera un 1000, entonces la cadena resultante sería: select * from trabajadores where sueldo = 1000

Es decir, se construye una consulta que busca los sueldos de 1000 euros.

9. Prueba a ejecutar el programa. Escribe un valor 1000 en el cuadro de texto y luego pulsa el botón Igual. El resultado será que aparecen solo los trabajadores que tengan 1000 de sueldo.

Al pulsar el botón Igual se construye una consulta usando el contenido del cuadro de texto txtSueldo. Al ejecutarse la consulta se muestran los trabajadores de 1000 euros.

10. Programa ahora el botón Mayor que de la siguiente forma (El código es prácticamente igual al anterior, así que puedes usar copiar y pegar. Se indica con una flecha la pequeña diferencia)

Como se puede observar, el código es igual. Simplemente cambia el operador en la cadena que se concatena. Ahora se usa un mayor que. Es decir, si el usuario introdujera un 1000 en el cuadro de texto del sueldo, el resultado de la concatenación en la variable consulta sería la siguiente cadena: select * from trabajadores where sueldo > 1000

11. Prueba a ejecutar el programa introduciendo el valor 1000 en el sueldo y luego pulsando el botón Mayor que. El resultado será que aparece en el panel de texto los trabajadores que cobran más de 1000 euros. 12. Como práctica, programe el botón Menor que de forma que muestre aquellos trabajadores que cobren menos de la cantidad introducida en el cuadro de texto txtSueldo.

13. Vamos a seguir mejorando el programa. Añada ahora el siguiente cuadro de texto y los siguientes botones:

El cuadro de texto se llamará txtNombre mientras que el botón “Igual a “ se llamará btnNombreIgual y el botón “Contiene a” se llamará btnContiene.

14. Estos botones funcionarán de la siguiente forma: -

El usuario introducirá un nombre en el cuadro de texto txtNombre.

-

Si luego pulsa el botón Igual a, entonces aparecerán todos aquellos trabajadores que tengan exactamente dicho nombre.

-

Si en cambio pulsa el botón Contiene a, entonces aparecerán todos aquellos trabajadores cuyo nombre contenga la palabra que se haya escrito en el cuadro de texto.

15. Empezaremos programando el botón Igual a. Para ello, escriba el siguiente código dentro del botón (este código es parecido a los anteriores, puede usar copiar y pegar y luego realizar las modificaciones pertinentes)

Observa la modificación del código. Puedes ver que la consulta SQL se consigue concatenando tres cadenas (se han puesto en color para facilitar la comprensión): Primera cadena: select * from trabajadores where nombre = ‘ Segunda cadena: lo que contenga el cuadro de texto: txtNombre.getText() Tercera cadena: ‘ Supongamos que el cuadro de texto contiene la palabra Ana, el resultado de la concatenación sería: select * from trabajadores where nombre = ’Ana’

Es decir, el resultado de la concatenación sería una consulta SQL que muestra aquellos trabajadores que tengan de nombre Ana. NOTA: Recuerda que cuando se especifica un valor de tipo texto en una consulta SQL, es necesario que esté rodeado de comillas simples (‘) Esa es la razón por la que se tienen que concatenar dos ‘

16. Ejecuta el programa y prueba a escribir en el cuadro de texto del nombre Ana. Luego pulsa el botón Igual a…

Se escribe Ana en el cuadro de texto y al pulsar el botón Igual a se construye una consulta SQL que muestra a los trabajadores con el nombre Ana.

17. Ahora programaremos el botón Contiene a de forma que el usuario escriba un texto en el cuadro del nombre, y al pulsar el botón Contiene a aparezcan todos aquellos trabajadores cuyo nombre contenga el texto escrito. Por ejemplo, si el usuario introduce el texto “an” en el cuadro, al pulsar Contiene a aparecerán los trabajadores que se llamen: Juan, Antonio, Antonia, Manolo, Ana, etc (todos contienen el texto ‘an’)

18. Para ello programe lo siguiente en el actionPerformed del botón Contiene a (es un código muy parecido al anterior, solo tiene que realizar una pequeña modificación)

En este caso, para crear la consulta se concatenan tres cadenas (se indican en color para facilitar la comprensión) Primera cadena: select * from trabajadores where nombre like ‘% Segunda cadena: lo que contenga el cuadro de texto: txtNombre.getText() Tercera cadena: %‘ Supongamos que escribimos en el cuadro de texto del nombre la palabra an, el resultado de la concatenación sería el siguiente: select * from trabajadores where nombre like ‘%an%’ La condición nombre like ‘%an%’ significa que contenga la palabra an. NOTA: Cuando se estudiaron las consultas SQL, se vio que el operador like funcionaba a través de asteriscos. Es decir, la forma “correcta” de indicar la condición anterior sería la siguiente: nombre like ‘*an*’ Sin embargo, hay que decir que el asterisco se debe usar solamente cuando estamos manipulando una base de datos de Access desde dentro. En el caso de que queramos acceder a ella desde una aplicación java se usarán porcentajes % en vez de asteriscos.

19. Ejecuta el programa y prueba a escribir en el cuadro de texto del nombre el texto fra. Luego pulsa el botón Contiene a y comprueba el resultado. Deben aparecer todos aquellos trabajadores cuyo nombre contenga el texto fra. Por ejemplo, Francisco.

Se escribe fra, se pulsa el botón Contiene a, y entonces el programa construye una consulta que muestra los trabajadores cuyo nombre contenga fra.

20. Sigamos mejorando el programa. Añade estos cuadros de texto y estos botones:

txtDia

txtMes

txtAnio

btnAnterior

btnDespues

21. El objetivo de estos elementos añadidos es el siguiente: -

El usuario introducirá una fecha (día, mes y año) en los cuadros de texto txtDia, txtMes, txtAnio.

-

Luego, si pulsa el botón Anterior, aparecerán los trabajadores que hayan entrado en la empresa antes de la fecha indicada.

-

Si pulsa el botón Después, en cambio, aparecerán los trabajadores que hayan entrado en la empresa después de la fecha indicada.

22. Empezaremos programando el botón Anterior. Accede a su actionPerformed e incluye el siguiente código (es un código similar al anterior, solo tienes que realizar un pequeño cambio):

Presta mucha atención al código remarcado. En él, se construye una consulta que permite mostrar aquellos trabajadores cuya fecha de entrada en la empresa sea anterior a la indicada en los cuadros de texto. Esto se consigue concatenando varias cadenas (se indican a continuación en distintos colores para facilitar la comprensión)

Primera cadena: select * from trabajadores where fecha < # Segunda cadena: lo que contiene el cuadro de texto del mes: txtMes.getText() Tercera cadena: / Cuarta cadena: lo que contiene el cuadro de texto del día: txtDia.getText() Quinta cadena: / Sexta cadena: lo que contiene el cuadro de texto del año: txtAnio.getText() Séptima cadena: # Por ejemplo, supongamos que: -

en el cuadro txtDia se introdujo un 20. en el cuadro txtMes se introdujo un 12. En el cuadro txtAnio se introdujo un 2005.

Entonces, la cadena resultante de la concatenación será: select * from trabajadores where fecha < #12/20/2006#

Es decir, la cadena resultante es una consulta SQL que busca los trabajadores cuya fecha de entrada en la empresa sea anterior al 20 del 12 del 2006

NOTA: Recuerda que para que Access entienda las fechas al hacer una consulta SQL, es necesario indicarlas en el formato mes/dia/año. Por otro lado, recuerda que las fechas deben estar rodeadas por almohadillas #

23. Ejecuta el programa y prueba a introducir una fecha en las casillas correspondientes. Luego pulsa el botón Anterior y observa como aparecen los trabajadores que entraron antes de la fecha indicada.

Introduce un día, mes y año en los cuadros correspondientes. Al pulsar el botón Anterior, el programa mostrará los trabajadores que hayan entrado antes de esa fecha.

24. Como ejercicio se propone que programe el botón Después. Al pulsar este botón, se mostrarán los trabajadores que hayan entrado antes de la fecha indicada en los cuadros de texto. El código es prácticamente igual al código del botón Anterior.

CONCLUSIÓN A través del objeto sentencia podemos ejecutar una consulta SQL en una base de datos. Esta consulta SQL viene expresada como una cadena. Se puede construir una consulta SQL a través de la concatenación de varias cadenas. Estas cadenas pueden ser datos introducidos por el usuario en cuadros de textos u otros controles. Al hacer que el usuario pueda participar en la construcción de la consulta aportando sus propios datos, le damos la posibilidad de que él decida la información que se quiere extraer de la base de datos. De esta manera se consigue que el programa sea más potente. A tener en cuenta lo siguiente acerca de las consultas SQL ejecutadas desde una aplicación java para acceder a una base de datos de Access: - Los valores tipo texto se indicarán entre comillas simples ‘ - El operador like se usa con porcentajes (%) en vez de con asteriscos (*) - Las fechas van rodeadas por almohadillas (#) - Las fechas tienen que indicarse con el formato mes/dia/año

EJERCICIO GUIADO. JAVA. ACCESO A BASE DE DATOS

Recapitulando. Consultas de selección. Consultas de Acción. Al estudiar SQL, vimos que existían dos tipos de instrucciones. -

Consultas de selección (SELECT) Estas consultas permiten extraer datos de la base de datos. Dicho de otro modo, permiten visualizar información de la base de datos que cumpla un criterio. Estas consultas no afectan a la base de datos, simplemente muestran información sobre la propia base de datos.

-

Consultas de acción. (INSERT, DELETE, UPDATE) Estas consultas realizan una acción sobre la base de datos. Esta acción puede ser: o o o

Insertar un nuevo registro en una tabla (INSERT) Borrar un registro o registros de una tabla (DELETE) Modificar los datos de un registro o registros de la tabla (UPDATE)

Ejecución de consultas de selección y de consultas de acción. Hasta ahora se han realizado programas java que ejecutaban consultas de selección sobre la base de datos. Recuerda que para ejecutar estas consultas se usa el método executeQuery del objeto sentencia y el resultado de la consulta se almacena en un objeto ResultSet: ResultSet r = sentencia.executeQuery(“select . . .”);

En esta hoja guiada veremos la ejecución de consultas de acción sobre la base de datos desde la aplicación java. Este tipo de consultas se ejecutan usando el método executeUpdate del objeto sentencia, y no devuelven un resultado concreto, ya que simplemente actúan sobre la base de datos modificando de alguna manera su contenido. Así pues, para realizar un alta en la base de datos se usará: sentencia.executeUpdate(“insert . . .”); Para realizar una modificación en la base de datos se usará: sentencia.executeUpdate(“update . . . “); Para realizar una eliminación en la base de datos se usará: sentencia.executeUpdate(“delete . . . “);

EJERCICIO GUIADO Nº 1 PLANTEAMIENTO Se quiere realizar una aplicación de base de datos que manipule los datos de los trabajadores de la base de datos MANEMPSA. Esta aplicación permitirá ver el listado de trabajadores y además permitirá introducir nuevos trabajadores. 1. Entre en NetBeans. Crea un nuevo proyecto llamado GestionTrabajadores. Dentro de este proyecto crea un paquete principal llamado paqueteprincipal y dentro de él un JFrame llamado ventanaprincipal:

2. Añade a la ventana un JTextPane y un botón de momento:

El botón se llamará btnTrabajadores y el JTextPane se llamará panelTexto.

3. Para que este programa pueda trabajar con la base de datos MANEMPSA tendrá que prepararlo haciendo lo siguiente: -

Crear la subcarpeta Base y copiar en ella el fichero de base de datos MANEMPSA.MDB que tiene en la carpeta Mis Documentos.

-

Añadir al programa los objetos conexión (Connection) y sentencia (Statement) como globales.

-

Crear el procedimiento PrepararBaseDatos y llamarlo desde el constructor.

-

Cerrar la conexión desde el evento windowClosing

Realice estos cuatro pasos que se han indicado antes de continuar. 4. Ya se puede programar el botón btnTrabajadores. Se pretende que al pulsar este botón aparezca en el panel panelTexto el contenido de la tabla trabajadores. Para ello, en el actionPerformed del botón btnTrabajadores programe lo siguiente:

5. Como puede ver, es una llamada a un método al que se le ha dado el nombre MostrarTodos. Este método se encargará de mostrar todos los trabajadores en el panelTexto. Programe el método MostrarTodos de la siguiente forma:

El código de este método no debe resultarle ya desconocido. Básicamente lo que hace es ejecutar una consulta SQL que recoge todos los datos de la tabla trabajadores y luego muestra dichos datos en el panel de la ventana. Se muestra el listado procurando que las fechas aparezcan con el formato dia-mes-año, que los sueldos aparezcan con la coma decimal y que si el campo matrícula fuera nulo o la cadena vacía “”, entonces aparezca el texto “sin coche”. La razón por la que se ha programado este código en un método aparte llamado MostrarTodos en vez de hacerlo directamente en el actionPerformed del botón se entenderá más adelante, cuando avancemos en el ejercicio guiado.

6. Ejecute el programa y pruebe el botón btnTrabajadores. Compruebe que realiza su cometido.

7. Ahora que ya tenemos un programa capaz de visualizar a los trabajadores, añada los siguientes elementos a la ventana principal:

Panel: panelAlta Cuadros de Texto: txtDNI txtNombre txtApellidos txtSueldo

txtDia txtMes txtAnio txtMatricula Botón: btnAlta

8. El objetivo de estos elementos es el siguiente: El usuario introducirá los datos de un nuevo trabajador en las casillas indicadas. Luego, al pulsar el botón de Alta, se introducirá en la tabla trabajadores los datos del nuevo trabajador y aparecerá en el panel la lista actualizada de trabajadores incluyendo al nuevo que se ha añadido. Para ello tendrás que programar en el botón Alta lo siguiente:

Analicemos este código detenidamente. Lo primero que hay que tener en cuenta es que se realiza una concatenación de cadenas dentro de la variable consulta. Observa el uso de += para concatenar. Ten en cuenta que es lo mismo poner esto: consulta += “’”+txtDNI.getText()+”’,”;

que poner esto: consulta = consulta + “’”+txtDNI.getText()+”’,”;

Solo que el uso de += acorta las instrucciones. Si se analiza la concatenación de las cadenas, se observará que el resultado es una instrucción SQL del tipo INSERT INTO. Es decir, una instrucción SQL que permite la inserción de un nuevo registro en la tabla trabajadores. Por ejemplo, supongamos que introducimos los siguientes valores en los cuadros de texto: txtDNI txtNombre txtApellidos txtSueldo txtDia txtMes txtAnio txtMatricula

11.111.111-A María Ruiz 1100 10 4 2001 4433RET

La concatenación en la variable consulta resultaría lo siguiente (en azul los valores de los cuadros de texto, en rosa las cadenas que se concatenan): insert into trabajadores values (‘11.111.111-A’,’María’,’Ruiz’,1100,#4/10/2001#,’4433RET’)

Es decir, se sigue la misma estrategia que en la hoja anterior. Se concatenan trozos de cadenas y datos introducidos por el usuario hasta conseguir una cadena con forma de instrucción SQL. En este ejemplo, la instrucción SQL construida por concatenación es una instrucción INSERT INTO que permite introducir en la tabla trabajadores los datos de un nuevo trabajador. El objeto que se encarga de ejecutar dentro de la base de datos la instrucción SQL recién construida es el objeto sentencia: sentencia.executeUpdate(consulta); Como se puede observar, para ejecutar instrucciones SQL de acción ya no se usa el método executeQuery, sino que se usa el método executeUpdate. Una vez ejecutada la introducción del nuevo registro en la base de datos, se llama al procedimiento MostrarTodos el cual se encarga de mostrar todo el contenido de la tabla trabajadores en el panel de texto. Gracias a este método, veremos como se rellena el panel y observaremos al nuevo registro recién introducido. La razón de que se programara aparte el método MostrarTodos para mostrar el listado completo de trabajadores ha sido debido a la intención de llamar a este método desde otros lugares del programa. Es decir, la intención ha sido centralizar código y evitar su repetición. Hay que tener en cuenta que todo este código está rodeado de un try ... catch para evitar cualquier error inesperado. Ten en cuenta que pueden producirse errores fácilmente si introducimos valores incorrectos en los cuadros de texto.

9. Finalmente ejecute el programa y compruebe su funcionamiento añadiendo varios trabajadores a la tabla:

Introduce datos y pulsa el botón Alta.

En la parte superior aparecerá el listado completo incluyendo al nuevo trabajador introducido.

CONCLUSIÓN Se pueden ejecutar instrucciones SQL del tipo INSERT INTO (insertar registros) usando el objeto sentencia. Para este tipo de instrucciones hay que usar el método executeUpdate. Normalmente, será necesario construir una cadena de consulta a través de la concatenación de subcadenas y datos introducidos por el usuario en cuadros de texto. Este tipo de instrucciones SQL no devuelven ningún ResultSet, ya que no extraen datos de las tablas, sino que modifican el contenido de éstas.

EJERCICIO GUIADO. JAVA. ACCESO A BASE DE DATOS

Consultas de Acción. Bajas. En la hoja guiada anterior se vio como se podían ejecutar consultas SQL de acción del tipo INSERT INTO (para insertar registros en las tablas de la base de datos) En esta hoja guiada se practicará con otras consultas SQL de acción. Concretamente con las del tipo DELETE (usadas para eliminar registros de las tablas de la base de datos) Al igual que ocurre con las consultas INSERT INTO, las consultas DELETE haya que ejecutarlas usando el método executeUpdate del objeto sentencia. sentencia.executeUpdate(“delete . . . “); Al ejecutar estas consultas se cambiará el contenido de las tablas de la base de datos y no se devolverá ningún ResultSet.

EJERCICIO GUIADO Nº 1 PLANTEAMIENTO Se mejorará el proyecto realizado en la hoja anterior de forma que no solo admita la inserción de nuevos trabajadores en la tabla trabajadores de la base de datos MANEMPSA, sino que también permite eliminar a trabajadores de la tabla.

1. Entre en NetBeans. Abre el proyecto llamado GestionTrabajadores que se programó en la hoja anterior. 2. Añade en la parte inferior de la ventana un nuevo panel:

Panel: panelBajas Cuadro de texto: txtDNIEliminar Botón: btnEliminar

3. La mejora que se pretende hacer es la siguiente: -

El usuario introducirá en el cuadro de texto txtDNIEliminar el DNI del trabajador que quiere eliminar.

-

Al pulsar el botón Eliminar el trabajador con dicho DNI se eliminará de la tabla.

-

Antes de eliminar al trabajador, se le pedirá al usuario una confirmación, para evitar un borrado accidental.

-

Si el DNI introducido no se correspondiera con ningún trabajador de la tabla, entonces se mostrará un mensaje indicándolo.

4. Para hacer esto, entre en el actionPerformed del botón Eliminar y programe lo siguiente:

Se va a analizar este código. Estúdielo con detenimiento: Lo primero interesante que encontrará es la construcción de una consulta de selección (SELECT) usando la típica concatenación de cadenas: consulta="select * from trabajadores where DNI='"+txtDNIEliminar.getText()+"'"; ResultSet r=sentencia.executeQuery(consulta);

Esto se hace para extraer aquellos trabajadores que tengan el DNI introducido en el cuadro de texto txtDNIEliminar. La idea es saber si existe en la tabla algún trabajador con dicho DNI. Al ejecutar esta consulta, el ResultSet r se llenará con trabajadores que tengan ese DNI. Observe el código que viene a continuación: if (!r.first()) { Este if significa: “si no puedo colocarme en el primer elemento del ResultSet r”.

Si no es posible colocarse en el primer elemento del resultado de la consulta será porque no hay un primer elemento, o dicho de otra forma, porque el ResultSet está vacío, o dicho de otra forma más, porque no se encontró a nadie que tuviera el DNI indicado. Si esto fuera así, no existe un trabajador con dicho DNI y por tanto no puede ser borrado. Así pues se muestra un mensaje con un JOptionPane indicando dicha circunstancia. En caso contrario, existe ese trabajador y por tanto podemos borrarlo. Observa el contenido del else: resp=JOptionPane.showConfirmDialog(null,"¿Confirma el borrado?", "Borrar",JOptionPane.YES_NO_OPTION); if (resp==JOptionPane.YES_OPTION) {

Este trozo de código le pregunta al usuario si quiere borrar realmente al trabajador. Si la respuesta es sí (YES_OPTION) se efectuará el borrado tal como se indica a continuación: consulta="delete from trabajadores where DNI='"+txtDNIEliminar.getText()+"'"; sentencia.executeUpdate(consulta); //se ejecuta la eliminacion MostrarTodos(); //y se muestra la tabla de nuevo

Como puede observar, se construye a través de una concatenación, una consulta de acción SQL del tipo DELETE, que nos permitirá borrar el trabajador con el DNI introducido. Luego se ejecuta dicha instrucción usando el método executeUpdate del objeto sentencia (recuerde que usará siempre executeUpdate para ejecutar consultas de acción: altas, eliminación y modificación) Finalmente se llama de nuevo al método que creamos en la hoja anterior que muestra todo el contenido de la tabla trabajadores, y de esta forma podremos comprobar el borrado del trabajador. En caso de que el usuario no haya confirmado el borrado, el código muestra un mensaje “Borrado cancelado por el usuario”. Por otro lado, todo este código es susceptible de sufrir errores inesperados, por lo que está rodeado por un try ... catch.

5. Ejecute el programa y pruebe a eliminar trabajadores de la tabla. Se recomienda que pruebe a introducir DNIs inexistentes, para ver que ocurre. Pruebe también la confirmación del borrado: responda a veces que sí y otras veces que no.

Introduzca el DNI del trabajador que quiere borrar y luego pulse Eliminar. Al hacerlo el listado se actualizará y ya no mostrará el trabajador con dicho DNI ya que habrá sido borrado. Si el DNI no existiera el borrado no se produciría y mostraría un mensaje de error.

CONCLUSIÓN Se pueden ejecutar instrucciones SQL del tipo DELETE (borrar registros) usando el objeto sentencia. Para este tipo de instrucciones hay que usar el método executeUpdate. Normalmente, será necesario construir una cadena de consulta DELETE a través de la concatenación de subcadenas y datos introducidos por el usuario en cuadros de texto. Este tipo de instrucciones SQL no devuelven ningún ResultSet, ya que no extraen datos de las tablas, sino que modifican el contenido de éstas. Para realizar borrados será necesario habitualmente el comprobar que los registros a borrar existen en la tabla. Esto se hará ejecutando una consulta SELECT y comprobando si el ResultSet resultante contiene algún registro, usando el método first. También se recomienda pedir confirmación al usuario antes de realizar borrados en las tablas.

EJERCICIO GUIADO. JAVA. ACCESO A BASE DE DATOS

Consultas de Acción. Modificaciones. Las consultas SQL de acción son: -

INSERT INTO (permiten introducir nuevos registros en las tablas) DELETE (permiten eliminar registros de las tablas) UPDATE (permiten modificar los registros de las tablas)

Estas consultas SQL se ejecutan desde el programa a través del método executeUpdate propio del objeto sentencia. Estas instrucciones SQL afectan al contenido de la base de datos y no devuelven ningún resultado. Es decir, no extraen datos, y por tanto no devuelven un ResultSet. En las hojas anteriores se ha visto como ejecutar consultas INSERT INTO y DELETE. En esta hoja guiada veremos como ejecutar consultas de acción de modificación: UPDATE.

EJERCICIO GUIADO Nº 1 PLANTEAMIENTO Se mejorará el proyecto realizado en la hoja anterior de forma que no solo permita añadir y borrar trabajadores de la tabla trabajadores de la base de datos MANEMPSA, sino que también permita realizar modificaciones en los datos de los trabajadores de dicha tabla.

1. Entre en NetBeans. Abre el proyecto llamado GestionTrabajadores que se programó en la hoja anterior. 2. Modifique la ventana principal añadiendo un nuevo panel con los siguientes componentes: Nuevo panel

El panel se llamará panelModificar El botón es btnBuscar Los cuadros de texto se llaman respectivamente: txtModDNI txtModNombre txtModApellidos txtModSueldo txtModDia txtModMes txtModAnio txtModMatricula El botón es btnModificar

3. La mejora que se pretende hacer es la siguiente: -

El usuario introducirá en el cuadro de texto txtModDNI el DNI del trabajador cuyos datos se quieren modificar.

-

Al pulsar el botón Buscar, el resto de cuadros de texto se rellenarán con los datos del trabajador al que pertenece dicho DNI. (Si dicho DNI no existiera, se mostraría un mensaje de error)

-

Cuando aparezcan los datos del trabajador en los cuadros de texto, el usuario podrá realizar las modificaciones pertinentes.

-

Al pulsarse el botón Efectuar Modificación se modificarán los datos en la tabla.

4. Primero programaremos el botón de búsqueda. Entre en el actionPerformed de este botón y programe lo siguiente:

Estudiemos atentamente el código anterior:

Lo primero que hace el código es construir una consulta de selección que busque a todos los trabajadores que tengan el DNI introducido en el cuadro de texto txtModDNI. Ejecuta la consulta y almacena el resultado en un típico ResultSet. Luego comprueba a través del siguiente if si no existe un trabajador con dicho DNI en el ResultSet: if (!r.first()) {

En ese caso muestra un mensaje de error indicando que no se ha encontrado dicho trabajador. En caso contrario muestra los datos del trabajador encontrado en los cuadros de texto. Para ello, se extrae del ResultSet cada campo y se coloca en el cuadro de texto correspondiente. Por ejemplo: txtModNombre.setText(r.getText(“nombre”));

Recoge el valor del campo nombre, y lo sitúa en el cuadro de texto txtModNombre. En el caso de la fecha de entrada del trabajador, se extrae la fecha y luego se extrae de la cadena el día, el mes y el año, situando cada dato en su cuadro de texto correspondiente. cadefe = r.getString("fecha"); caddia=cadefe.substring(8,10); cadmes=cadefe.substring(5,7); cadanio=cadefe.substring(0,4); txtModDia.setText(caddia); txtModMes.setText(cadmes); txtModAnio.setText(cadanio);

Recuerda que cuando se extrae una fecha de un ResultSet, su formato es: año-mes-dia-hora:minutos Por ejemplo: 2001-12-23-00:00 Así pues, si el DNI introducido pertenece a uno de los trabajadores de la tabla, sus datos aparecerán en los cuadros de texto cuando se pulse el botón Buscar.

5. Ejecuta el programa y comprueba su funcionamiento. Escribe un DNI en el cuadro del DNI de búsqueda y pulsa Buscar.

Se introduce un DNI y luego se pulsa Buscar. Si existe un trabajador con ese DNI, sus datos aparecerán en los cuadros de texto.

6. Se supone que cuando aparezcan los datos del trabajador en los cuadros de texto el usuario los modificará según le interese. Luego, al pulsar el botón Efectuar Modificación los nuevos datos serán actualizados en la tabla.

7. Para hacer esto, entre en el actionPerformed del botón Efectuar Modificación y programe lo siguiente:

Se va a analizar este código. Estúdielo con detenimiento: Debe observar que lo primero que se hace en este código es crear una consulta de actualización (UPDATE) a través de una concatenación de cadenas. Si observa la concatenación, verá que el resultado es una instrucción SQL de tipo UPDATE en la que los datos que se actualizan son precisamente los datos introducidos en los cuadros de texto del panel de modificación. Por ejemplo, si estos fueran los valores de los cuadros de texto del panel de modificación: txtModDNI 11.111.111-A txtModNombre Juan txtModApellidos Perez txtModSueldo 1100 txtModDia 4 txtModMes 12 txtModAnio 2001 txtModMatricula 1234-ABC La instrucción ya construida por concatenación sería la siguiente: update trabajadores set nombre=’Juan’,apellidos=’Perez’,sueldo=1100,fecha=#12/4/2001#, matricula=’1234-ABC’ where dni=’11.111.111-A’

Esta instrucción SQL de tipo UPDATE incluye una cláusula WHERE con una condición de forma que solo se modifica aquel trabajador que tenga el DNI introducido en el cuadro de texto txtModDNI. Una vez construida la consulta UPDATE, esta se ejecuta usando el objeto sentencia y luego se muestra el contenido de la tabla trabajadores en el panel a través de una llamada al método MostrarTodos. Todo este código está rodeado de un try...catch para evitar errores inesperados.

8. Comprueba el funcionamiento del programa ejecutándolo. Debes introducir un DNI y pulsar el botón Buscar para que se rellenen los cuadros de texto con los datos del trabajador. Luego cambia algún dato de los que han aparecido en los cuadros de texto y pulsa el botón Efectuar Modificación. Si observas el panel de texto deberá aparecer la lista completa de trabajadores y en ella podrás observar la modificación que se ha realizado en el trabajador correspondiente.

Se introduce un DNI y se le da a Buscar. Los cuadros de texto se rellenan con los datos del trabajador. Se realiza la modificación que se quiera en los cuadros de texto. Finalmente se pulsa Efectuar Modificación para que se realice la modificación. En el panel aparecerá la lista actualizada de los trabajadores.

CONCLUSIÓN Se pueden ejecutar instrucciones SQL del tipo UPDATE (modificar registros) usando el objeto sentencia. Para este tipo de instrucciones hay que usar el método executeUpdate. Normalmente, será necesario construir una cadena de consulta UPDATE a través de la concatenación de subcadenas y datos introducidos por el usuario en cuadros de texto. Este tipo de instrucciones SQL no devuelven ningún ResultSet, ya que no extraen datos de las tablas, sino que modifican el contenido de éstas. Es una buena idea dar alguna opción de búsqueda que permita encontrar al registro a modificar y que sus datos aparezcan en varios cuadros de texto, de forma que el usuario tenga más facilidad a la hora de realizar los datos.

EJERCICIO GUIADO. JAVA. ACCESO A BASE DE DATOS

Tablas (JTable) Como se ha estudiado en las hojas guiadas 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 hojas 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 del tipo JTable, ya que estos objetos tienen forma de tabla. En esta hoja guiada se estudiarán los objetos JTable (sin tener en cuenta a las bases de datos) Una vez que entendamos el funcionamiento de los objetos JTable, los usaremos en posteriores hojas guiadas para presentar dentro de ellos el contenido de consultas SQL.

EJERCICIO GUIADO Nº 1

1. Crear un nuevo proyecto en NetBeans. En la ventana principal de dicho proyecto agregue un objeto JTable:

El nombre del objeto JTable será simplemente tabla. Debes tener en cuenta que los objetos JTable se añaden siempre dentro de un panel de desplazamiento JScrollPane:

2. El objeto tabla que se acaba de introducir tiene por defecto cuatro columnas con los nombres “Título 1”, “Título 2”, “Título 3” y “Título 4”, y contiene cuatro filas vacías. Puede ejecutar el programa para ver el funcionamiento del objeto tabla. Pruebe a introducir algún dato en las celdas de la tabla...

Haz doble clic para introducir datos en las celdas...

3. Aprenderemos ahora a configurar determinados aspectos de la tabla que vamos a usar. Para ello añada al constructor una llamada a un método PrepararTabla que programaremos a continuación.

4. Programa ahora el método PrepararTabla de la siguiente forma:

La primera línea del código define un array de 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 m 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 m, de tipo DefaultTablaModel. Luego, al construir el objeto se deben indicar dos parámetros: null y el vector de títulos de columnas: DefaultTableModel m = new DefaultTableModel(null,titulos); El valor null hace que la tabla aparezca vacía en un principio, mientras que el vector títulos define las columnas que tendrá la tabla. Una vez construido de esta forma el objeto modelo m, este se asigna al objeto tabla: tabla.setModel(m); La razón por la que se ha declarado el objeto modelo m como global es que será usado en otros métodos del programa.

5. Ejecuta el programa y observa el resultado:

Como puedes observar, se ha creado una tabla vacía con cinco columnas correspondientes al vector de títulos. 6. Vamos a añadir un botón a la ventana con el texto Nueva Fila, al cual llamaremos btnNueva:

7. Dentro del botón btnNueva 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 m que creamos anteriormente. Observa como es necesario realizar un cast (en rojo) a la hora de asignar el modelo a la variable m: m = (DefaultTableModel) tabla.getModel(); El resultado de esta instrucción es que volvemos a tener disponible el modelo de la tabla en la variable m, y por tanto, podemos manipular los datos contenidos en la tabla a través de esta variable. Por ejemplo, se usará el modelo m para añadir una fila en blanco en la tabla. Para ello, basta con crear un vector de cadenas de 5 elementos (ya que hay cinco columnas): String filavacia[]=new String[5]; Y luego, a través del método addRow (añadir fila), añadir una fila correspondiente a los valores del vector: m.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)

7. Ejecuta el programa y pulsa varias veces el botón Nueva Fila. Observarás como se van añadiendo filas vacías a la tabla.

Pulsa el botón y se añadirán filas en blanco...

8. Para entender bien el funcionamiento de la inserción de filas en la tabla, añada otro botón llamado btnNuevoElemento con el texto Nuevo Elemento:

9. 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.

10. Ejecuta el programa y comprueba su funcionamiento, observarás que al pulsar el nuevo botón aparecen filas rellenas.

Cuando se pulsa el botón Nuevo Elemento aparecen filas ya rellenas.

11. Sigamos experimentando con la tabla. Ahora añadiremos un botón btnEliminar con el texto “Eliminar Fila”:

12. 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 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 es necesario seleccionar la fila que se va a 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)

13. Ejecuta el programa y añade varias filas. Luego prueba a seleccionar alguna y pulsar el botón Eliminar. Observa también lo que sucede cuando intentas eliminar una fila cuando no hay ninguna seleccionada.

Al pulsar eliminar fila se eliminará la fila que esté seleccionada de la tabla. Si no hubiera ninguna fila seleccionada aparecería un mensaje de error.

14. Sigamos aprendiendo nuevas cualidades de las tablas. Añada lo siguiente a su ventana:

txtFila txtColumna

btnVerValor

etiValor

15. Lo que se pretende es lo siguiente: El usuario introducirá un valor en la fila y la columna, por ejemplo: Fila 3, columna 4, y al pulsarse el botón Ver Valor aparecerá en la etiqueta Valor el contenido de la casilla situada en la posición 3, 4 (fila 3 columna 4) Así pues programe lo siguiente en el botón Ver Valor:

Estudiemos el código. Primero, se recogen los valores introducidos en los cuadros de texto de la fila y columna y se convierten a enteros: fila = 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 casilla de la tabla, indicando la fila y columna de esa celda. El resultado lo hemos almacenado en una variable valor de tipo cadena. Es necesario realizar un cast (en rojo):

valor = (String) m.getValueAt(fila,col); Finalmente, una vez extraído el valor de la celda de la posición fila, col este se coloca en la etiqueta etiValor. 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.

16. 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 Ver Valor:

Se introdujo la posición: 2, 1. Por tanto se quiere ver el valor de la casilla 2,1 (tanto las filas como las columnas empiezan en 0)

17. Sigamos experimentando. Añade lo siguiente a la ventana:

btnIntroducir

txtNuevoValor

18. 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 txtNuevoValor. Finalmente pulsará el botón btnIntroducir. 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 btnIntroducir:

Estudiemos el código detenidamente. Lo primero que se hace es extraer de los cuadros de texto la fila, columna y el valor. La fila y columna son convertidas a enteros. fila = Integer.parseInt(txtFila.getText()); col = Integer.parseInt(txtColumna.getText()); valor = txtNuevoValor.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: m=(DefaultTableModel) tabla.getModel(); m.setValueAt(valor,fila,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.

19. 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 Introducir dicho valor aparecerá en la celda correspondiente:

Introduce una fila y columna. Luego introduce un dato. Y al pulsar el botón Introducir el resultado es que el dato se introduce en la celda indicada por la fila y columna. Recuerda que las filas y columnas empiezan a numerarse por 0 en un JTable.

CONCLUSIÓN 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 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.

EJERCICIO GUIADO. JAVA. ACCESO A BASE DE DATOS

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 de 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:

Si observas el código, verás que en el método 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 vacío. Y se asigna finalmente a la tabla. El resultado de esto es que la tabla aparecerá vacía y sin títulos (En realidad, como títulos aparecen letras: A, B, C, etc)

5. Ejecuta el programa para ver su aspecto de momento.

Debido a que hemos asignado un vector de títulos sin contenido, las columnas tienen como título letras.

6. Bien, ahora programaremos el botón btnTrabajadores de forma que al pulsarlo se muestre el contenido de la tabla Trabajadores. 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. El resultado de dicha consulta se almacenará en un objeto ResultSet llamado r. ResultSet r = sentencia.executeQuery("select * from trabajadores");

A continuación, se extraerá información 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 código. String titulos[] = {"DNI","Nombre","Apellidos","Sueldo","Fecha","Matrícula"}; m=new DefaultTableModel(null,titulos); tabla.setModel(m);

Como ves, lo que hacemos es definir un vector de cadenas con los títulos correspondientes a los campos de la tabla, y luego usamos 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 botón Trabajadores la cabecera de la tabla pasa a contener los campos indicados en el vector títulos.

8. Ahora ya solo nos queda recoger todo el contenido del ResultSet y mostrarlo en la tabla. Para ello, modifique el código del actionPerformed del botón Trabajadores para que quede como sigue:

Si estudiamos el código, veremos que se extrae la tabla trabajadores entera introduciéndola en un ResultSet llamado r, a través de una instrucción SELECT de SQL. Luego construimos un modelo de tabla (DefaultTableModel) llamado m usando un vector de títulos, 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 típico: while (r.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. Así pues, en cada vuelta se añadirá un registro más al modelo m. Estos registros son extraídos 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 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. (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. (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 en 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 botón 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 estándar de almacenamiento: Año-mes-dia hora:min:seg Y que los sueldos aparecen con punto decimal. Mejore estos detalles haciendo los siguientes cambios en el botón 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 año, mes y día y se concatenan en un formato más habitual: dia/mes/año. 12. Ejecuta ahora el programa y observa como se muestran las fechas y los sueldos:

CONCLUSIÓN El proceso a seguir para mostrar una tabla de una base de datos en un JTable es el siguiente: -

Realizar una consulta SELECT para extraer los datos de la tabla de la base de datos. El resultado se almacenará en un ResultSet.

-

Recorrer el ResultSet almacenando cada una de sus filas en un vector y luego traspasando este vector a un modelo de tabla.

-

Una vez que el modelo de tabla está relleno, asignar el modelo a un JTable.

EJERCICIO GUIADO. JAVA. ACCESO A BASE DE DATOS

Gestión de una tabla 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. Se puede aprovechar esta idea de forma que todas las operaciones que realicemos sobre una tabla se vean inmediatamente reflejadas en el JTable de la aplicación java. Por ejemplo, si eliminamos un registro sería interesante que automáticamente viéramos la tabla actualizada en el JTable. En esta hoja guiada se mejorará la aplicación de la hoja guiada anterior, dotándola de opciones para la gestión de la tabla Trabajadores.

EJERCICIO GUIADO Nº 1

1. Abrir la aplicación de la hoja guiada anterior. 2. El primer objetivo será hacer que al ejecutar el programa aparezca automáticamente el contenido de la tabla Trabajadores en el JTable. Para ello, realice los siguientes cambios en el código del programa:

Añade una llamada a un método MostrarTrabajadores, en el constructor del programa.

3. Crea el método MostrarTrabajadores:

4. Copia en él el código del actionPerformed del botón btnTrabajadores:

5. 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. Ejecuta el programa y comprueba el resultado.

6. Puesto que la tabla trabajadores se muestra al empezar el programa, la existencia del botón Trabajadores no tiene sentido, así pues elimina el botón Trabajadores de la ventana.

7. Añade ahora en la parte inferior un panel llamado panelAcciones y un botón Eliminar Trabajador llamado btnEliminar:

8. 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. Esta eliminación por supuesto se verá reflejada en el JTable. Para ello, programe en el botón Eliminar lo siguiente:

Estudiemos con detenimiento el código programado. Lo primero que se hace es recoger la fila seleccionada de la tabla usando el método 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 borrar. Pero antes, es interesante pedir confirmación. Esto es lo que se hace con el JOptionPane.showConfirmDialog. Si el usuario acepta la eliminación 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 instrucción de acción SQL del tipo DELETE para que se elimine el trabajador con el dni extraído. Esto se hace concatenando y ejecutando la instrucción SQL a través del objeto sentencia:

sentencia.executeUpdate("delete from trabajadores where dni='"+dni+"'");

-

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 algún trabajador. Observa como el JTable se actualiza cuando se produce la eliminación.

10. Ahora añade otro botón llamado btnNuevo:

11. Cuando se pulse el botón Nuevo se pretende que aparezca un formulario donde se puedan introducir los datos de un nuevo trabajador. Esto se conseguirá añadiendo un cuadro de diálogo a nuestro proyecto. Para ello, agrega un JDialog al proyecto. Este diálogo se llamará dialogoNuevo.

12. Haga doble clic en el Inspector sobre el dialogoNuevo para diseñarlo. Debe quedar como sigue, con los nombres que se indican a continuación:

txtNuevoDni txtNuevoNombre txtNuevoApellidos txtNuevoSueldo txtNuevoDia txtNuevoMes txtNuevoAnio txtNuevoMatricula

btnNuevoAceptar btnNuevoCancelar

13. La idea es la siguiente. Cuando el usuario pulse el botón Nuevo, aparecerá este cuadro de diálogo. El usuario introducirá los datos del nuevo trabajador y pulsará Aceptar, y entonces estos datos se introducirán en la tabla trabajadores. Si el usuario pulsa Cancelar, entonces no se hará nada. El JTable se actualizará para mostrar el resultado de la inserción del nuevo trabajador. 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. Luego, se define el dialogoNuevo como Modal. Esto significa que hasta que no se termine de trabajar con este cuadro de diálogo no se podrá continuar usando el programa principal. Luego se muestra dicho cuadro de diálogo. Y finalmente se actualiza el JTable por si se hubiera introducido un nuevo trabajador.

14. Ahora programemos los botones del cuadro de diálogo dialogoNuevo. Empecemos por el botón Cancelar:

Como ves, tan sencillo como descargar el cuadro de diálogo. El botón Cancelar debe limitarse a quitar de la pantalla el cuadro de diálogo dialogoNuevo.

15. Y finalmente se programará el botón Aceptar del cuadro de diálogo. Recuerda que este botón es el que introduce en la base de datos a un nuevo trabajador. Programa dentro de este botón lo siguiente:

Vamos a analizar detenidamente este código. Lo primero que puedes observar es un conjunto de líneas 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/año. Luego, con estas variables, se construye por concatenación una instrucción SQL de tipo INSERT que permita introducir los datos del nuevo trabajador en la tabla trabajadores. Se ejecuta dicha instrucción SQL. Y se cierra el cuadro de diálogo. 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 añade un nuevo botón a la ventana, llamado btnModificar:

18. Se pretende que el usuario seleccione en la tabla el trabajador cuyos datos quiere modificar, y luego pulse este botón para efectuar la modificación. 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, así que básicamente solo tendrás que hacer una copia de dicho cuadro de diálogo y modificarlo un poco. A continuación se explica como hacerlo.

19. Haz clic con el derecho sobre el cuadro de diálogo dialogoNuevo y activa Copiar :

20. Luego activa Pegar sobre Otros Componentes:

21. Aparecerá un nuevo cuadro de diálogo que es una copia del anterior. Este cuadro tendrá como nombre dialogoNuevo1.

22. Sin embargo, le cambiaremos el nombre para que sea más acorde con su función. Le llamaremos dialogoModificar. Cámbiale el nombre:

23. Vamos a modificar un poco el diseño del dialogoModificar. Haz doble clic sobre él y realiza las siguientes modificaciones en el diseño:

Cambia el título. Ahora es “Modificar Trabajador” Los nombres para los cuadros de texto y botones serán: txtModDni (Desactiva su propiedad editable) txtModNombre txtModApellidos txtModSueldo txtModDia txtModMes txtModAnio txtModMatricula btnModAceptar btnModCancelar

24. Empezaremos programando el botón Modificar. Al pulsar este botón se debe mostrar el cuadro de diálogo 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 botón Modificar y programa lo siguiente:

Estudiemos el código. Primero se comprueba el número 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 almacenan en los cuadros de texto del cuadro de diálogo dialogoModificar. Y finalmente se prepara el cuadro de diálogo dialogoModificar y se muestra en la pantalla. Una vez realizada la modificación (no programada aún) se muestran los trabajadores en la tabla llamando al método MostrarTrabajadores.

25. Puedes comprobar el funcionamiento del programa de momento. Prueba a seleccionar una fila de la tabla y al pulsar el botón Modificar.

Selecciona... Y luego pulsa modificar.

El resultado es que aparece el cuadro de diálogo dialogoModificar ya relleno con los datos del trabajador que se seleccionó.

26. 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, y solo modificar el campo que nos interese. El usuario realizará los cambios en 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. Simplemente se cerrará el cuadro de diálogo.

27. Se empezará programando el botón Cancelar. Este botón debe limitarse a cerrar el cuadro de diálogo dialogoModificar:

28. Ahora nos centraremos en el botón Aceptar. Este botón debe realizar la modificación, 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, ya que entonces estaríamos modificando los datos de otro trabajador.

Esta es la razón 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 código en el botón Aceptar:

Estudiemos el código. Lo primero que se hace es recoger en variables los datos introducidos en los cuadros de texto. Luego, con estas variables, 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. Finalmente se cierra el cuadro de diálogo. Todo este código es susceptible de sufrir fallos por lo que está rodeado de un try...catch.

29. Ejecuta el programa y comprueba el funcionamiento de la actualización de trabajadores. Prueba a realizar varias actualizaciones. Observa como el JTable se actualiza con las nuevas modificaciones realizadas.

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.

EJERCICIO GUIADO. JAVA. ACCESO A BASE DE DATOS

Filtrados sobre una tabla En la hoja guiada anterior se realizó una pequeña aplicación de base de datos que permitía realizar altas, bajas y modificaciones sobre la tabla trabajadores de la base de datos MANEMPSA. En todo momento se mostraba en un JTable el listado de trabajadores de la empresa. La eliminación y modificación de un trabajador se podía realizar simplemente haciendo clic sobre la fila del trabajador correspondiente en el JTable y luego activando el botón Eliminar o Modificar. Sin embargo, en el momento en que tengamos una gran cantidad de trabajadores almacenados en la tabla, puede resultar un poco complicado encontrar al trabajador en concreto que se quiere eliminar o modificar. Aparte, puede ser necesario a veces ver solo determinados registros de la tabla y no toda la tabla entera. Se hace necesario pues añadir al programa ciertas opciones de filtrado que nos permitan visualizar en el JTable solo aquellos registros que más nos interesen. En esta hoja guiada se mejorará el programa de la hoja anterior de forma que permita al usuario ciertas opciones de filtrado.

EJERCICIO GUIADO Nº 1

1. Abrir la aplicación de la hoja guiada anterior. 2. Primero debes añadir un botón btnFiltar a la ventana:

3. Al pulsar este botón aparecerá un cuadro de diálogo que contenga opciones de filtrado, de forma que el usuario pueda decidir qué trabajadores quiere ver. Por lo tanto, tendrá que añadir un nuevo cuadro de diálogo (JDialog) y asígnele el nombre dialogoFiltrar.

4. Haz doble clic sobre este diálogo y diséñelo de la siguiente forma:

txtFiltrarDni txtFiltrarNombre txtFiltrarApellidos comboSueldo txtFiltrarSueldo comboFecha txtFiltrarDia txtFiltrarMes txtFiltrarAnio txtFiltrarMatricula btnFiltrarAceptar btnFiltrarVerTodos btnFiltrarCancelar

NOTA: Los dos combos del cuadro de diálogo deben contener los siguientes elementos: =

>


=

, =, , =, para añadirlo. En nuestro ejemplo debes añadir los campos: DNI, Nombre, Apellidos y Sueldo únicamente. Nota: El botón > añade de uno en uno. El botón >> los añade todos. El botón < quita un campo del informe. El botón 200”, que será reemplazada en el lugar del parámetro.

Para que lo vea claro, el código a usar en la aplicación java para dar valor al parámetro podría ser como sigue: Map parametros = new HashMap(); parametros.put(“COND”, “trabajadores.sueldo>200”);

Observa que el valor del parámetro es una condición entera. Cuando se quiera usar un parámetro que represente a un dato, se usará la siguiente sintaxis: $P{nombreparámetro} Cuando se quiera usar un parámetro que represente a una condición, se usará la siguiente sintaxis: $P!{nombreparámetro} (Observa el uso de la admiración !)

CONCLUSIÓN Cuando un informe tiene una instrucción SQL invariable, siempre mostrará los mismos datos. Puede resultar interesante que parte de la instrucción SQL del informe pueda variar, de forma que se pueda extraer distinta información según el dato que varía. Estos datos variantes se denominan parámetros. Un parámetro puede referirse a un dato concreto, o a una condición. Si el parámetro se refiere a un dato concreto, entonces tiene la siguiente forma: $P{nombre} Si el parámetro se refiere a una condición, entonces tiene la siguiente forma: $P!{nombre} El parámetro debe ser sustituido por un valor que es proporcionado desde la aplicación java, y es entonces cuando la instrucción SQL se completa y se ejecuta. En la aplicación java es necesario crear un objeto de tipo Map que contenga los distintos parámetros con los valores de cada uno para luego enviar este objeto al informe que se quiere mostrar. El uso de parámetros en informes hace que estos sean mucho más versátiles y que el programa tenga más posibilidades.

EJERCICIO GUIADO. JAVA. CARPETA DISTRIBUIBLE

Distribución e Instalación de programas en Java Una vez que se ha finalizado el programa, debemos prepararlo para la instalación en el ordenador del cliente. Para ello, es necesario tener en cuenta todos aquellos ficheros externos que han sido necesarios para la programación de la aplicación: base de datos, imágenes, informes, etc... A continuación se indican las cosas a tener en cuenta a la hora de realizar una distribución de nuestro proyecto.

1. En primer lugar es necesario pulsar el botón Limpiar y construir proyecto principal. Este botón compila el programa y crea una carpeta llamada dist dentro de la carpeta del proyecto, la cual será la carpeta “distribuible”.

(Si hubiera un error de compilación el proceso se detendría y aparecería un mensaje de error)

2. Si realiza esta operación con alguno de sus proyectos, puede acudir a la carpeta del proyecto y observará la existencia de la carpeta dist:

3. Entre dentro de esta carpeta y observe su contenido:

4. Observará la existencia de un fichero con extensión .jar. Este fichero se puede decir que es el “ejecutable” del programa. El fichero .jar contiene todas las clases que ha programado en su proyecto. Debe recordar que los programas java pueden ejecutarse en cualquier entorno. Por ello, los ejecutables java no tienen una extensión .exe la cual es propia de los entornos Windows. Para que un ejecutable .jar pueda ser ejecutado en un determinado sistema, debe estar instalado en él la máquina virtual de java.

5. Aparte del fichero ejecutable (.jar) el cual tendrá el nombre del proyecto, verá también una carpeta lib. Esta carpeta contendrá aquellas librerías adicionales que se hayan incluido en el proyecto. 6. Bases de datos. Si su programa usa una base de datos, entonces será necesario copiar dicha base de datos en la carpeta del distribuible. Si suele crear una carpeta para la base de datos, entonces copie la carpeta con la base de datos en la carpeta distribuible:

7. Imágenes, Iconos. Si está usando imágenes en su programa (para la presentación, los iconos de los botones de las barras de herramientas, etc.) tendrá que introducir los ficheros de estas imágenes dentro de la carpeta distribuible. Si es ordenado, todas estas imágenes estarán dentro de una misma carpeta (llamada por ejemplo imágenes) Así pues, copie la carpeta que contiene las imágenes que está usando dentro la carpeta distribuible:

8. Informes. Si su programa usa informes, es necesario que los ficheros de estos estén dentro de la carpeta del distribuible. Los ficheros de informes necesarios para el funcionamiento del programa son los ficheros compilados .jasper. Los demás no son necesarios incluirlos. Estos ficheros estarán normalmente dentro de una carpeta llamada Informes, si es usted ordenado. En ese caso, copie la carpeta con los informes dentro de la carpeta del distribuible, la cual quedaría ahora así:

9. Imágenes de informes. Si los informes del programa usan imágenes, la situación de estas en la carpeta distribuible depende de la forma en que haya configurado dichas imágenes en el iReport. Normalmente, al crear una imagen en el informe, asignamos simplemente el nombre del fichero de imagen, suponiendo que la imagen se encontrará en la misma carpeta que el informe:

En este ejemplo, el informe usa un fichero de imagen llamado “logo.jpg” que se encuentra en la misma carpeta que donde se ha guardado el informe.

10. Si estamos ante este caso, para que funcione los informes con imágenes de su programa es necesario que introduzca las imágenes de los informes directamente en la carpeta distribuible. En nuestro ejemplo la carpeta distribuible quedaría así:

11. Sin embargo, para mantener una cierta organización de la carpeta distribuible, sería interesante que las imágenes de los informes estuvieran también dentro de la carpeta Imágenes. Si quisiera hacer esto, tendría que modificar sus informes con imágenes de forma que se indicara la carpeta donde estará cada imagen. En nuestro ejemplo, la imagen del informe se tendría que haber configurado así:

Se indica que las imagen “logo.jpg” estará dentro de una subcarpeta Imágenes.

12. Si modifica sus informes con imágenes de esta forma y los recompila, entonces podrá organizar su carpeta distribuible de esta manera:

La carpeta Informes contiene los .jasper

La carpeta Imagenes contiene todas las imágenes del programa así como las imágenes usadas por los informes.

13. Una vez incluidos todos estos elementos ya tendremos la carpeta distribuible completada. Solo tiene que copiar la carpeta dist en un CD, USB o disquete para trasladarla al ordenador del cliente. Si quiere, puede cambiarle el nombre a dicha carpeta. Antes de hacer esto, se recomienda que compruebe que el programa funciona, ejecutando el fichero .jar de dicha carpeta. Compruebe que la ubicación de la base de datos, los informes y las imágenes es la correcta.

14. Para la instalación del programa en el ordenador del cliente, solo tiene que copiar la carpeta distribuible en el disco duro del ordenador del cliente. Se recomienda que lleve la máquina virtual de java propia del sistema operativo del cliente por si este no la tuviera instalada en su ordenador. Si este fuera el caso, se tendría que instalar para que el proyecto pudiera ejecutarse.

CONCLUSIÓN NetBeans permite crear una carpeta llamada dist la cual será la que copiaremos en el ordenador del cliente. Basta que el cliente tenga instalada la máquina virtual de java para que nuestro proyecto funcione. La instalación consistirá básicamente en copiar la carpeta dist al ordenador del cliente, y en instalar la máquina virtual de java en el caso de que el cliente no la tenga instalada. A la hora de crear la carpeta dist debe tener en cuenta que debe añadir la base de datos, los informes y las imágenes del proyecto, si es que este usa alguno de dichos elementos.

EJERCICIO GUIADO. JAVA. INSTALABLE.

Instalación de programas Java Se ha visto en la hoja guiada anterior que para trasladar el programa java realizado al ordenador del cliente basta con crear una carpeta “distribuible”. Esta carpeta contiene el fichero ejecutable .jar que permite ejecutar el programa. El ordenador del cliente debe tener instalada la máquina virtual de java para que nuestro programa funcione. Una vez instalada la máquina virtual de java en el ordenador del cliente, basta con copiar la carpeta “distribuible” en su disco duro. Aunque este proceso es muy sencillo, puede suceder que el cliente no sea capaz de realizarlo, en el caso de que carezca de conocimientos informáticos básicos. En este caso, podría ser interesante automatizar la instalación del programa a través de un fichero de instalación. En esta hoja guiada se verá como crear un instalable para un programa java, usando un programa llamado iZpack.

Qué es IZPACK IZPack es una aplicación que nos permite crear un fichero de instalación a partir de una aplicación escrita en java. Esto nos permite que nuestras aplicaciones Java sean más fáciles de distribuir e instalar. IZPack crea un fichero .jar, que contiene todos los ficheros necesarios del programa. Basta con ejecutar este fichero para que el programa java que ha creado se instale. El programa IZPack se proporciona en la carpeta Herramientas de la carpeta compartida del curso, aunque puedes bajarte la última versión de forma gratuita desde esta página web: http://www.izforge.com/izpack/ Antes de empezar con esta hoja guiada instala el programa IZPack en tu ordenador. El programa se instalará en la carpeta Archivos de Programa/Izpack, a no ser que se escoja otro lugar. Dentro de la carpeta Izpack encontrará otra carpeta llamada Bin, y dentro de esta encontrará un fichero .bat llamado compile que será el que use para crear los instalables.

Creación de un Instalable con IZPack. PREPARACIÓN.

1. Lo primero que debes hacer es crear la carpeta Distribuible (dist) de tu programa si es que no la has creado ya. Para ello debes abrir tu proyecto en NetBeans y seguir los pasos que se indicaron en la hoja guiada anterior. 2. Una vez creada la carpeta del Distribuible, crea un fichero usando el Bloc de Notas llamado Licencia.txt. Este fichero debe contener la licencia de uso del programa. Este fichero lo guardarás en la carpeta Distribuible. 3. Ahora crea usando el Bloc de Notas un fichero llamado Leeme.txt. Aquí introducirás algún comentario sobre tu proyecto que consideres útil para el cliente. Por ejemplo datos de contacto (teléfono, email), información sobre la versión del programa o cualquier otra información que consideres interesante. Este fichero también lo guardarás en la carpeta Distribuible. 4. Busca un icono para tu programa y almacénalo también en la carpeta del Distribuible. Este fichero será del tipo ico (fichero de icono) y se guardará con el nombre icono.ico en la carpeta del Distribuible. 5. Una vez creados estos dos ficheros de texto, tiene que crear un nuevo fichero llamado install.xml. Este fichero lo creará usando el Bloc de Notas en la carpeta Distribuible. El contenido de este fichero estará escrito en un lenguaje llamado XML y será el siguiente (no se preocupe si no entiende el contenido, solo fíjese en los textos remarcados):



Nombre del Programa Versión

http://www.mipagina.es/













Ficheros y Carpetas del Programa







6. El fichero install.xml que acaba de crear en el punto anterior es siempre igual. Solo tiene que cambiar una serie de datos (los marcados en verde), tal como se indica a continuación: -

Datos del programador. En la primera parte del fichero se indican los datos del programador y del programa. Observe: Pon aquí el nombre de tu programa.

Nombre del Programa Versión Y aquí la versión

http://www.mipagina.es/

Escribe aquí tu nombre, y tu email Y tu página web

-

Carpetas de tu programa. En la parte final del fichero tendrás que indicar las carpetas que forman tu programa (es decir las carpetas que contiene la carpeta distribuible) Observa:

Ficheros y Carpetas del Programa





En este ejemplo se supone que la carpeta distribuible (dist) contiene: Tendrá que indicar también el nombre del fichero executable de su programa, el - Una carpeta de librería (lib) cual se encuentra también dentro de la - Una carpeta para la base de carpeta distribuible. En este ejemplo se datos (base) supone que el fichero se llama - - Una carpeta para los informes gestion.jar. Escriba usted el nombre de (informes) su programa. - Una carpeta para las imágenes (imágenes) Y este es el fichero de icono que ha introducido en la carpeta distribuible.

Usted tendrá que indicar el nombre que le haya dado a sus subcarpetas.

7. Ahora tiene que añadir un nuevo fichero dentro de la carpeta Distribuible que configura la creación de accesos directos en el menú inicio cuando el programa se instala en Windows. Este fichero se llamará shortcutSpec.xml. Este fichero tiene el siguiente contenido (no es necesario que lo entienda, solo fíjese en los elementos resaltados):





8. Debes crear este fichero con el contenido anterior tal cual. Siempre es igual. Solo tienes que variar los elementos seleccionados en verde tal como se indica a continuación:

tu programa, el nombre que le quieras dar al acceso directo, el fichero ejecutable .jar de tu programa (aquí suponemos que se llama gestion.jar, tu tendrás que averiguar como se llama el tuyo) y el nombre del fichero de icono.

Esta parte crea un icono para desinstalar el

programa. Debes indicar el nombre que le quieres dar a este acceso directo. Aquí lo hemos nombrado “Desinstalar Taller Mecánico”, porque el programa gestiona un taller. En vuestro caso tendréis que indicar el nombre adecuado según vuestro programa.

Creación de un Instalable con IZPack. GENERACIÓN DEL INSTALABLE.

1. Una vez realizados los pasos anteriores (siempre son los mismos) hay que generar el fichero Instalable. Para ello debes entrar en el símbolo del sistema.

2. Debes acceder a la carpeta del programa IZPack. Para ello, debes ejecutar el siguiente comando MS-DOS: CD C:\ARCHIVOS DE PROGRAMA\IZPACK

El resultado será que accederás a la carpeta del programa IZPACK:

3. Una vez dentro de la carpeta del programa IzPack, debes ejecutar el siguiente comando: bin\compile

camino\carpeta\install.xml -b

camino\carpeta

Donde camino\carpeta es el camino de la carpeta distribuible de tu proyecto. Por ejemplo, supongamos que tienes la carpeta distribuible llamada dist en una carpeta llamada proyectos en el disco duro. (c:\proyectos\dist) Entonces tendrías que indicar el siguiente comando para crear el instalable: bin\compile

c:\proyectos\dist\install.xml -b

c:\proyectos\dist

4. Al ejecutar este comando, se generará un fichero llamado install.jar dentro de la carpeta distribuible. Este es el fichero de instalación. 5. Si ejecuta este fichero aparecerá un programa de instalación que le guiará a través de varios pasos por la instalación de su programa. El resultado será que instala su programa en el menú inicio e incluso, si activa la opción correspondiente durante la instalación, se creará un acceso directo en el escritorio a su programa.

Creación de un Instalable con IZPack. DISTRIBUCIÓN DEL INSTALABLE.

1. Una vez creada la carpeta de distribución con el fichero install.jar dentro de ella, solo hay que guardar esta carpeta en un CD y entregárselo al cliente. 2. El cliente solo tiene que introducir el CD, entrar dentro de él y ejecutar con un doble clic el fichero de instalación install.jar. Y el programa se instalará automáticamente. 3. Es necesario que el cliente tenga instalada la máquina virtual de java en su ordenador para que la instalación sea posible. Por eso es recomendable incluir en el CD la máquina virtual de java para que el usuario pueda instalarla también antes de instalar su programa.

CONCLUSIÓN La distribución de un programa java es tan sencilla como copiar la carpeta distribuible dist en el ordenador del cliente. Sin embargo, si el cliente carece de conocimientos básicos de informática podemos crear un fichero de instalación dentro de la carpeta distribuible para que el usuario solo tenga que entrar dentro de ella y hacer doble clic sobre el fichero de instalación. Para generar el fichero de instalación, es necesario usar un programa llamado IZPACK. Se introducirán varios ficheros dentro de la carpeta distribuible, necesarios para la creación del instalable, y luego se generará el instalador. Una vez creado el instalador dentro de la carpeta distribuible, esta se copiará en un CD y se pasará al cliente. Es recomendable que el CD contenga la máquina virtual de java para que el cliente también la pueda instalar. Hay que tener en cuenta que si el cliente no tiene instalada la máquina virtual de java no se podrá realizar la instalación del programa.

METODOLOGÍA DE LA PROGRAMACIÓN JAVA

PRIMEROS PROGRAMAS Ejercicio 1 Realice un programa en java con las siguientes características: La ventana principal tendrá los siguientes elementos: -

Una etiqueta que contenga su nombre. Nombre de la etiqueta: etiNombre Una etiqueta que contenga su ciudad. Nombre de la etiqueta: etiCiudad Un botón con el texto “Ocultar Nombre”. Nombre del botón: btnOcultarNombre Un botón con el texto “Visualizar Nombre”. Nombre del botón: btnVisuNombre Un botón con el texto “Ocultar Ciudad”. Nombre del botón: btnOcultarNombre Un botón con el texto “Visualizar Ciudad”. Nombre del botón: btnVisuCiudad

El funcionamiento del programa será el siguiente: -

Cuando se pulse el botón btnOcultarNombre, se debe ocultar la etiqueta etiNombre. Cuando se pulse el botón btnVisuNombre, se debe visualizar la etiqueta etiNombre. Cuando se pulse el botón btnOcultarCiudad, se debe ocultar la etiqueta etiCiudad. Cuando se pulse el botón btnVisuCiudad, se debe visualizar la etiqueta etiCiudad.

Para hacer esto debe programar el evento actionPerformed de cada botón. Usará el método setVisible de cada etiqueta para visualizarlas u ocultarlas.

Ejercicio 2 Creará un programa java cuya ventana principal contenga los siguientes componentes: -

Un cuadro de texto. El nombre será txtTexto. Una etiqueta vacía (sin texto dentro). El nombre será etiTexto1. Otra etiqueta vacía (sin texto dentro). El nombre será etiTexto2. Un botón con el texto “Traspasa 1”. El nombre será btnTraspasa1. Un botón con el texto “Traspasa 2”. El nombre será btnTraspasa2.

El programa funcionará de la siguiente forma: -

Cuando el usuario pulse el botón “Traspasa 1”, lo que se haya escrito dentro del cuadro de texto se copiará dentro de la etiqueta 1. Cuando el usuario pulse el botón “Traspasa 2”, lo que se haya escrito dentro del cuadro de texto se copiará dentro de la etiqueta 2.

Para hacer esto programará el evento actionPerformed de cada botón. Usará el método setText para situar el texto en la etiqueta, y getText para recoger el texto del cuadro de texto.

Ejercicio 3 Se pide que realice un programa en java cuya ventana principal incluya los siguientes componentes: -

Un cuadro de texto llamado txtTexto. Una etiqueta vacía llamada etiTexto. Un botón con el texto “Vaciar” llamado btnVaciar.

El programa funcionará de la siguiente forma: -

Cuando el usuario escriba en el cuadro de texto txtTexto, lo que escriba pasará inmediatamente a la etiqueta etiTexto. (Tendrá que programar el evento keyPressed del cuadro de texto)

-

Cuando el usuario pulse el botón “Vaciar” el texto contenido en el cuadro de texto y en la etiqueta se borrará. (Tendrá que programar el evento actionPerformed)

Tendrá que usar el método setText para colocar texto en la etiqueta y usar el método getText para recoger el texto escrito en el cuadro de texto.

Ejercicio 4 Se pide que realice un programa en java cuya ventana principal contenga los siguientes elementos: -

Un cuadro de texto llamado txtNombre. Un cuadro de texto llamado txtCiudad. Una etiqueta llamada txtFrase. Un botón con el texto “Aceptar” llamado btnAceptar. Un botón con el texto “Desactivar” llamado btnDesactivar. Un botón con el texto “Activar” llamado btnActivar.

El programa funcionará de la siguiente forma: -

El usuario introducirá un nombre en el cuadro de texto txtNombre. Por ejemplo “Juan”. El usuario introducirá una ciudad en el cuadro de texto txtCiudad. Por ejemplo “Jerez”. Cuando el usuario pulse el botón “Aceptar”, entonces aparecerá un mensaje en la etiqueta llamada txtFrase indicando como se llama y donde vive. Por ejemplo: Usted se llama Juan y vive en Jerez.

-

Cuando el usuario pulse el botón “Desactivar”, entonces los dos cuadros de texto se desactivarán. Cuando el usuario pulse el botón “Activar”, los dos cuadros de texto se volverán a activar.

Tendrá que programar el evento actionPerformed de los botones. Tendrá que usar la concatenación de cadenas. Recuerde que se pueden concatenar cadenas a través del operador +. Tendrá que usar el método setText para colocar el texto en la etiqueta y el método getText para recoger el texto de cada cuadro de texto. Tendrá que usar el método setEnabled para activar o desactivar cada cuadro de texto.

Ejercicio 5 Debe realizar un programa java cuya ventana principal contenga los siguientes elementos: -

Cuatro etiquetas, conteniendo distintas palabras cada una. Puede llamarlas: etiPal1, etiPal2, etiPal3 y etiPal4.

-

Otra etiqueta que contenga el texto “Ocultar”. Esta etiqueta se llamará etiOcultar y tendrá un tamaño más grande que las otras y un color de fondo.

El programa debe funcionar de la siguiente forma: -

Cuando el puntero del ratón “sobrevuele” la etiqueta etiOcultar, las etiquetas con las palabras deben desaparecer.

-

Cuando el puntero del ratón salga de la superficie de la etiqueta etiOcultar, entonces las etiquetas con las palabras volverán a aparecer.

Tendrá que programar los eventos mouseEntered y mouseExited para que el programa detecte cuando el ratón entra o sale de la etiqueta etiOcultar. Debe usar el método setVisible de las etiquetas para ocultarlas o visualizarlas.

Ejercicio 6 Debe realizar un programa java cuya ventana principal contenga los siguientes elementos: -

Una etiqueta que contenga su nombre. Esta etiqueta se llamará etiNombre. Esta etiqueta debe tener un color de fondo. Un botón con el texto “Esquina”. Este botón se llamará btnEsquina. Un botón con el texto “Centro”. Este botón se llamará btnCentro. Un botón con el texto “Agrandar”. Este botón se llamará btnAgrandar. Un botón con el texto “Achicar”. Este botón se llamará btnAchicar.

El programa debe funcionar de la siguiente forma: -

Cuando el usuario pulse el botón “Esquina”, la etiqueta etiNombre se colocará en la esquina de la ventana.

-

Cuando el usuario pulse el botón “Centro”, la etiqueta etiNombre se colocará en el centro de la ventana.

-

Cuando el usuario pulse el botón “Agrandar”, la etiqueta etiNombre cambiará de tamaño, agrandándose.

-

Cuando el usuario pulse el botón “Achicar”, la etiqueta etiNombre cambiará de tamaño, empequeñeciéndose.

-

Cuando el usuario lleve el puntero sobre uno de los botones, el botón cambiará de tamaño agrandándose. Cuando el puntero salga del botón, el botón volverá a su tamaño normal.

Debe programar los eventos actionPerformed, mouseEntered y mouseExited para los botones. Tendrá que usar el método setLocation para cambiar la posición de la etiqueta. Este método recibe como parámetro la posición x e y donde situará el componente. Tendrá que usar el método setSize para cambiar el tamaño de la etiqueta y de los botones. Este método recibe como parámetro el ancho y alto del componente. La propiedad preferredSize permite definir un tamaño inicial a cada componente de la ventana.

Ejercicio 7

Se pide realizar un programa java que tenga los siguientes elementos en la ventana principal: -

Una etiqueta con el texto que quiera. Esta etiqueta se llamará etiTexto. Un botón con el texto “Azul”. Este botón se llamará btnAzul. Un botón con el texto “Rojo”. Este botón se llamará btnRojo. Un botón con el texto “Verde”. Este botón se llamará btnVerde. Un botón con el texto “Fondo Azul”. Este botón se llamará btnFondoAzul. Un botón con el texto “Fondo Rojo”. Este botón se llamará btnFondoRojo. Un botón con el texto “Fondo Verde”. Este botón se llamará btnFondoVerde. Un botón con el texto “Transparente”. Este botón se llamará btnTransparente. Un botón con el texto “Opaca”. Este botón se llamará btnOpaca.

El programa debe funcionar de la siguiente forma: -

Cuando se pulse el botón “Azul”, el texto de la etiqueta se pondrá de color azul. Cuando se pulse el botón “Rojo”, el texto de la etiqueta se pondrá de color rojo. Cuando se pulse el botón “Verde”, el texto de la etiqueta se pondrá de color verde. Cuando se pulse el botón “Fondo Azul”, el fondo de la etiqueta se pondrá de color azul. Cuando se pulse el botón “Fondo Rojo”, el fondo de la etiqueta se pondrá de color rojo. Cuando se pulse el botón “Fondo Verde”, el fondo de la etiqueta se pondrá de color verde. Cuando se pulse el botón “Transparente”, la etiqueta dejará de ser opaca. Cuando se pulse el botón “Opaca”, se activará la propiedad opaca de la etiqueta.

Debe programar los eventos actionPerformed de cada botón. Para cambiar el color de fondo de una etiqueta, usará el método setBackground. Para cambiar el color del texto de una etiqueta, usará el método setForeground. Para indicar el color azul usará Color.BLUE. Para indicar el color rojo, usará Color.RED. Y para indicar el color verde usará Color.GREEN. Para hacer que una etiqueta sea opaca o no, usará el método setOpaque.

PROGRAMACIÓN JAVA

PROGRAMAS CON CÁLCULOS Ejercicio 1 Realice un programa para calcular el total de una venta. El programa tendrá una ventana con al menos los siguientes elementos: -

Un cuadro de texto llamado txtUnidades donde el usuario introducirá las unidades vendidas. Un cuadro de texto llamado txtPrecio donde el usuario introducirá el precio unidad. Una etiqueta llamada etiTotalSinIva. Una etiqueta llamda etiIva. Una etiqueta llamada etiTotalMasIva. Un botón llamado btnCalcular.

El programa funcionará de la siguiente forma: -

El usuario introducirá las unidades y el precio y luego pulsará el botón Calcular. El programa entonces calculará el total de la venta, el iva y el total más iva y presentará dichos resultados en cada etiqueta.

Ejercicio 2 Realice un programa para calcular la nota final de un alumno. El programa tendrá una ventana con al menos los siguientes elementos: -

Un cuadro de texto llamado txtPrimerTrimestre. Un cuadro de texto llamado txtSegundoTrimestre. Un cuadro de texto llamado txtTercerTrimestre. Una etiqueta llamada etiNotaFinal. Una etiqueta llamada etiResultado. Un botón llamado btnCalcular.

El programa funcionará de la siguiente forma: -

El usuario introducirá las notas de los tres trimestres en los cuadros de texto correspondientes. Cuando se pulse el botón Calcular, el programa calculará la nota media y la mostrará en la etiqueta llamada etiNotaFinal. Si la nota final es menor de 5, entonces en la etiqueta etiResultado aparecerá la palabra SUSPENSO. Si la nota final es 5 o más, entonces en la etiqueta etiResultado aparecerá la palabra APROBADO. Si la nota final fuera un suspenso, entonces las etiquetas etiNotaFinal y etiResultado deben aparecer de color rojo. En caso contrario aparecerán de color negro.

Ejercicio 3 Realizar un programa para calcular el área y el perímetro de un círculo. El programa debe tener una ventana con al menos los siguientes elementos: -

Un cuadro de texto llamado txtRadio, donde el usuario introducirá el radio. Una etiqueta llamada etiArea, donde se mostrará el área del círculo. Una etiqueta llamada etiPerimetro, donde se mostrará el perímetro del círculo.

El programa funcionará de la siguiente forma: -

El usuario introducirá un radio dentro del cuadro de texto llamado radio. Al pulsar la tecla Enter sobre dicho cuadro de texto, el programa calculará el área y el perímetro y los mostrará en las etiquetas correspondientes.

-

Si el usuario introduce un radio negativo, en las etiquetas debe aparecer la palabra “Error” en color rojo.

-

Use el elemento PI de la clase Math para hacer este ejercicio.

Ejercicio 4 Realizar un programa para calcular potencias de un número. El programa le permitirá al usuario introducir una base y un exponente. Luego el programa podrá calcular la potencia de la base elevada al exponente. El programa deberá usar la clase Math. El diseño de la ventana queda a su elección.

Ejercicio 5 Realizar un programa que calcule la raíz cuadrada de un número. El programa tendrá los siguientes elementos en la ventana únicamente: -

Un cuadro de texto llamado txtNumero. Una etiqueta llamada etiRaiz.

El programa funcionará de la siguiente forma: cuando el usuario escriba un número en el cuadro de texto txtNumero, inmediatamente aparecerá su raíz cuadrada en la etiqueta. Para ello, tendrá que programar el evento keyReleased del cuadro de texto. Use la clase Math para realizar el cálculo de la raíz cuadrada.

Ejercicio 6 Realice un programa que contenga dos cuadros de texto: txtPalabra1, y txtPalabra2. La ventana tendrá también un botón llamado btnConcatena y una etiqueta llamada etiTexto. El usuario introducirá las dos palabras dentro de los cuadros de texto y luego pulsará el botón Concatena. El resultado será que en la etiqueta etiTexto aparecerán las dos palabras escritas concatenadas. Por ejemplo, si el usuario escribe en el primer cuadro de texto “Lunes” y en el segundo “Martes”, en la etiqueta aparecerá: “LunesMartes”.

Ejercicio 7 Realizar un programa que muestre 10 etiquetas llamadas respectivamente: etiUna, etiDos, etiTres, etc... Estas etiquetas contendrán los números del 0 al 9. Aparte, la ventana tendrá un cuadro de texto llamado txtNumero. Se pide que cuando el usuario lleve el ratón sobre una de las etiquetas, aparezca en el cuadro de texto el número correspondiente. Los números se van añadiendo al cuadro de texto. Por ejemplo, si el usuario lleva el puntero sobre la etiqueta Uno, luego sobre la etiqueta Tres y luego sobre la etiqueta Uno, en el cuadro de texto debería haber aparecido lo siguiente: 131. Añada un botón llamado btnBorrar, que al ser pulsado borre el contenido del cuadro de texto.

Ejercicio 8 Se pide realizar un programa para resolver las ecuaciones de segundo grado. Las ecuaciones de segundo grado tienen la siguiente forma:

ax2+bx+c=0 Dados unos valores para a, b y c, se debe calcular cuanto vale x. Una ecuación de segundo grado puede tener 0, 1 o 2 soluciones. Para saber el número de soluciones de una ecuación de segundo grado se debe realizar el siguiente cálculo:

R = b2 – 4ac Si R es menor de cero, la ecuación no tiene solución. Si R da 0, la ecuación tiene una solución. Si R es mayor de cero, la ecuación tiene dos soluciones. Cuando existe una solución, esta se calcula de la siguiente forma: x = -b / (2a) Cuando existen dos soluciones, estas se calculan de la siguiente forma: x = (-b + raiz(R) ) / (2a) x = (-b – raiz(R) ) / (2a) (raíz es la raíz cuadrada)

Realice el programa para resolver las ecuaciones de segundo grado. El diseño de la ventana queda a su elección. Procure que el programa indique cuando hay o no soluciones, y que las muestre de forma adecuada.

PROGRAMACIÓN JAVA

CUADROS DE MENSAJE, CONFIRMACIÓN E INTRODUCCIÓN DE DATOS

Ejercicio 1 Realice un programa para calcular la división de un número A entre un número B. El programa tendrá los siguientes elementos en la ventana: -

Dos cuadros de texto llamados txtA y txtB donde se introducirán los dos números.

-

Un botón “Calcular División” llamado btnDivision.

-

Una etiqueta llamada etiResultado donde aparecerá el resultado.

El programa debe funcionar de la siguiente forma: -

Cuando se pulse el botón “Calcular División” se calculará la división del número A entre el B y el resultado aparecerá en la etiqueta etiResultado.

-

Si el usuario introduce un valor 0 dentro del cuadro de texto del número B, entonces el programa mostrará un mensaje de error (Use un JOptionPane.showMessage)

-

Si el usuario introduce un valor menor que cero en cualquiera de los dos cuadros de texto, entonces también se mostrará un error.

Ejercicio 2 Realice un programa que permita calcular el sueldo total de un empleado. Para ello, el programa tendrá los siguientes elementos en la ventana: -

Un cuadro de texto llamado txtSueldoBase. Un cuadro de texto llamado txtMeses. Un botón llamado btnCalcular. Una etiqueta llamada etiResultado.

El programa funcionará de la siguiente forma: -

El usuario introducirá en el cuadro de texto txtSueldoBase la cantidad bruta que cobra el trabajador al mes. En el cuadro de texto txtMeses introducirá el número de meses trabajados. Al pulsar el botón calcular se calculará el sueldo a percibir por el empleado. Se calculará así: Total a percibir = (SueldoBase – 10% del SueldoBase) * Meses

-

Cuando se pulse el botón calcular, antes de que aparezca el sueldo en la etiqueta de resultado, el programa debe pedirle al usuario que introduzca una contraseña. Solo si la contraseña es correcta el programa mostrará el sueldo total.

-

Para introducir la contraseña use un JOptionPane.showInputDialog.

-

Si el usuario introduce una contraseña incorrecta, el programa mostrará un aviso (JOptionPane.showMessage) y el resultado no se mostrará.

Ejercicico 3

Realizar un programa para calcular el índice de masa corporal de una persona. Para ello, creará una ventana con los siguientes elementos: -

Un cuadro de texto llamado txtPeso, donde se introducirá el peso de la persona. Un cuadro de texto llamado txtTalla, donde se introducirá la talla. Una etiqueta llamada etiIMC donde aparecerá el Indice de masa corporal calculado. Un botón llamado btnCalcular y otro llamado btnLimpiar.

El programa funcionará de la siguiente forma: -

El usuario introducirá un peso y una talla en los cuadros de texto. Luego pulsará el botón calcular para calcular el índice de masa corporal, el cual se calcula así: 2

IMC = Peso / Talla -

El IMC calculado aparecerá en la etiqueta, y además, aparecerá un mensaje indicando la conclusión a la que se llega, la cual puede ser una de las siguientes según el IMC:

IMC =18 y =20 y =27 y =30 y =35 y =40 y

CONCLUSIÓN Anorexia Delgadez Normalidad Obesidad (grado 1) Obesidad (grado 2) Obesidad (grado 3) Obesidad mórbida

El mensaje puede ser algo así: “Su IMC indica que tiene anorexia”, por ejemplo. Este mensaje aparecerá en un JOptionPane.showMessage. -

Cuando pulse el botón Limpiar, se borrarán los cuadros de texto Peso y Talla. Antes de que esto ocurra, el programa debe pedir confirmación, con un cuadro de diálogo de confirmación (JOptionPane.showConfirmDialog). El cuadro de confirmación tendrá el siguiente aspecto:

¿Desea borrar los datos? SI NO Según lo elegido por el usuario se borrarán los cuadros de texto o no.

PROGRAMACIÓN JAVA CADENAS Ejercicio 1 Realice un programa cuya ventana tenga los siguientes elementos: -

Un cuadro de texto llamado txtFrase. Varias etiquetas. (Llámelas como quiera) Un botón “Analizar” llamado btnAnalizar.

El programa funcionará de la siguiente forma: -

El usuario introducirá una frase en el cuadro de texto, y luego pulsará el botón Analizar.

-

Al pulsar Analizar, el programa mostrará la siguiente información en las etiquetas: o o o o

-

La frase en mayúsculas. La frase en minúsculas. Número de caracteres de la frase. Número de caracteres de la frase sin contar los espacios.

Si el usuario pulsa Analizar cuando no hay ninguna frase introducida en el cuadro de texto, el programa debe mostrar un error emergente (JOptionPane)

Ejercicio 2 Realice un programa cuya ventana tenga los siguientes elementos: -

Un cuadro de texto llamado txtFrase y otro llamado txtSubcadena. Varias etiquetas. Un botón “Analizar” llamado btnAnalizar.

El programa funcionará de la siguiente forma: -

El usuario introducirá una frase en el cuadro de texto txtFrase, y luego introducirá una palabra en el cuadro de texto txtSubcadena, y luego pulsará el botón Analizar.

-

Al pulsar el botón, el programa debe mostrar la siguiente información: o o o o

-

La posición en la que se encuentra la primera aparición de la palabra en la frase. La posición en la que se encuentra la última aparición de la palabra en la frase. Mostrará el texto que hay en la frase antes de la primera palabra. Mostrará el texto que hay en la frase después de la última palabra.

Por ejemplo, si la frase fuera: Un globo, dos globos, tres globos. La luna es un globo que se me escapó. Y la palabra fuera globo, entonces la información a mostrar sería: Posición inicial: 3 Posición final: 49 Texto anterior: Un Texto posterior: que se me escapó

-

Si la palabra no se encuentra en la frase, el programa mostrará un error emergente y no se presentará nada en las etiquetas.

Ejercicio 3 Realice un programa que tenga los siguientes elementos: -

Un cuadro de texto llamado txtFrase. Un cuadro de texto llamado txtPalabra1. Un cuadro de texto llamado txtPalabra2. Un cuadro de texto llamado txtPalabra3. Un cuadro de texto llamado txtPalabra4. Varias etiquetas. Un botón “Analizar” llamado btnAnalizar.

El programa funcionará de la siguiente forma: -

El usuario introducirá una frase en el cuadro de texto txtFrase, y tres palabras en los cuadros de texto de las palabras.

-

Al pulsar el botón Analizar, el programa debe indicar la siguiente información en las etiquetas: o o o o

Indicará si la frase es igual a la palabra 1. Indicará si la frase empieza por la palabra 2. Indicará si la frase termina por la palabra 3. Indicará si la palabra 4 está contenida en la frase, y en el caso de que esté contenida, se indicará la posición inicial en la que se encuentra.

PROGRAMACIÓN JAVA CADENAS (CONTINUACIÓN) Ejercicio 1 Realizar un programa cuya ventana tenga los siguientes elementos: -

Un cuadro de texto llamado txtFrase. Varias etiquetas. Un botón “Analizar” llamado btnAnalizar.

El programa debe contar cuantas vocales tiene la frase. El funcionamiento será el siguiente: -

El usuario escribirá una frase en el cuadro de texto txtFrase. Luego se pulsará el botón Analizar.

-

El programa mostrará en las etiquetas el número de a, de e, de i de o y de u que se encuentran en la frase.

-

Tenga en cuenta que puede haber vocales en mayúsculas y en minúsculas.

-

Si el usuario no introduce nada en el cuadro de texto txtFrase, entonces el programa debería mostrar un error.

Ejercicio 2 Realizar un programa cuya ventana tenga los siguientes elementos: -

Un cuadro de texto llamado txtDNI. Una etiqueta llamada etiDNI. Un botón “Preparar DNI” llamado btnPrepararDNI.

El programa funcionará de la siguiente forma: -

El usuario introducirá un DNI en el cuadro de texto llamado txtDNI y luego pulsará el botón Preparar DNI. El resultado será que el DNI introducido aparecerá “preparado” en la etiqueta etiDNI.

-

A continuación se explica como preparar el DNI: El usuario puede introducir un DNI con uno de estos formatos: 31.543.234-A 31.543.234 A 31.543.234A 31 543 234 A etc. Sin embargo, cuando el usuario pulse el botón Preparar DNI, en la etiqueta etiDNI debe aparecer el DNI con el siguiente formato: 31543234A Es decir, sin ningún espacio y sin puntos ni guiones.

-

Si el usuario no introduce nada en el cuadro de texto del DNI y pulsa el botón, entonces debe aparecer un error emergente (JOptionPane).

Ejercicio 3 Se pide hacer un programa que le permita al usuario introducir una palabra en latín de la primera declinación, y a continuación generar sus “casos” en plural y singular. Las palabras de la primera declinación en latín son sustantivos femeninos (la mayoría), que terminan en a, como por ejemplo: ROSA o ANIMA. Estas palabras tienen las siguientes variantes o “casos”: Por ejemplo, para la palabra ROSA, sus casos son los siguientes: CASO NOMINATIVO VOCATIVO ACUSATIVO GENITIVO DATIVO ABLATIVO

SINGULAR Rosa Rosa Rosam Rosae Rosae Rosa

PLURAL Rosae Rosae Rosas Rosarum Rosis Rosis

Por ejemplo, para la palabra ANIMA, sus casos son los siguientes: CASO NOMINATIVO VOCATIVO ACUSATIVO GENITIVO DATIVO ABLATIVO

SINGULAR Anima Anima Animam Animae Animae Anima

PLURAL Animae Animae Animas Animarum Animis Animis

Debes observar que algunos casos son exactamente iguales a la palabra inicial, como por ejemplo el Nominativo Singular. Otros casos, en cambio, se construyen añadiendo algunas letras al final de la palabra inicial. Por ejemplo, el Acusativo singular se construye añadiendo una “m” a la palabra inicial. Para construir el Dativo y Ablativo plural, es necesario concatenar la palabra inicial (sin la a final) con “is”. Por ejemplo, en el caso de la palabra Rosa, se concatenaría: Ros + is. TENIENDO EN CUENTA LO ANTERIOR, SE PIDE REALIZAR EL SIGUIENTE PROGRAMA: Realice un programa cuya ventana tenga los siguientes elementos: -

Un cuadro de texto txtPalabra. Doce etiquetas al menos correspondientes a los 6 casos en singular y plural. Un botón “Declinar” llamado btnDeclinar.

El programa funcionará de la siguiente forma: -

El usuario introducirá una palabra en latín de la primera declinación en el cuadro de texto, y luego pulsará el botón “Declinar”. Entonces en las etiquetas aparecerán los casos declinados de la palabra.

-

Si el usuario introduce una palabra que no termine en “a”, entonces el programa dará un error, ya que dicha palabra no es de la primera declinación.

-

Tenga en cuenta que la palabra introducida puede estar en mayúsculas o minúsculas.

PROGRAMACIÓN JAVA EXCEPCIONES Ejercicio 1 Realizar un programa que le permita al usuario introducir una frase, una posición inicial y una posición final. (Tres cuadros de texto llamados txtFrase, txtPosIni y txtPosFin. El programa debe mostrar la subcadena contenida entre la posición inicial y la posición final (use una etiqueta etiSubcadena) Esto sucederá cuando se pulse un botón “Analizar” llamado btnAnalizar. El código de este programa puede generar errores de ejecución (excepciones), en el caso de que el usuario no introduzca nada en el cuadro de texto de la frase, o en el caso de que el usuario introduzca un valor incorrecto de los cuadros de texto de las posiciones. El programa debe ser capaz de capturar las excepciones producidas y mostrar un mensaje de error.

Ejercicio 2 Realizar un programa que pida las coordenadas de una recta, es decir, las coordenadas del punto p1 (x1, y1) y las coordenadas del punto p2 (x2,y2). Así pues el programa tendrá cuatro cuadros de texto: txtX1, txtY1, txtX2 y txtY2 donde el usuario introducirá las coordenadas. El programa debe calcular la distancia de la recta, usando la siguiente fórmula:

Raíz( (x2-x1)2 + (y2-y1)2 ) Añada un botón “Calcular” llamado btnCalcular que realice el cálculo. El código que introduzca en este botón debe ser capaz de capturar cualquier tipo de excepción producida. Interesa que aparezca un mensaje indicando el tipo de error producido, y el tipo de excepción.

Ejercicio 3 Realice un programa que le pida dos números al usuario. Ambos números deben estar comprendidos entre 0 y 100. El programa debe calcular la división y el resto del mayor entre el menor. El programa debe capturar todo tipo de excepciones producidas en el código. Además, debe hacer que si el usuario introduce un número no comprendido entre 0 y 100, el código genere una excepción propia

PROGRAMACIÓN JAVA LA CLASE JFRAME Ejercicio 1

Realizar un programa cuya ventana contanga los siguientes elementos: -

Un cuadro de texto llamado txtTitulo. Un botón “Cambiar Título” llamado btnCambiarTitulo. Un botón “Maximizar” llamado btnMaximizar. Un botón “Minimizar” llamado btnMinimizar. Un botón “Restaurar” llamado btnRestaurar. Un cuadro de texto llamado txtPosicionX. Un cuadro de texto llamado txtPosicionY. Un botón “Mover” llamado btnMover. Un botón “Centrar” llamado btnCentrar. Un botón “Estilo Java” llamado btnEstiloJava. Un botón “Estilo Windows” llamado btnEstiloWindows. Un botón “Rojo” llamado btnRojo. Un botón “Verde” llamado btnVerde. Un botón “Azul” llamado btnAzul.

El funcionamiento del programa será el siguiente: -

Si el usuario pulsa el botón “Cambiar Titulo”, el título de la ventana cambiará, colocándose como título lo que el usuario haya escrito en el cuadro de texto txtTitulo.

-

Si el usuario pulsa el botón “Maximizar”, la ventana se maximizará.

-

Si el usuario pulsa el botón “Minimizar”, la ventana se minimizará.

-

Si el usuario pulsa el botón “Restaurar”, la ventana se restaurará.

-

Si el usuario pulsa el botón “Mover”, la ventana se colocará en la posición de la pantalla que venga indicada por los valores x, y, introducidos respectivamente en los cuadros de texto txtPosicionX y txtPosicionY.

-

Si el usuario pulsa el botón “Centrar”, la ventana se colocará en el centro de la pantalla.

-

Si el usuario pulsa el botón “Estilo Java”, entonces toda la ventana cambiará a la visualización Java.

-

Si el usuario pulsa el botón “Estilo Windows”, entonces toda la ventana cambiará a la visualización Windows.

-

Si el usuario pulsa uno de los botones de color, entonces el fondo de la ventana se cambiará al color indicado.

Además, el programa contará con las siguientes características:

-

Al iniciarse el programa, este debe pedir una contraseña al usuario. Si el usuario introduce la contraseña correcta, entonces el usuario entrará en el programa. En caso contrario el programa se cerrará.

-

Al finalizar el programa, este debe pedir una confirmación al usuario: ¿Desea salir del programa?

Si el usuario responde Sí, entonces el programa finalizará. En caso contrario, el programa seguirá funcionando.

PROGRAMACIÓN JAVA CUADROS DE VERIFICACIÓN, BOTONES DE OPCIÓN Ejercicio 1 Se pide realizar un programa que tenga los siguientes elementos en la ventana principal:

-

-

-

Un panel con el título “Ingredientes”. No hace falta que le de un nombre. Un panel con el título “Tamaño”. No hace falta que le de un nombre. Cuatro JCheckBox con los textos: o “Bacon” – nombre: chkBacon o “Anchoas” – nombre: chkAnchoas o “Cebolla” – nombre: chkCebolla o “Pimiento” – nombre: chkPimiento Tres JRadioButtons con los textos: o “Pequeña” – nombre: optPequenia o “Mediana” – nombre: optMediana o “Familiar” – nombre: optFamiliar Un botón “Total” llamado btnTotal. Una etiqueta con borde llamada etiResultado.

El programa funcionará de la siguiente forma: -

El usuario elegirá un tamaño para la pizza que quiere pedir. Este tamaño puede ser uno solo de los siguientes: pequeña, mediana o familiar. El usuario elegirá también los ingredientes que desee. Puede seleccionar uno o varios ingredientes. Al pulsar el botón Total, el programa calculará y mostrará en la etiqueta etiResultado el precio de la pizza, teniendo en cuenta lo siguiente: Una pizza pequeña cuesta 7 euros. Una pizza mediana cuesta 9 euros. Una pizza familiar cuesta 11 euros.

Si se le añade como ingrediente Bacon, hay que aumentar el precio de la pizza en 1,50 euros. Si se le añade como ingrediente Anchoas, hay que aumentar el precio de la pizza en 1,80 euros. Si se le añade como ingrediente Cebolla, hay que aumentar el precio de la pizza en 1,00 euros. Si se le añade como ingrediente Pimiento, hay que aumentar el precio de la pizza en 1,20 euros.

Tenga en cuenta esto otro: -

Al ejecutar el programa, debe estar seleccionada la opción pizza familiar por defecto, y no debe estar seleccionada ninguno de los ingredientes.

-

Al iniciarse el programa, debe aparecer un cuadro indicando el nombre del programa. Por ejemplo: PIZZERÍA JAVA, y el nombre del programador.

-

Al intentar cerrar el programa, este debe pedir confirmación para salir. Solo si el usuario acepta salir del programa este se cerrará.

PROGRAMACIÓN JAVA LISTAS Y COMBOS Ejercicio 1 Se pide realizar un programa que tenga el siguiente aspecto:

Esta ventana contiene lo siguiente: -

Un cuadro de lista con los siguientes productos (y sus precios): Sistema de Localización – 120 Centro de Control – 60 Modem GSM – 45 Este cuadro de lista se llamará lstProductos.

-

Un cuadro de texto donde se introducirán las unidades que se envían, llamado txtUnidades.

-

Un combo llamado cboDestino donde tendremos los siguientes elementos: Península Canarias Extranjero

-

Un combo llamado cboTipoEnvio donde tendremos los siguientes elementos: Normal Urgente

-

Un botón “Calcular” llamado btnCalcular. Una etiqueta con un borde llamada etiResultado. Otras etiquetas informativas.

El programa funcionará de la siguiente forma: -

El usuario marcará un producto de los tres que aparecen en la lista. El usuario indicará el número de unidades que se enviarán del producto. El usuario indicará el tipo de destino. El usuario indicará el tipo de envío. Al pulsar Calcular, el programa mostrará en la etiqueta etiResultado el total del envío, teniendo en cuenta lo siguiente: El total del envío se calcula así: Total = (Unidades * Precio del producto) + coste destino + coste tipo El Coste de Destino puede ser uno de los siguientes: Península – 20 Canarias – 25 Extranjero – 30 El Coste del Tipo de Envío puede ser uno de los siguientes: Normal – 3 Urgente – 10

Tenga en cuenta esto otro: -

Si se pulsa calcular cuando no hay seleccionado ningún producto, el programa mostrará un mensaje de error emergente indicándolo.

-

Si las unidades son incorrectas, debería mostrarse también un error.

PROGRAMACIÓN JAVA LISTAS, COMBOS, MODELOS Ejercicio 1 Se pide realizar un programa que tenga el siguiente aspecto:

Esta ventana contiene lo siguiente: -

Un cuadro de lista llamado lstMeses. Varios botones de opción con los siguientes nombres: o Un botón “Trimestre 1” llamado optTri1. o Un botón “Trimestre 2” llamado optTri2. o Un botón “Trimestre 3” llamado optTri3. o Un botón “Trimestre 4” llamado optTri4. o Todos estos botones deben estar agrupados a través de un objeto ButtonGroup al que llamaremos grupoTrimestres. o Interesará que estos botones estén dentro de un panel.

-

Un botón “Rellenar” llamado btnRellenar. Un botón “Vaciar” llamado btnVaciar. Una etiqueta etiMes con un borde.

El programa funcionará de la siguiente forma: -

El usuario elegirá una de las opciones: Trimestre 1, Trimestre 2, Trimestre 3, Trimestre 4. A continuación el usuario pulsará el botón Rellenar, y entonces el cuadro de lista se rellenará con los meses correspondientes al trimestre elegido. Por ejemplo, si el usuario elige el Trimestre 2 y pulsa el botón, entonces el cuadro de lista contendrá: Abril, Mayo, Junio. Cuando el usuario pulse el botón Vaciar, el cuadro de lista se vaciará. Cuando el usuario haga clic sobre un elemento de la lista, este debe aparecer en la etiqueta etiMes.

Ejercicio 2 Se pide realizar un programa que tenga el siguiente aspecto:

Esta ventana contiene lo siguiente: -

Un combo llamado cboProgresion. Un cuadro de texto llamado txtInicio. Un cuadro de texto llamado txtFin. Un cuadro de texto llamado txtIntervalo. Un botón “Rellenar” llamado btnRellenar. Una etiqueta llamada etiResultado. Un botón “Vaciar” llamado btnVaciar.

El programa funcionará de la siguiente forma: -

El usuario introducirá un número en txtInicio. Luego introducirá otro número en txtFin. También introducirá un número en txtIntervalo. Al pulsar el botón Rellenar, el combo se rellenará con el listado de números comprendidos entre el número inicial y el número final con intervalo el indicado.

-

Un ejemplo: o El usuario introduce en txtInicio un 2 o El usuario introduce en txtFin un 12 o El usuario introduce en txtIntervalo un 3 o Al pulsar el botón Rellenar, el combo debe rellenarse con los siguientes números: 2, 5, 8, 11 o Observa, del 2 al 12 saltando de 3 en 3.

-

Al elegir cualquiera de los números en el combo, este debe mostrarse en la etiqueta etiResultado. Al pulsarse el botón “Vaciar” el combo se vacia.

-

A tener en cuenta. - Si el usuario introduce algo que no sea un número en los cuadros de texto, el programa debería mostrar un error. -

El número inicial debe ser menor que el número final. En caso contrario el programa debe mostrar un error.

PROGRAMACIÓN JAVA JTOGGLEBUTTONS Ejercicio 1 Realice un programa cuya ventana tenga el siguiente aspecto:

-

Los botones numerados desde el 1 al 6 son JToggleButtons. Sus nombres son respectivamente: botonUno, botonDos, etc…

-

Tres botones normales: o o o

-

Desactivar Todos. Nombre: btnDesactivarTodos Activar Todos. Nombre: btnActivarTodos Total. Nombre: btnTotal

Y una etiqueta con borde llamada etiResultado.

El programa funcionará de la siguiente forma: -

Cuando el usuario pulse Total, en la etiqueta debe aparecer la suma de los números de los botones seleccionados. Por ejemplo, si están seleccionados el 2 y el 4, aparecerá un 6.

-

Si se pulsa el botón Desactivar Todos, todos los botones activados se desactivarán.

-

Si se pulsa el botón Activar Todos, se activarán todos los botones.

PROGRAMACIÓN JAVA JSLIDER Ejercicio 1 Una empresa de productos químicos necesita calcular la cantidad de agua y sales que necesita mezclar para fabricar un detergente. Para ello hay que tener en cuenta tres factores: -

Litros que se quieren fabricar. (Es un valor entre 1 y 100) Calidad del detergente. (Es un valor entre 0 y 10) Densidad deseada. (Es un valor entre 50 y 200)

La cantidad de agua necesaria viene dada por la siguiente fórmula: Litros de agua = 2 * Litros a Fabricar + Calidad / Densidad La cantidad de sales necesaria viene dada por la siguiente fórmula: Sales = (Calidad * Litros a Fabricar) / (100 * Densidad)

Se pide realizar un programa cuya ventana contenga lo siguiente: -

Un JSlider llamado deslizadorLitros que represente los litros a fabricar. Sus valores estarán comprendidos entre 1 y 100. El valor inicial del deslizador será 50.

-

Un JSlider llamado deslizadorCalidad que represente la calidad del detergente. Sus valores estarán comprendidos entre 0 y 10. El valor inicial será 5.

-

Un JSlider llamado deslizadorDensidad que represente la densidad deseada. Sus valores estarán comprendidos entre 50 y 200. El valor inicial será 100.

-

Una etiqueta con borde llamada etiLitros donde aparecerá la cantidad de litros elegida en el deslizador de litros.

-

Una etiqueta con borde llamada etiCalidad donde aparecerá la cantidad de calidad elegida en el deslizador de calidad.

-

Una etiqueta con borde llamada etiDensidad donde aparecerá la cantidad de densidad elegida en el deslizador de calidad.

-

Una etiqueta con borde etiLitrosAgua, que contenga el total de litros de agua calculados.

-

Una etiqueta con borde etiSales, que contenga el total de sales calculados.

-

Varias etiquetas informativas / algún panel.

La ventana puede tener el siguiente aspecto:

El usuario arrastra los deslizadores...

...Los valores de las etiquetas cambian...

...Se calcula automáticamente los totales...

El programa funcionará de la siguiente forma: -

El usuario arrastrará los deslizadores y automáticamente aparecerá en las etiquetas los valores de cada deslizador y la cantidad total de aguas y sales calculada.

PROGRAMACIÓN JAVA JSPINNER Ejercicio 1 Se propone hacer un juego sencillo, que simule la apertura de una caja a través de una combinación. Para ello, debes crear una ventana como la que sigue:

Esta ventana contiene los siguientes elementos: -

Tres JSpinner a los que se les llamará: spiCentenas, spiDecenas y spiUnidades. Estos JSpinner solo admitirán los valores entre 0 y 9.

-

Un botón btnAbrir.

-

Una etiqueta con borde llamada etiResultado.

Funcionamiento del programa: -

La clave de apertura será la siguiente: 246 (Esto no lo sabe el usuario)

-

El usuario modificará los valores de los JSpinner y luego pulsará el botón Abrir.

-

Si los valores de los JSpinner coinciden con la clave, 246, entonces en la etiqueta debe aparecer el mensaje “Caja Abierta”.

-

Si los valores de los JSpinner forman un número menor que 246, entonces en la etiqueta debe aparecer el mensaje: “El número secreto es mayor”.

-

Si los valores de los JSpinner forman un número mayor que 246, entonces en la etiqueta debe aparecer el mensaje: “El número secreto es menor”.

Nota: -

Ten en cuenta que el valor obtenido de un JSpinner no es un número. Si quieres obtener el número entero del JSpinner tienes que usar un código como este: int x; x = Integer.parseInt(spiValor.getValue().toString()) ;

-

Sea el número A las centenas, el B las decenas y el C las unidades. Para calcular el número correspondiente hay que hacer el siguiente cálculo: N = A * 100 + B * 10 + C

Ejemplo de funcionamiento: Seleccionas los números...

Pulsas Abrir...

En la etiqueta aparece un mensaje indicando si acertaste o el número es menor o mayor que la clave.

PROGRAMACIÓN JAVA JSROLLBAR Ejercicio 1 Imagine que le encargan realizar un programa que contenga un ecualizador. Para permitir al usuario el control de las distintas frecuencias se usarán varias barras de desplazamiento. La ventana del programa que debe construir debe ser similar a la siguiente:

Esta ventana contiene lo siguiente: -

Cinco etiquetas con borde que puede llamar etiFrecuencia1, etiFrecuencia2, etc…

-

Cinco barras de desplazamiento que tienen de nombre desFrecuencia1, desFrecuencia2, etc…

-

Cinco cuadros de verificación que puede llamar chkFrecuencia1, chkFrecuencia2, etc…

-

Un panel con título y dentro de él tres botones de opción a los que puede llamar optPelícula, optConcierto y optPlano. (Para estos tres botones de radio necesitará un objeto del tipo ButtonGroup al que puede llamar grupoEcualización)

El programa funcionará de la siguiente forma: -

Las cinco barras de desplazamiento deben tener valores comprendidos entre un mínimo de 0 y un máximo de 10. El incremento unitario debe ser de 1 y el incremento en bloque de 2.

-

Cada vez que se mueva una barra, en su etiqueta correspondiente aparecerá el valor de dicha barra (un valor que estará entre 0 y 10) Comprueba que cuando el usuario active al máximo una barra en la etiqueta aparezca un 10.

-

Las casillas de verificación indican el bloqueo o no de cada barra. Si el usuario activa una casilla de verificación, entonces su barra correspondiente quedará bloqueada de forma que no pueda ser modificada. Cuando se vuelva a desactivar la casilla la barra se volverá a activar (Use el método setEnabled)

-

Las opciones de ecualización predefinidas permitirán colocar las barras de desplazamiento en unos valores predefinidos. Concretamente: o

Si el usuario activa la opción Película, las barras quedarán con los siguientes valores respectivamente: 2, 5, 8, 5, 2

-

o

Si el usuario activa la opción Concierto, las barras quedarán con los siguientes valores respectivamente: 9, 5, 1, 5, 9

o

Si el usuario activa la opción Plano, todas las barras se colocarán a 5.

Cuando el programa se inicie, todas las barras deben estar a 5 y la opción Plano debe estar activada.

PROGRAMACIÓN JAVA BARRA DE MENÚS Ejercicio 1 Le encargan un programa que controle las luces de las oficinas de un edificio. Concretamente, se tienen que controlar tres oficinas, y cada una de ellas tiene dos luces principales y una de seguridad. La ventana principal del programa debe mostrar tres paneles como el que sigue:

Se supondrá que las distintas luces de cada oficina se pueden encender o apagar activando o desactivando los cuadros de verificación.

El programa además debe de contar con un menú con una opción llamada “Activación” y otra llamada “Info” La opción Activación contendrá las siguientes opciones:

-

La opción “Apagar Todas” desactivará todos los cuadros de verificación de las luces. La opción “Encender Todas” activará todos los cuadros de verificación de las luces.

-

La opción “Dia” contiene las siguientes subopciones:

-

Si se activa la opción “Dia – Oficina 1”, entonces se encenderán (activarán) las luces principal y secundaria de la oficina 1, y se apagará (desactivará) la luz de seguridad de dicha oficina.

-

Si se activa la opción “Dia – Oficina 2”, entonces se encenderán (activarán) las luces principal y secundaria de la oficina 2, y se apagará (desactivará) la luz de seguridad de dicha oficina.

-

Si se activa la opción “Dia – Oficina 3”, entonces se encenderán (activarán) las luces principal y secundaria de la oficina 3, y se apagará (desactivará) la luz de seguridad de dicha oficina.

-

Si se activa la opción “Dia – Todas”, entonces todas las oficinas tendrán las luces principal y secundarias encendidas, y apagadas las luces de seguridad.

La opción Noche contiene las siguientes opciones:

-

Si se activa la opción “Noche – Oficina 1”, entonces se apagarán las luces principal y secundaria de la oficina 1 y se encenderá la luz de seguridad.

-

Si se activa la opción “Noche – Oficina 2”, entonces se apagarán las luces principal y secundaria de la oficina 2 y se encenderá la luz de seguridad.

-

Si se activa la opción “Noche – Oficina 3”, entonces se apagarán las luces principal y secundaria de la oficina 3 y se encenderá la luz de seguridad.

-

Si se activa la opción “Noche – Todas”, entonces se apagarán todas las luces principales y secundarias de todas las oficinas y se encenderán todas las luces de seguridad.

La opción Salir permitirá finalizar el programa.

La opción Info del menú contendrá lo siguiente:

-

La opción Principales mostrará un JOptionPane donde se indique cuantas luces principales hay encendidas ahora mismo y cuantas apagadas.

-

La opción Secundarias mostrará un JOptionPane donde se indique cuantas luces secundarias hay encendidas ahora mismo y cuantas apagadas.

-

La opción Seguridad mostrará un JOptionPane donde se indique cuantas luces de seguridad hay encendidas y cuantas apagadas.

-

La opción Acerca de... mostrará un JOptionPane que contendrá el nombre del programa y del programador.

MEJORA OPCIONAL Sería interesante que cada cuadro de verificación estuviera acompañado de una pequeña imagen que representara una bombilla encendida o apagada según el estado de la luz. Use etiquetas para contener las imágenes. En el EJERCICIO DE INVESTIGACIÓN 2 puede encontrar más información sobre esto.

PROGRAMACIÓN JAVA BARRA DE HERRAMIENTAS Ejercicio 1 Se va a mejorar el programa de control de luces de la hoja anterior, añadiéndole una barra de herramientas. El programa anterior tenía un menú con las siguientes opciones:

El objetivo del ejercicio es crear una barra de herramientas que contenga un botón para algunas de las opciones principales del menú. Concretamente, la barra de herramientas contendrá los siguientes botones: -

Un botón para la opción Apagar Todas. Un botón para la opción Encender Todas. Un botón para activar todas las oficinas en modo “día” (es equivalente a la opción Activación – Día – Todas) Un botón para activar todas las oficinas en modo “noche” (es equivalente a la opción Activación – Noche – Todas) Un botón para conseguir información sobre las luces principales (Info – Principales) Un botón para conseguir información sobre las luces secundarias (Info – Secundarias) Un botón para conseguir información sobre las luces de seguridad (Info – Seguridad)

En cada actionPerformed de cada botón de la barra de herramientas se tiene que programar el mismo código que el de la opción del menú correspondiente.

PROGRAMACIÓN JAVA MENÚS CONTEXTUALES Ejercicio 1 Se va a añadir una mejora más en el programa de luces realizado en las hojas anteriores. Concretamente se añadirá un menú contextual que contenga las siguientes opciones: Apagar Todas Encender Todas ------------------- (Separador) Modo Día Modo Noche ------------------- (Separador) Principales Secundarias Seguridad

Este menú aparecerá cuando el usuario haga clic con el botón derecho del ratón sobre el fondo de la ventana de su programa. Es decir, tendrá que programar el clic del ratón sobre el formulario. Las opciones del menú contextual coinciden con las opciones de la barra de menús de la siguiente forma: Apagar Todas Encender Todas Modo Día Modo Noche Principales Secundarias Seguridad

– Activación / Apagar Todas – Activación / Encender Todas – Activación / Día / Todas – Activación / Día / Noche – Info / Principales – Info / Secundarias – Info / Seguridad

Programe dichas opciones de forma que se realice la operación correspondiente a su opción del menú hermana.

PROGRAMACIÓN JAVA DIALOGO ABRIR/GUARDAR FICHERO

Notas Iniciales Supongamos que tiene en su proyecto un objeto del tipo JFileChooser llamado elegirFichero. A través del método getSelectedFile obtiene el fichero que ha elegido el usuario. El método getSelectedFile devuelve en realidad un objeto del tipo File. Así pues, puede hacer lo siguiente: int resp; File f;

//una respuesta //un fichero

resp=elegirFichero.showOpenDialog(this); if (resp==JFileChooser.APPROVE_OPTION) { f = elegirFichero.getSelectedFile(); }

Si observa este código, verá que se crea una variable f de tipo File. Y f es el fichero elegido por el usuario en el cuadro de diálogo Abrir. Los objetos del tipo File poseen diversos métodos que permiten obtener información sobre el fichero y realizar algunas operaciones con ellos. He aquí algunos métodos que se pueden usar: getName()

- Devuelve el nombre del fichero.

Por ejemplo: String nombre = f.getName(); //La variable nombre contendría el nombre del fichero f

getPath()

- Devuelve el camino completo del fichero.

Por ejemplo: String camino = f.getPath(); //La variable camino contendría el camino del fichero f

exists()

- Devuelve verdadero o falso según exista o no.

Por ejemplo: if (f.exists() == true ) { JOptionPane.showMessageDialog(null, “El fichero f existe”); } else { JOptionPane.showMessageDialog(null, “El fichero f no existe”); }

delete()

- Borra el fichero

Por ejemplo: f.delete();

//Borra el fichero f

Ejercicio Teniendo en cuenta las ideas expuestas, realizar un programa cuya ventana tenga el siguiente aspecto:

El programa funcionará de la siguiente forma: -

Si el usuario pulsa el botón “Info Fichero”, aparecerá el cuadro de diálogo (JFileChooser) Abrir, donde el usuario podrá elegir un fichero. Una vez que el usuario elija un fichero y pulse el botón “Abrir”, aparecerán los datos del fichero en las distintas etiquetas.

-

En la etiqueta nombre del fichero aparecerá el nombre del fichero (use getName())

-

En la etiqueta camino del fichero aparecerá el camino completo del fichero (use getPath())

-

En la etiqueta existe? aparecerá un mensaje indicando si el fichero existe o no (use exists()) Queda claro que si el fichero no existe no se puede visualizar ni su nombre ni su camino.

-

Si el usuario, en cambio, pulsa el botón “Eliminar Fichero”, entonces el programa mostrará el cuadro de diálogo “Abrir” y una vez que el usuario elija un fichero, el programa lo borrará (use delete()) Pida una confirmación antes de eliminar el fichero. Tenga cuidado al comprobar esta opción.

PROGRAMACIÓN JAVA VARIABLES GLOBALES

Ejercicio 1

Realizar un programa cuya ventana contenga los siguientes elementos: -

Un cuadro de texto llamado txtNumero. Un botón “Acumular” llamado btnAcumular. Un botón “Resultados” llamado btnResultados. Un botón “Reiniciar” llamado btnReiniciar. Una etiqueta con borde llamada etiMayor. Una etiqueta con borde llamada etiSuma. Una etiqueta con borde llamada etiMedia. Una etiqueta con borde llamada etiCuenta.

El programa funcionará de la siguiente forma: -

El usuario introducirá un número en el cuadro de texto txtNumero y luego pulsará el botón “Acumular”. En ese momento se borrará el número introducido en el cuadro de texto.

-

Este proceso lo repetirá el usuario varias veces.

-

Cuando el usuario pulse el botón “Resultados”, deben aparecer en las etiquetas los siguientes datos: o o o o

-

El número mayor introducido hasta el momento. La suma de los números introducidos hasta el momento. La media de los números introducidos hasta el momento. Cuantos números ha introducido el usuario hasta el momento.

El botón “Reiniciar” reinicia el proceso borrando todo lo que hubiera en las etiquetas de resultados y reiniciando las variables globales.

Variables globales a usar Para que sirva de ayuda, se recomienda que use las siguientes variables globales: -

Una variable double llamada mayor. Contendrá en todo momento el número mayor introducido. Una variable double llamada suma. Contendrá en todo momento la suma de los números introducidos. Una variable int llamada cuenta. Contendrá en todo momento la cuenta de todos los números introducidos hasta ahora.

Al comenzar el programa, y al pulsar el botón “Reiniciar”, será necesario que estas tres variables se inicien a 0.

Nota. Se supondrá que todos los número introducidos serán mayores o iguales a 0.

Ejercicio 2 Realizar un programa que contenga los siguientes elementos en su ventana: -

Un cuadro de texto llamado txtNumero. Un cuadro de texto llamado txtApuesta Un botón “Jugar” llamado btnJugar. Una etiqueta llamada etiNumero. Una etiqueta llamada etiResultado que contendrá inicialmente un “100”.

El programa funcionará de la siguiente forma: -

Se trata de un juego de adivinación. El usuario introducirá un número entre 1 y 10 en el cuadro de texto txtNumero.

-

Luego introducirá una apuesta en el cuadro de texto txtApuesta.

-

Y a continuación pulsará el botón “Jugar”.

-

El programa calculará entonces un número al azar entre 1 y 10 y lo mostrará en la etiqueta etiNumero.

-

Si el número introducido por el usuario coincide con el número elegido al azar por la máquina, entonces el usuario gana y se le debe sumar lo apostado a la cantidad que tenía en dicho momento. Si el usuario pierde entonces se le debe restar lo apostado a la cantidad que tenía. El total que le quede debe aparecer en la etiqueta resultado.

-

Al empezar el programa el usuario tiene 100 euros de bote.

Las variables globales a usar son las siguientes: -

Solo se necesita una variable global de tipo double a la que puedes llamar ganancias. Esta variable estará inicializada al comienzo del programa a 100.

Para hacer que el ordenador calcule un número aleatorio entre 1 y 10 debes usar el siguiente código: int n; //el numero double aleatorio; aleatorio = Math.random(); aleatorio = aleatorio * 10; aleatorio = Math.floor(aleatorio); aleatorio = aleatorio + 1; n = (int) aleatorio; (Más información sobre la generación de números aleatorios en el Ejercicio de Investigación Nº3)

PROGRAMACIÓN JAVA

CENTRALIZAR CÓDIGO

Ejercicio 1 Realice un programa cuya ventana tenga el siguiente aspecto:

Esta ventana consta de los siguientes elementos: -

Un cuadro de texto txtHoras que contiene un 0. Un cuadro de texto txtMinutos que contiene un 0. Varias etiquetas de información. Una contiene la palabra “Horas”, otra contiene la palabra “Minutos” y otra contiene el símbolo dos puntos (:). Un cuadro de texto vacío al que se le llamará txtCantidadMin Un botón con el signo + al que se le llamará btnSumar. Un botón con el signo – al que se le llamará btnRestar.

Además: -

Una barra de herramientas con el nombre barraHerramientas, que contenga tres botones: o Un botón herramientasSumar. o Un botón herramientasRestar. o Un botón herramientasReiniciar.

-

Asigne a estos botones el icono que quiera. Por ejemplo, iconos de relojes.

Además: -

La ventana contendrá una barra de menús a la que puede llamar barraMenus. Esta barra contiene una opción “Acción” a la que puede llamar menuAccion.

-

Dentro de la opción Acción, tendrá estas otras opciones:

-

Una opción “Sumar” a la que llamará menuSumar. Una opción “Restar” a la que llamará menuRestar. Una opción “Reiniciar” a la que llamará menuReiniciar. Y una opción “Salir” a la que llamará menuSalir. Además tendrá una serie de separadores para mejorar la presentación del menú.

El programa funcionará de la siguiente forma:

-

El usuario introducirá en el cuadro de texto txtCantidadMin una cantidad de minutos.

-

Si luego, pulsa el botón sumar, o bien activa el botón sumar de la barra de herramientas, o bien activa la opción sumar del menú, entonces los minutos escritos se suman a la hora que se muestra.

-

En cambio, si el usuario pulsa el botón restar, o bien activa el botón restar de la barra de herramientas, o bien activa la opción restar de la barra de menús, entonces los minutos escritos se restan a la hora que se muestra.

-

Si el usuario pulsa el botón reiniciar de la barra de menús o pulsa la opción reiniciar del menú, entonces la hora que se muestra se reinicia a las 00:00 horas.

Un ejemplo:

El usuario introduce 90 minutos y luego pulsa “Sumar”

Entonces aparece la nueva hora (en formato hora:minutos)

Supongamos ahora que el usuario introduce un 40 y luego pulsa “Restar”

La hora actual se actualiza después de restar los 40 minutos…

A TENER EN CUENTA

-

Se aconseja que realice un procedimiento Sumar que se encargue de hacer la suma de minutos.

-

Realice también un procedimiento Restar que se encargue de hacer la resta de minutos.

-

Realice un procedimiento Reiniciar que se encargue de reiniciar la hora.

-

Llame desde los distintos eventos al procedimiento que corresponda.

-

Se aconseja tener una variable global hora que contenga en todo momento la hora actual.

-

Se aconseja tener una variable global minutos que contenga en todo momento los minutos actuales.

-

Para calcular la nueva hora use estos algoritmos:

Sumar minutos… Supongamos que la hora actual sea las 14:25 Y que se quiera sumar 70 minutos Primero se hace el cálculo total de minutos: 14 * 60 + 25 = 865 Luego se suman los minutos: 865 + 70 = 935 El resultado se divide entre 60 y ya tenemos la nueva hora: 935 / 60 = 15 El resto de la división son los minutos: 935 % 60 = 35 La nueva hora por tanto es las 15 : 35

Restar minutos… Supongamos que la hora actual sea las 14:25 Y que se quiera restar 70 minutos Primero se hace el cálculo total de minutos: 14 * 60 + 25 = 865 Luego se le restan los minutos: 865 – 70 = 795 El resultado se divide entre 60 y ya tenemos la nueva hora: 795 / 60 = 13 El resto de la división son los minutos: 795 % 60 = 15 La nueva hora por tanto es las 13 : 15

PROGRAMACIÓN JAVA CUADROS DE DIÁLOGO Ejercicio 1 Se pide realizar un programa que facilite el cálculo del precio de implantación de un determinado software en una empresa. Se pretende calcular el coste de instalación, el coste de formación y el coste de mantenimiento. Para ello, debe realizar un proyecto con una ventana como la que sigue:

Esta ventana tiene tres cuadros de textos, para cada uno de los costes. Si se desea, se puede introducir directamente cada uno de los costes en estos cuadros de textos y al pulsar el botón Calcular aparecerá la suma de los tres en la etiqueta Total. Por otro lado, cada cuadro de texto tiene asignado un botón con tres puntos que permitirá facilitar el cálculo de cada coste a través de un cuadro de diálogo. Cuadro de diálogo Coste de Instalación En el caso de que se pulse el botón correspondiente al Coste de Instalación, el cuadro de diálogo que debe aparecer tiene que ser el siguiente (haz que sea modal):

Aquí se indicará el número de copias de la versión simplificada del programa a instalar, y el número de copias de la versión completa. Al pulsar el botón Aceptar, se mostrará el coste total por instalación en el cuadro de texto correspondiente de la ventana principal y luego se cerrará el cuadro de diálogo. Para calcular el coste de instalación, ten en cuenta lo siguiente:

Cada copia de la versión simplificada cuesta 120 euros, y cada copia de la versión completa cuesta 180 euros. Si por ejemplo, el usuario introduce 1 copia simplificada y 2 de la versión completa, el coste total será: coste por instalación = 120 * 1 + 180 * 2 = 480 Si se pulsa el botón Cancelar, el cuadro de diálogo se cierra y no se muestra nada en el cuadro de texto del coste de instalación de la ventana principal.

Cuadro de diálogo Coste de Formación En el caso de que se pulse el botón correspondiente al Coste de Formación, el cuadro de diálogo que debe aparecer tiene que ser el siguiente (haz que sea modal):

El coste de formación se calculará multiplicando el número de alumnos por el número de horas por 10 euros. Por ejemplo, si el usuario introduce 3 alumnos y 12 horas, el coste por formación será: coste por formación = 2 * 12 * 10 = 240 Al pulsar el botón Aceptar, se calculará dicho coste y se introducirá en el cuadro de texto del coste de formación de la ventana principal (luego el cuadro de texto se cerrará). Si se pulsa el botón Cancelar, el cuadro de diálogo simplemente se cerrará, sin que ocurra nada más.

Cuadro de diálogo Coste de Mantenimiento En el caso de que se pulse el botón correspondiente al Coste de Mantenimiento, el cuadro de diálogo que debe aparecer tiene que ser el siguiente (haz que sea modal):

Al pulsar Aceptar, el programa calculará el coste de mantenimiento y lo presentará en el cuadro de texto correspondiente de la ventana principal (y luego se cerrará el cuadro de diálogo) La forma de calcular el coste de mantenimiento es la siguiente: -

Si se elige un mantenimiento Anual, entonces el coste será de 600 euros. Si se elige un mantenimiento Semestral, entonces el coste será de 350 euros. Si se elige un mantenimiento del tipo Puesta en funcionamiento entonces el coste será de 200 euros.

Si se pulsa el botón Cancelar, el cuadro de diálogo se cierra sin más.

MEJORAS Ayuda Añade un botón a la ventana principal con esta forma:

Al pulsar este botón, aparecerá un cuadro de diálogo de ayuda con este aspecto (haz que no sea modal y que esté siempre por encima de la ventana principal:

Al pulsar el botón Cerrar, el cuadro de diálogo simplemente se cerrará. Para hacer el texto, usa el objeto JTextPane, y su propiedad text. Este objeto permite crear cuadros con gran cantidad de texto. Ten en cuenta que cuando añadas un JTextPane este aparecerá dentro de un JScrollPane.

Pantalla de Splash (Presentación) Se añadirá un nuevo cuadro de diálogo al proyecto que servirá como pantalla de presentación (a estos cuadros de diálogo se les suele denominar Splash) Diseñe este cuadro de diálogo como quiera. Puede añadir varias imágenes, colocar el texto donde quiera, etc.

Debe mostrar este cuadro de diálogo al comenzar el programa (en el evento windowOpened del formulario) Si quiere mostrar el cuadro de diálogo de la presentación en el centro de la pantalla, puede usar este código (se supone que el cuadro de diálogo se llama dialogoPres): int x=(int) (Toolkit.getDefaultToolkit().getScreenSize().getWidth()/2 - dialogoPres.getWidth()/2); int y=(int) (Toolkit.getDefaultToolkit().getScreenSize().getHeight()/2 - dialogoPres.getHeight()/2); dialogoPres.setLocation(x,y);

El cuadro de diálogo debe tener un botón Cerrar, o bien, debe tener la posibilidad de cerrarse cuando el usuario haga clic sobre él en cualquier parte. Para mejorar su cuadro de diálogo de presentación, se recomienda que active la propiedad del cuadro de diálogo llamada undecorated. Esta propiedad oculta la barra de título del cuadro de diálogo.

PROGRAMACIÓN JAVA DISEÑO DE VENTANA DESDE CÓDIGO Ejercicio 1 Realice un proyecto cuya ventana tenga el siguiente diseño. Este diseño lo tiene que hacer totalmente desde código, sin usar la ventana de diseño del NetBeans:

Tenga en cuenta lo siguiente: -

La ventana debe tener como título “Ejercicio 1” El tamaño de la ventana al arrancar el programa debe ser de 350 x 400 Haga que la ventana aparezca en el centro de la pantalla. El recuadro de color verde con el texto RESULTADO es una etiqueta. El botón con el texto “metros/seg” es un JToggleButton y debe estar activado al arrancar el programa. En la parte inferior de la ventana hay un JSlider. Su valor mínimo será 0 y su valor máximo será 100. El valor inicial del JSlider tiene que ser 20. El JSlider debe mostrar sus marcas (método setPaintTicks) y la separación entre marcas debe ser de 5 (método setMinorTickSpacing)

Ejercicio 2 Realice un proyecto cuya ventana principal tenga el siguiente diseño. Este diseño lo tiene que hacer directamente desde código, sin usar la ventana de diseño del NetBeans.

Tenga en cuenta lo siguiente: -

La ventana debe tener el título “Ejercicio 2” El tamaño de la ventana debe ser de 300x300 La ventana debe aparecer en el centro de la pantalla al arrancar el programa. En la parte derecha la ventana contiene un JList con las ocho provincias andaluzas. En la parte izquierda la ventana contiene un JComboBox con unos tipos de artículos. (El combo se muestra desplegado para que puedas ver la lista de tipos de artículos) En la parte inferior hay una etiqueta vacía con color CYAN de fondo.

PROGRAMACIÓN JAVA ASIGNACIÓN DE EVENTOS DESDE CÓDIGO Ejercicio 1 Realice un programa para calcular el área y el perímetro de un círculo. La ventana del programa debe tener un aspecto parecido al siguiente:

El usuario introducirá un radio y… -

Si pulsa el botón Área se calculará el área del círculo. (actionPerformed del botón de Área) Si pulsa el botón Perímetro se calculará el perímetro del círculo. (actionPerformed del botón de Perímetro) Si pulsa el botón Limpiar en el cuadro de texto aparecerá un 0 y la etiqueta de resultado (la de color rojo) se vaciará. (actionPerformed del botón Limpiar)

Todo el programa debe ser realizado directamente desde código, sin usar la ventana de diseño de NetBeans.

Ejercicio 2 Realice un programa para calcular la velocidad de un vehículo. La ventana del programa tendrá el siguiente diseño:

El programa funcionará de la siguiente forma:

-

El usuario introducirá un Espacio y un Tiempo, y al pulsar Enter (actionPerformed) en cualquiera de los dos cuadros de textos aparecerá la velocidad en la etiqueta de resultados de color amarillo. La velocidad se calcula así: velocidad = espacio / tiempo

-

El usuario también puede introducir una Velocidad y un Tiempo en los cuadros de textos de la parte derecha. Si pulsa Enter en cualquiera de estos cuadros de texto (actionPerformed) entonces se calculará el Espacio en la etiqueta roja de resultados. El espacio se calcula así: espacio = velocidad * tiempo

Tendrá que programar por tanto el evento actionPerformed de cada cuadro de texto. Tanto el diseño como la programación de eventos debe realizarla directamente desde código, sin usar la ventana de diseño del NetBeans.

PROGRAMACIÓN JAVA ASIGNACIÓN DE EVENTOS DESDE CÓDIGO. EVENTOS DE RATÓN Ejercicio 1 Realice un programa que tenga el siguiente aspecto:

En la ventana hay dos etiquetas. Una de ellas es de color negro y la otra es de color gris. Están situadas de tal forma que la etiqueta de color negro simula la sombra de la otra etiqueta. La etiqueta de color gris debe tener asociados los siguientes eventos del ratón: -

mouseEntered. Cuando el ratón entre en la superficie de la etiqueta debe cambiar su texto por “Pulsame”.

-

mouseExited. Cuando el ratón salga de la superficie de la etiqueta debe cambiar el texto de esta otra vez por “Etiqueta”.

-

mousePressed. Cuando se pulse un botón del ratón sobre la etiqueta, esta debe moverse de sitio de forma que parezca que se ha pulsado como si fuera un botón (observa la imagen)

(sin pulsar)

(pulsada)

Para conseguir esto, debes colocar la etiqueta gris sobre la etiqueta negra. Cuando suceda este evento también debes cambiar el texto de la etiqueta por “Está pulsado” -

mouseReleased. Cuando se suelte el botón del ratón, la etiqueta volverá a su posición normal, y el texto cambiará a “Pulsado”.

PROGRAMACIÓN JAVA ASIGNACIÓN DE EVENTOS DESDE CÓDIGO. GENERALIDADES Ejercicio 1 Realice un programa que tenga el siguiente aspecto:

En la ventana hay simplemente un JSlider (deslizador) y una etiqueta que contiene inicialmente el valor 50. Se pide lo siguiente: 1. Realice el diseño de la ventana desde código. 2. Interesa que cuando se modifique el valor del JSlider, dicho valor aparezca en la etiqueta. Esto se tiene que realizar programando el evento correspondiente desde código. Aquí tiene la información necesaria: a. b. c. d.

El evento a programar del JSlider se llama: stateChanged Pertenece al oyente llamado ChangeListener Asignarás el oyente al JSlider con el método addChangeListener El evento lleva como parámetro un objeto evt del tipo ChangeEvent

3. Interesa que al girar la rueda del ratón cambie el valor del JSlider. Para controlar el movimiento de la rueda del ratón debe asignar un evento al formulario (this). Aquí tiene la información necesaria del evento para la rueda del ratón: a. b. c. d.

El evento a programar de el formulario (this) se llamad mouseWheelMoved Pertenece al oyente llamado MouseWheelListener Se asigna a la ventana (this) con el método addMouseWheelListener El evento lleva como parámetro un objeto evt del tipo MouseWheelEvent

PISTA: El objeto evt pasado como parámetro del evento de la rueda del ratón contiene información sobre como se ha movido la rueda. Este objeto tiene un método llamado getUnitsToScroll que devuelve un número entero que indica cuanto se ha movido la rueda. Este número puede ser positivo o negativo según hacia donde se movió la rueda. Aprovechando esto, el evento de la rueda del ratón se puede programar así: int valor = slider.getValue(); //slider es el objeto JSlider valor = valor + evt.getUnitsToScroll(); slider.setValue(valor);

PROGRAMACIÓN JAVA ASIGNACIÓN DE EVENTOS DESDE CÓDIGO. EVENTOS DE VENTANA

Ejercicio 1 La ventana sobre la que trabajamos también tiene sus propios eventos. Estos eventos son los siguientes: -

windowOpened – Sucede cuando la ventana se abre. windowClosing – Sucede cuando la ventana va a cerrarse. windowActivated – Sucede cuando la ventana se activa. windowDeactivated – Sucede cuando la ventana se desactiva.

Los eventos de ventana pertenecen al adaptador WindowAdapter. El adaptador se asigna a la ventana (this) a través del método addWindowListener. Todos los eventos llevan como parámetro un objeto evt del tipo WindowEvent.

Teniendo en cuenta esto, realizar un programa cuya ventana tenga únicamente una etiqueta.

El programa funcionará de la siguiente forma: -

Cuando se active la ventana, aparecerá un mensaje “La ventana se ha activado” en la etiqueta central. Cuando se desactive la ventana, aparecerá un mensaje “La ventana se ha desactivado” en la etiqueta central.

Nota: Una forma de desactivar la ventana es hacer clic sobre la barra de tareas. Luego se puede volver a activar haciendo clic sobre la ventana. Además, el programa debe hacer esto otro: -

Cuando se abra la ventana, debe aparecer un mensaje de bienvenida (un JOptionPane) De la misma forma, cuando se cierre la ventana, debe aparecer un mensaje de despedida.

PROGRAMACIÓN JAVA VECTORES DE COMPONENTES

Ejercicio 1 Realizar un programa en cuya ventana aparezcan 7 JToggleButton (use un vector) Cada uno de los botones debe contener como texto un día de la semana. Los botones deben aparecer en horizontal: Añada un botón “Aceptar” a la ventana (un botón normal) y dos etiquetas. Al pulsar el botón “Aceptar” debe aparecer en una de las etiquetas el número de botones activados. También debe aparecer en la otra etiqueta los días de la semana elegidos (activos)

Ejercicio 2 Se necesita hacer un programa que muestre la siguiente ventana:

Diseñe la ventana totalmente desde código y usando vectores. Tendrá que usar los siguientes vectores: -

Un vector de etiquetas (JLabel) para cada etiqueta. Necesitarás también un vector auxiliar de String que contenga los textos de las etiquetas: “Devoluciones”, “Impagos”, “Caducidad” y “Robos”.

-

Un vector de cuadros de texto (JTextField)

-

Un vector de botones (JButton)

Tendrás que construir cada vector y luego tendrás que construir los elementos de dichos vectores, colocándolos en la ventana. El programa no tiene que hacer nada, solo limítese a diseñar la ventana.

PROGRAMACIÓN JAVA VECTORES DE COMPONENTES

Ejercicio 1 Realizar un programa donde aparezcan diez botones conteniendo los números entre el 0 y 9. Todos estos botones pertenecerán a un vector de JButton, y tendrán asociado un evento actionPerformed. Cada vez que se pulse uno de los botones, en un cuadro de texto de la ventana se añadirá el dígito correspondiente, como si estuvieramos usando una calculadora. Añadir también un botón “Borrar” (no perteneciente al vector) que permita borrar el contenido del cuadro de texto. El aspecto del programa puede ser similar al siguiente:

Se pulsó el 9 y luego el 5

COLOCACIÓN DE LOS BOTONES Para la colocación de los botones en el JFrame, se puede usar un vector de posiciones X y un vector de posiciones Y que contengan las posiciones (X,Y) de cada botón: int vectorx[]={10,40,70,10,40,70,10,40,70,10}; int vectory[]={10,40,70,10,40,70,10,40,70,10}; Y luego se puede aplicar los valores de estos vectores en el momento de usar setBounds: for (…) { … vBotones[i].setBounds(vectorx[i],vectory[i], 20,20); … }

Ejercicio 2 Se pide hacer un programa que muestre 8 etiquetas, cada una con el nombre de una provincia andaluza. Estas etiquetas estarán definidas al principio con color azul de fondo y texto negro. Creará un vector para hacer el programa que contenga las ocho etiquetas (vector de JLabel) y las situará en el formulario como desee. El programa debe funcionar de la siguiente forma: -

Al hacer clic sobre una etiqueta (mouseClicked), el color de fondo de esta cambiará a verde, mientras que el color de fondo de todas las demás se colocará en azul (para cambiar el color de fondo: setBackground y setOpaque)

-

Al sobrevolar el ratón la etiqueta (evento mouseEntered) el color del texto de la etiqueta se pondrá en amarillo (para cambiar el color de texto: setForeground).

-

Al abandonar el ratón la etiqueta (evento mouseExited) el color del texto de la etiqueta volverá a ser de color negro.

PROGRAMACIÓN JAVA

POO. CREACIÓN Y USO DE CLASES PROPIAS

Ejercicio 1 Crear un proyecto Java en NetBeans cuya ventana principal tenga el siguiente aspecto:

Ten en cuenta lo siguiente: -

Al iniciarse el programa, debe estar activada por defecto la opción Pared Norte.

-

El botón Asignar asignará el ancho y alto que se haya introducido a la pared que esté seleccionada en ese momento.

-

El botón Area mostrará en un JOptionPane el área de la pared seleccionada en ese momento.

-

El botón Perímetro mostrará en un JOptionPane el perímetro de la pared seleccionada en ese momento.

CLASE RECTANGULO PARA HACER ESTE EJERCICIO USARÁ UNA CLASE DE CREACIÓN PROPIA LLAMADA RECTÁNGULO.

La clase Rectangulo debe tener las siguientes características:

CLASE RECTANGULO Nombre de la clase: Rectangulo Propiedades de los objetos de la clase Rectangulo: Base (double) Altura (double) Valores iniciales de las propiedades de los objetos de la clase Rectangulo: Base – 100 Altura – 50 Métodos: Métodos set: setBase – permite asignar un valor a la propiedad Base. setAltura – permite asignar un valor a la propiedad Altura. Métodos get: getBase – devuelve el valor de la propiedad Base getAltura – devuelve el valor de la propiedad Altura getArea – devuelve el área del rectángulo getPerímetro – devuelve el perímetro del rectángulo Otros métodos: Cuadrar – este método debe hacer que la Altura tenga el valor de la Base.

TENDRÁ QUE PROGRAMAR ESTA CLASE E INCLUIRLA EN SU PROYECTO

UNA VEZ INCLUIDA ESTA CLASE, CREARÁ CUATRO OBJETOS DE LA CLASE RECTÁNGULO, CADA UNO DE LOS CUALES HARÁ REFERENCIA A UNA DE LAS CUATRO PAREDES:

Objetos de la clase Rectángulo que usará en el proyecto: -

ParedNorte ParedSur ParedOeste ParedEste

Para programar cada botón de la ventana principal, solo tiene que ayudarse dando órdenes a las cuatro paredes o pidiéndoles información.

Ejercicio 2 PRIMERA PARTE Trabajamos de programador para una empresa de venta por correo. Esta empresa recibe pedidos de clientes y necesita controlar la situación de cada pedido. Para facilitar la realización de aplicaciones para esta empresa se decide crear una CLASE de objetos llamada PEDIDO. La Clase Pedido permitirá crear objetos de tipo pedido. Estos objetos nos proporcionarán información sobre el estado del pedido y nos facilitará la programación de los proyectos para la empresa. SE PIDE PROGRAMAR LA CLASE PEDIDO TENIENDO EN CUENTA SUS CARACTERISTICAS, LAS CUALES SE MENCIONAN A CONTINUACIÓN:

CLASE PEDIDO Nombre de la Clase: Pedido Propiedades de los objetos de la Clase Pedido: Articulo: una cadena que indica el nombre del artículo que se ha pedido. Unidades: un entero indicando las unidades pedidas. Precio: un double indicando el precio unidad. GastosEnvio: un double indicando los gastos de envío. Descuento: un double indicando el tanto por ciento de descuento.

Valores iniciales de las propiedades de los objetos de la Clase Pedido: Articulo: (cadena vacía) Unidades: 1 Precio: 0 GastosEnvio: 3 Descuento: 0 Métodos set setArticulo – permite asignar el nombre del artículo al objeto pedido setUnidades – permite asignar el número de unidades pedidas setPrecio – permite asignar un precio unidad al artículo del pedido setGastosEnvio – permite asignar la cantidad de gastos de envío del pedido setDescuento – permite asignar el tanto por ciento de descuento del pedido Métodos get getArticulo – devuelve el nombre del artículo del pedido getUnidades – devuelve el número de unidades del artículo getPrecio – devuelve el precio del artículo del pedido getGastosEnvio – devuelve los gastos de envío del pedido getDescuento – devuelve el tanto por ciento de descuento del pedido getTotalSinIva – devuelve el total sin iva del pedido. Se calcula así: TotalSinIva = (Unidades * Precio) + gastos de envio

getIva – devuelve la cantidad de Iva del pedido. Se calcula así: Iva = TotalSinIva * 0,16

getTotalMasIva – devuelve el total del pedido más el Iva. Se calcula así: TotalMasIva = TotalSinIva + Iva

getTotalDescuento – devuelve el total del descuento. Se calcula así: TotalDescuento = TotalMasIva * Descuento / 100

getTotalPedido – devuelve el total del pedido. Se calcula así: TotalPedido = TotalMasIva – TotalDescuento

SEGUNDA PARTE

Realizar un proyecto cuya ventana principal tenga el siguiente aspecto:

El programa funcionará de la siguiente forma: -

En el panel “Datos del Pedido” se introducirán los siguientes datos del pedido a enviar: o Nombre del Artículo o Unidades pedidas o Precio unidad del artículo o Gastos de envío o Tanto Por Ciento de descuento.

-

Al pulsar el botón “Aceptar Pedido”, todos estos datos deben asignarse a un objeto llamado ped de tipo Pedido.

-

Al pulsar el botón “Ver Desglose”, deben aparecer en las distintas etiquetas (de color verde en la imagen) los siguientes datos del pedido: o o o o o o o o o

-

Nombre del Artículo Unidades pedidas Precio unidad Gastos de envío Total Sin Iva del pedido Iva del pedido Total Más iva Total de Descuento Total del Pedido.

Para hacer esto solo tendrá que pedirle información al objeto ped usando sus métodos get y luego colocar esta información en cada etiqueta.

PARA PODER REALIZAR ESTE PROYECTO SERÁ NECESARIO INCLUIR LA PROGRAMACIÓN DE LA CLASE PEDIDO REALIZADA EN EL APARTADO ANTERIOR DEL EJERCICIO. SI NO SE AÑADE LA PROGRAMACIÓN DE LA CLASE, SERÁ IMPOSIBLE CREAR EL OBJETO PED QUE NOS PERMITE MANEJAR LAS CARACTERÍSTICAS DEL PEDIDO.

PROGRAMACIÓN JAVA

POO. HERENCIA

EJERCICIO 1 Interesa crear una etiqueta propia cuya función sea la de mostrar temperaturas. Este tipo de etiqueta se llamará EtiquetaTemperatura y tendrá las siguientes características:

Propiedades temperatura – double

Métodos setTemperatura() Este método recibe como parámetro un double con la temperatura a mostrar. Esta temperatura se almacena en la propiedad temperatura. Además, este método muestra la temperatura en la etiqueta, añadiendo ºC. Por ejemplo, si la temperatura asignada fuera 10, entonces en la etiqueta aparecería: 10 ºC

getTemperatura() Este método devuelve un double con la temperatura actual.

mostrarRangoColor() Este método asignará un color a la etiqueta según la temperatura que contenga. Aquí está la escala de colores a usar: = 0 y < 10 >= 10 y < 25 >= 25 y < 35 >= 35

Azul Cyan Magenta Naranja Rojo

Si la etiqueta no contuviera un valor numérico válido, entonces se mostrará transparente (es decir, setOpaque(false) )

cambiarTemperatura() Este método recibe un valor double como parámetro. Si este valor es positivo, entonces la temperatura aumenta en este valor. Si el valor es negativo, la temperatura disminuye.

Un ejemplo de uso de una etiqueta de este tipo: etiTemp.setTemperatura(12); //en la etiqueta se mostrará 12 ºC etiTemp.mostrarRangoColor(); //la etiqueta se mostrará con color //de fondo Magenta etiTemp.cambiarTemperatura(20); //la temperatura sube 20 ºC etiTemp.mostrarRangoColor(); //la etiqueta se muestra naranja double t = etiTemp.getTemperatura(); //t contendrá un 32

Objetivo del ejercicio Debe programar la clase EtiquetaTemperatura de forma que herede de las etiquetas normales de java (JLabel) Tendrá que añadir la propiedad temperatura a la clase EtiquetaTemperatura y programar los métodos antes comentados.

EJERCICIO 2

Realiza un proyecto cuya ventana principal tenga el siguiente aspecto:

En la parte superior añadirá (a través de código) una etiqueta del tipo EtiquetaTemperatura, que estará inicializada a 0 ºC En la parte inferior añadirá tres botones y un cuadro de texto (esto lo puede hacer desde la ventana de diseño). Cada vez que se pulse el botón +, la temperatura de la etiqueta aumentará en la cantidad de grados indicados en el cuadro de texto. Y cuando se pulse el botón -, la temperatura disminuirá. Cada vez que varíe la temperatura de la etiqueta, deberá variar su color. Al pulsar el botón “Fahrenheit”, aparecerá en un JOptionPane la temperatura que tiene actualmente la etiqueta convertida a grados Fahrenheit.

PROGRAMACIÓN JAVA

POO. DIALOGOS PROPIOS

Planteamiento Inicial Todos los proyectos que hacemos en el trabajo tienen que llevar un cuadro de diálogo de presentación que contenga: -

El nombre del programa. La versión. El nombre del programador.

Resulta un rollo tener que programar el cuadro de presentación cada vez que nos encargan un nuevo proyecto, así que programaremos una Clase Propia que derive de la clase JDialog, y que represente un cuadro de diálogo que contenga el nombre del programa, la versión y el programador. Gracias a esta clase que vamos a programar, no tendremos que perder tiempo cada vez que necesitemos añadir una presentación a los futuros proyectos que hagamos en la empresa. Clase DialogoPresentacion Se programará una clase propia que se llamará DialogoPresentacion. Esta clase será un cuadro de diálogo, o, dicho de otra forma, heredará de la clase JDialog. El aspecto de un cuadro de diálogo de este tipo en funcionamiento podría ser el siguiente:

Las tres etiquetas con bordes se llaman respectivamente: etiNombrePrograma, etiVersion, etiNombreProgramador. El botón se llamará btnEmpezar. Todos estos elementos están dentro de un JPanel al que se le ha asignado un borde con relieve.

Métodos de la clase DialogoPresentacion Esta clase tendrá los siguientes métodos: setNombrePrograma -

Recibirá una cadena con el nombre del programa, y esta cadena se introducirá en la etiqueta etiNombrePrograma.

setVersion -

Recibirá una cadena con la versión del programa, y esta cadena se introducirá en la etiqueta etiVersion.

setNombreProgramador -

Recibirá una cadena con el nombre del programador, y esta cadena se introducirá en la etiqueta etiNombreProgramador.

Cuando el usuario pulse el botón “Empezar”, lo único que tiene que suceder es que se cierre el cuadro de diálogo.

Proyecto Ejemplo Debes crear un programa simple que permita calcular el área de un círculo. Este proyecto debe incluir una presentación que aparezca al principio. Esta pantalla de presentación debe contener los siguientes datos: Nombre del programa: Cálculo del Área del Círculo Versión: v 1.0 Nombre del programador: su nombre. Tendrá por supuesto, que incluir la clase DialogoPresentacion en su proyecto, y crear un objeto del tipo DialogoPresentacion. Debe asignar a este objeto los tres datos: nombre del programa, versión y programador. Y hacer que aparezca la presentación cuando se ejecute el programa. Pista. La aparición de la presentación se programará en el evento windowOpened de la ventana principal.

PROGRAMACIÓN JAVA PROGRAMACIÓN MDI Bloc de Notas MDI

Planteamiento Inicial Se pretende realizar un programa capaz de abrir ficheros de texto (.txt). Este programa será MDI, es decir, será capaz de abrir varios ficheros, mostrando sus contenidos en distintas ventanas.

Ventana Principal La ventana principal del programa constará de un menú con las siguientes opciones:

Archivo Abrir Cerrar Cerrar Todos Salir Ventana Cascada Mosaico Horizontal Mosaico Vertical

En el centro de la ventana (se recomienda un Layout del tipo BorderLayout) se colocará un panel del tipo JDesktopPane que será el encargado de contener las ventanas internas. Puede llamar a este panel panelInterno. Aspecto de la ventana principal:

panelInterno (JDesktopPane)

Ventana Interna Debe añadir a su proyecto una clase JInternalFrame para diseñar las ventanas internas. Una ventana interna constará únicamente de un objeto JTextPane que ocupará toda la ventana. Los objetos JTextPane son similares a los cuadros de texto (JTextField) con la diferencia de que pueden contener grandes cantidades de texto en varias líneas. Llame al objeto JTextPane con el nombre txtTexto.

txtTexto (JTextPane)

Estas ventanas internas contendrán el texto del fichero que se abra. Para facilitar la tarea de abrir un fichero y colocar su texto en la ventana interna debe añadir el siguiente método a la clase ventana interna: public void ponerTexto(String caminofichero) { try { File fi = new File(caminofichero); FileReader lectura = new FileReader(fi); BufferedReader entrada = new BufferedReader(lectura); String linea; String texto=""; linea = entrada.readLine(); while(linea!=null) { texto = texto+linea+"\n"; linea = entrada.readLine(); } entrada.close(); lectura.close(); txtTexto.setText(texto); } catch(Exception e) { JOptionPane.showMessageDialog(null,"Error al leer fichero."); } }

Este método recibe el camino de un fichero, y coloca dentro del JTextPane (el panel de texto) el texto contenido en el fichero. Aunque no es necesario entender el código de este método, en la parte final del enunciado se da una explicación de su funcionamiento.

Opciones principales del programa Se comenta a continuación la forma en que deben funcionar las distintas opciones del programa: Opción Archivo – Abrir Esta opción servirá para abrir un fichero .txt y mostrar su contenido en una ventana interna. Para ello, tendrá que mostrar un JFileChooser para abrir un fichero. Si el usuario selecciona un fichero, entonces tendrá que crear una ventana interna llamada por ejemplo vi, y mostrarla en el panel Interno. Finalmente, usando el método ponerTexto de la ventana interna vi deberá mostrar el contenido del fichero seleccionado en el JFileChooser. vi.ponerTexto(caminoficheroseleccionado) Al abrir un fichero de texto en una ventana, deberá aparecer el camino del fichero en la barra de título de la ventana interna. Opción Archivo – Cerrar La opción Cerrar cerrará la ventana interna que esté activa (si es que hay alguna) Opción Archivo – Cerrar Todas Esta opción cerrará todas las ventanas internas abiertas en el panel interno. Opción Archivo – Salir Permitirá salir del programa. Opción Ventana – Cascada Esta opción colocará todas las ventanas internas que haya abiertas en cascada. Esto es, una encima de otra, mostrando el título de cada una.

Opción Ventana – Mosaico Horizontal Esta opción hará visible todas las ventanas mostrándolas en horizontal, ocupando todo el panel interno. Para ello, tendrás que obtener el tamaño vertical del panel interno, y dividirlo por el número de ventanas abiertas en él. Esa cantidad será la altura de cada ventana. El ancho de cada ventana será el ancho del panel interno. Una vez calculado el ancho y alto de cada ventana debes colocar cada ventana una debajo de otra.

Opción Ventana – Mosaico Vertical Esta opción hará visible todas las ventanas mostrándolas en vertical, ocupando todo el panel interno. Para ello, tendrás que obtener el tamaño horizontal del panel interno, y dividirlo por el número de ventanas internas abiertas en él. Esa cantidad será el ancho de cada ventana. Al alto de cada ventana será el alto del panel interno. Una vez calculado el ancho y alto de cada ventana debes colocar cada ventana una al lado de otra.

EXPLICACIÓN MÉTODO ponerTexto Para realizar este ejercicio es necesario añadir a la clase de la ventana interna el siguiente método. No es necesario entender el código de este procedimiento para hacer el ejercicio, pero en cualquier caso, aquí hay una explicación de este:

public void ponerTexto(String caminofichero) { try { File fi = new File(caminofichero); FileReader lectura = new FileReader(fi); BufferedReader entrada = new BufferedReader(lectura); String linea; String texto=""; linea = entrada.readLine(); while(linea!=null) { texto = texto+linea+"\n"; linea = entrada.readLine(); } entrada.close(); lectura.close(); txtTexto.setText(texto); } catch(Exception e) { JOptionPane.showMessageDialog(null,"Error al leer fichero."); } }

Este método recibe un camino de fichero de texto y muestra dentro de un JTextPane el texto que contiene dicho fichero. La forma de acceder a un fichero para extraer su contenido es a través de “canales”. Los canales son objetos que se “enganchan” al fichero uno detrás de otro. Cada canal ofrece una serie de posibilidades al programador. Para los ficheros de texto, la forma de acceder a ellos es la siguiente: -

Camino Fichero (String)

Se crea un objeto File a partir del camino del fichero (El camino del fichero es un String) Se engancha al objeto File un objeto del tipo FileReader. (Los objetos FileReader son canales de lectura, que permiten extraer información del fichero) Se engancha al canal FileReader un objeto BufferedReader. (Los objetos BufferedReader dan facilidad al programador para extraer el texto del fichero) Finalmente, a través del método readLine del objeto BufferedReader se pueden extraer una a una las líneas de texto del fichero. Una vez finalizado el trabajo con el fichero se cierra el canal FileReader y el canal BufferedReader. Objeto Fichero (File)

Canal de Acceso al Fichero (FileReader)

Canal de Acceso al Fichero (BufferedReader)

La creación de un objeto File a partir del camino del fichero se hace con la siguiente instrucción: File fi = new File(caminofichero);

La creación de un canal FileReader y la conexión con el fichero anterior se hace a través de la siguiente instrucción: FileReader lectura = new FileReader(fi);

La creación de un canal BufferedReader y la conexión con el canal FileReader anterior se hace a través de la siguiente instrucción: BufferedReader entrada = new BufferedReader(lectura);

Una vez hecho esto, tenemos un objeto llamado entrada del tipo BufferedReader que posee un método llamado readLine que permite leer una línea de texto del fichero. A través de este método vamos leyendo líneas de texto del fichero. Hay que tener en cuenta que si al usar readLine obtenemos el valor null, es que ya no hay más texto en el fichero. Todo esto se aprovecha para crear una cadena larga con el contenido del fichero: String linea; String texto=""; linea = entrada.readLine(); while(linea!=null) { texto = texto+linea+"\n"; linea = entrada.readLine(); }

El código anterior crea una variable texto que contiene el texto completo del fichero. Este código extrae una a una las líneas de texto del fichero y las va concatenando en la variable texto. Como hemos terminado con la manipulación del fichero, es bueno cerrar los canales de comunicación con el fichero (el canal FileReader y el canal BufferedReader creados): entrada.close(); lectura.close();

Y finalmente metemos el texto extraído en el panel de texto de la ventana, el cual se llama txtTexto: txtTexto.setText(texto);

Todo esto debe estar dentro de un try ... catch ya que es un código susceptible de tener errores de ejecución (es decir, de lanzar excepciones)

PROGRAMACIÓN JAVA - BASES DE DATOS

MODELO E-R

SUPUESTO Nº 1. "CONTROL DE VENTAS" Una empresa necesita un programa para controlar las ventas que realiza diariamente. La empresa tiene una lista de clientes cuyos datos quiere controlar. Los datos que la empresa quiere guardar de cada cliente es : el CIF, el nombre, la ciudad y un teléfono de contacto. La empresa tiene una serie de comerciales que son los que realizan las ventas. La empresa quiere controlar la información de sus comerciales. Concretamente necesita almacenar de ellos sus nombres y apellidos y su móvil. A cada comercial se le asigna un número en la empresa para distinguirlos. Diariamente, los comerciales realizan ventas de productos a los clientes. Interesa almacenar información sobre dichas ventas. De cada venta interesa almacenar el nombre del producto que se vende, las unidades vendidas del artículo, el precio del producto y la fecha en que se efectuó la venta. También interesa saber la forma de pago. Debes tener en cuenta también la siguiente información : Un comercial realiza ventas. Una venta es realizada por un solo comercial. Una venta en concreto se realiza a un solo cliente. Por otro lado, un cliente comprará muchas cosas a la empresa. Es decir, se le pueden hacer muchas ventas a un cliente.

SE PIDE : 1. Identifique las entidades que participan, teniendo en cuenta el enunciado. 2. Identifique los atributos de cada entidad. 3. Indique el atributo clave para cada entidad. Si fuera necesario, añada un atributo clave a la entidad. 4. Indique las relaciones que existen entre las entidades. 5. Indique el tipo de relaciones existentes (Nota : no existen relaciones Muchas a Muchas) 6. Averigue las claves foráneas según las relaciones existentes. 7. Realice el gráfico correspondiente al Modelo E-R.

SUPUESTO Nº 2. « TRANSPORTES »

Una empresa cuenta con una serie de camiones que usa para transportar diversos productos. La empresa necesita un programa que gestione toda la información producida por esta actividad. Concretamente, la empresa necesita almacenar información sobre los camiones que posee. Necesita almacenar la matrícula de cada camión, la marca y el modelo y el año de compra. Por otro lado, la empresa tiene una serie de conductores. De cada conductor se quiere almacenar el nombre, los apellidos, el móvil y el sueldo que gana. A cada conductor se le asigna un número en la empresa. No hay dos conductores con dos números iguales. La empresa quiere controlar la información correspondiente a cada transporte que se efectúa. Concretamente quiere saber la ciudad de origen del transporte, la ciudad de destino, el material que se transporta, cuantos kilos se transporta y la fecha del transporte. Cada transporte concreto está encargado por un cliente. A la empresa le interesa tener información de los clientes que encargan transportes. La información que interesa almacenar de cada cliente es : el CIF del cliente, el nombre de la empresa, la dirección de la empresa, el teléfono de la empresa. Hay que tener en cuenta también la siguiente información : En un transporte en concreto solo participa un camión. Ahora bien, un camión se usa en muchos transportes. En cada transporte participa un solo conductor, y, por supuesto, un conductor realiza muchos transportes mientras trabaja para la empresa. Cada transporte está encargado por un solo cliente. Pero ten en cuenta que un cliente puede encargar muchos transportes.

SE PIDE : 1. Identifique las entidades que participan, teniendo en cuenta el enunciado. 2. Identifique los atributos de cada entidad. 3. Indique el atributo clave para cada entidad. Si fuera necesario, añada un atributo clave a la entidad. 4. Indique las relaciones que existen entre las entidades. 5. Indique el tipo de relaciones existentes (Nota : no existen relaciones Muchas a Muchas) 6. Averigue las claves foráneas según las relaciones existentes. 7. Realice el gráfico correspondiente al Modelo E-R.

SUPUESTO Nº 3. « MEDICIONES »

Una empresa química realiza mediciones constantemente de los materiales que contiene la tierra de distintas parcelas de cultivo, y le interesaría tener un control de toda la información que esto genera. Para ello le encargan un programa para gestionar esta información. A esta empresa le interesaría guardar información sobre cada medición que se hace. Interesa almacenar lo siguiente: fecha en que se hace la medición, hora, temperatura ambiente en el momento de hacer la medición, humedad del aire y un comentario sobre la medición (en este comentario se indicará el resultado de la medición) Cada medición se numera, de forma que no puede haber dos mediciones con el mismo número. Las mediciones las realizan químicos especializados contratados por la empresa. Esta empresa desea almacenar los datos de estos químicos: nombre, apellidos y teléfono de contacto. Las mediciones se realizan en terrenos particulares, e interesa almacenar información sobre dichos terrenos. Concretamente interesa almacenar: el número de hectáreas del terreno, nombre del propietario, DNI del propietario, teléfono de contacto del propietario, dirección del terreno. A cada terreno se le asignará un código único para distinguirlo de los demás. Las mediciones se plasman finalmente en informes recopilatorios que se envían a la empresa que ha encargado las medidas. Interesa almacenar de cada informe lo siguiente: número de informe (no hay dos informes con el mismo número), nombre de la empresa que encarga el informe, fecha en que se lanza el informe, conclusiones del informe (aquí se redactan una serie de conclusiones finales deducidas a partir de las distintas mediciones) Debe tener en cuenta también lo siguiente: Un químico realiza muchas mediciones, pero una medición la realiza solo un químico. En un mismo terreno se pueden realizar diversas mediciones, pero tenga en cuenta que una medición está realizada en un solo terreno. Un informe de mediciones plasmará el resultado de muchas mediciones, pero una medición aparecerá en un solo informe.

SE PIDE : 1. Identifique las entidades que participan, teniendo en cuenta el enunciado. 2. Identifique los atributos de cada entidad. 3. Indique el atributo clave para cada entidad. Si fuera necesario, añada un atributo clave a la entidad. 4. Indique las relaciones que existen entre las entidades. 5. Indique el tipo de relaciones existentes (Nota : no existen relaciones Muchas a Muchas) 6. Averigue las claves foráneas según las relaciones existentes. 7. Realice el gráfico correspondiente al Modelo E-R.

SUPUESTO Nº4. “REVISIONES MÉDICAS”

En un hospital se realizan distintas revisiones médicas a los pacientes ingresados, y les interesa almacenar información sobre estas revisiones. De cada revisión interesa almacenar la fecha y hora en que se hizo, peso y altura del paciente y otros resultados de dicha revisión. Cada revisión se numera de forma que no haya dos revisiones con el mismo número. Cada revisión se realiza a un solo paciente, aunque a un paciente se le pueden hacer varias revisiones mientras está ingresado. Interesa almacenar la información de cada paciente: nombre, apellidos, DNI y fecha de nacimiento del paciente. Los médicos realizan revisiones a sus pacientes. Hay que tener en cuenta que un mismo médico puede realizar revisiones a distintos pacientes, pero un paciente tiene asignado un solo médico para las revisiones. Interesa almacenar la información de cada médico: nombre, apellidos, especialidad. A cada médico se le asigna un código que es único.

SE PIDE : 1. Identifique las entidades que participan, teniendo en cuenta el enunciado. 2. Identifique los atributos de cada entidad. 3. Indique el atributo clave para cada entidad. Si fuera necesario, añada un atributo clave a la entidad. 4. Indique las relaciones que existen entre las entidades. 5. Indique el tipo de relaciones existentes (Nota : no existen relaciones Muchas a Muchas) 6. Averigue las claves foráneas según las relaciones existentes. 7. Realice el gráfico correspondiente al Modelo E-R.

PROGRAMACIÓN JAVA - BASES DE DATOS

TRASPASO A TABLAS

SUPUESTO Nº 1. "CONTROL DE VENTAS" A partir del Modelo Entidad-Relación correspondiente a este supuesto de la hoja anterior, realice el traspaso a tablas de modelo. Introduzca luego algunos datos en las tablas. Invéntese los datos, pero procure que tengan cierto sentido. Tenga en cuenta que los datos correspondientes a las claves y claves foráneas tendrán que coincidir para que la base de datos tenga coherencia.

SUPUESTO Nº 2. « TRANSPORTES » A partir del Modelo Entidad-Relación correspondiente a este supuesto de la hoja anterior, realice el traspaso a tablas de modelo. Introduzca luego algunos datos en las tablas. Invéntese los datos, pero procure que tengan cierto sentido. Tenga en cuenta que los datos correspondientes a las claves y claves foráneas tendrán que coincidir para que la base de datos tenga coherencia.

SUPUESTO Nº 3. « MEDICIONES » A partir del Modelo Entidad-Relación correspondiente a este supuesto de la hoja anterior, realice el traspaso a tablas de modelo. Introduzca luego algunos datos en las tablas. Invéntese los datos, pero procure que tengan cierto sentido. Tenga en cuenta que los datos correspondientes a las claves y claves foráneas tendrán que coincidir para que la base de datos tenga coherencia.

SUPUESTO Nº4. “REVISIONES MÉDICAS” A partir del Modelo Entidad-Relación correspondiente a este supuesto de la hoja anterior, realice el traspaso a tablas de modelo. Introduzca luego algunos datos en las tablas. Invéntese los datos, pero procure que tengan cierto sentido. Tenga en cuenta que los datos correspondientes a las claves y claves foráneas tendrán que coincidir para que la base de datos tenga coherencia.

PROGRAMACIÓN JAVA - BASES DE DATOS

RELACIONES MUCHAS A MUCHAS

SUPUESTO Nº 1 « LIMUSINAS » Una empresa de alquiler de limusinas quiere gestionar la siguiente información : Por un lado se quiere almacenar la información de los clientes que solicitan el uso de una limusina. Se almacenará el nombre, apellidos, DNI y teléfono del cliente. Por otro lado se quiere almacenar la información de las distinas limusinas propiedad de la empresa. Se almacenará la matrícula, la marca y el modelo. Una limusina es alquilada por muchos clientes (en momentos distintos claro está, un día la alquila un cliente y otro día la alquila otro) Por otro lado, un cliente alquila muchas limusinas (en momentos distintos también, un día alquila una limusina, y a la semana siguiente puede alquilar otra, etc) Interesa saber la fecha en que un cliente alquila una limusina, y el nombre del chófer que condujo en el viaje.

SE PIDE : 1. Este supuesto produce una relación Muchas a Muchas entre las entidades limusinas y clientes. Represente dicha relación. 2. A continuación identifique la entidad intermedia que elimina la relación Muchas a Muchas. 3. Añada los atributos que considere necesarios a la entidad intermedia. 4. Realice el Modelo Entidad Relación completo del supuesto teniendo en cuenta la nueva entidad introducida y sus atributos. 5. Realice el traspaso a tabla de dicho modelo.

SUPUESTO Nº 2 « RESERVAS HOTEL » Un hotel quiere guardar un histórico con todas las reservas realizadas en el hotel por sus clientes. Concretamente se quiere guardar lo siguiente : Información sobre sus clientes : nombre del cliente, apellidos, DNI y país. Información sobre sus habitaciones : número de la habitación, número de camas, precio de la habitación por noche. Un cliente puede haber reservado varias habitaciones (no tiene por qué ser a la vez : un verano puede alojarse en la habitación nº 124, pero al verano siguiente puede alojarse en la habitación nº 535 del mismo hotel) En una habitación se alojan muchos clientes (no a la vez, claro está : una semana está alojado el cliente Juan González y a la semana siguiente está alojado el cliente Ana Pérez) Interesaría almacenar también como se ha pagado la reserva de la habitación, y la fecha de entrada y de salida del cliente en la habitación.

SE PIDE : 1. Este supuesto produce una relación Muchas a Muchas entre las entidades habitaciones y clientes. Represente dicha relación. 2. A continuación identifique la entidad intermedia que elimina la relación Muchas a Muchas. 3. Añada los atributos que considere necesarios a la entidad intermedia. 4. Realice el Modelo Entidad Relación completo del supuesto teniendo en cuenta la nueva entidad introducida y sus atributos. 5. Realice el traspaso a tabla de dicho modelo.

SUPUESTO Nº 3 « TALLER MECÁNICO »

Un taller mecánico quiere guardar información sobre todas las reparaciones que se realizan en él. Para ello se quiere guardar información sobre lo siguiente : Mecánicos : Interesa almacenar la información del mecánico que realiza la reparación. Se almacenará el nombre del mecánico, apellidos, móvil y un código que identifica a cada mecánico. Coches : Interesa almacenar la información de los coches que han sido reparados en el taller. Se almacenará la matrícula, marca y modelo del coche. Debes tener en cuenta que un mecánico repara muchos coches (no a la vez, se supone, primero uno y luego otro) Por otro lado, un coche puede ser reparado por varios mecánicos (es de suponer que un coche puede sufrir varias averías a lo largo de su vida, y cada una de estas avería puede ser reparada por un mecánico distinto) Interesa almacenar también el coste de cada reparación, así como el número de horas que se usaron para hacer la reparación.

SE PIDE : 1. Este supuesto produce una relación Muchas a Muchas. Represente dicha relación. 2. A continuación identifique la entidad intermedia que elimina la relación Muchas a Muchas. 3. Añada los atributos que considere necesarios a la entidad intermedia. 4. Realice el Modelo Entidad Relación completo del supuesto teniendo en cuenta la nueva entidad introducida y sus atributos. 5. Realice el traspaso a tabla de dicho modelo.

SUPUESTO Nº 4 « VIDEOCLUB »

Un videoclub quiere almacenar información sobre los alquileres de películas que se hicieron. Le interesa almacenar información sobre las películas y sobre sus socios : Películas : se almacenará el número del DVD (no hay dos DVD con el mismo número), el título de la película que contiene, el nombre del director y el tipo de película. Socios : se almacenará el número de socio (no hay dos socios con el mismo número), el nombre y apellidos del socio, su teléfono y dirección. Hay que tener en cuenta que una película se alquila a muchos socios (No a la vez, claro está : el DVD es alquilado a un socio, y cuando este lo devuelve, se vuelve a alquilar a otro, y así sucesivamente) Por otro lado, un socio alquila muchas películas (No a la vez, claro está : primero alquila una, y al día siguiente alquila otra, y así sucesivamente) Interesaría almacenar también la fecha en que produce cada alquiler y lo que pagó el socio por el alquiler.

SE PIDE : 1. Este supuesto produce una relación Muchas a Muchas. Represente dicha relación. 2. A continuación identifique la entidad intermedia que elimina la relación Muchas a Muchas. 3. Añada los atributos que considere necesarios a la entidad intermedia. 4. Realice el Modelo Entidad Relación completo del supuesto teniendo en cuenta la nueva entidad introducida y sus atributos. 5. Realice el traspaso a tabla de dicho modelo.

PROGRAMACIÓN JAVA - BASES DE DATOS - ACCESS

CREACIÓN DE BASES DE DATOS EN ACCESS

En las hojas de ejercicios anteriores ha diseñado las bases de datos para distintos supuestos. Ha realizado el Modelo Entidad – Relación y luego ha realizado el traspaso a Tablas. Ahora se pide que cree las bases de datos correspondientes a dichos traspasos a Tablas en Access para los siguientes supuestos de hojas anteriores:

SUPUESTO "CONTROL DE VENTAS" Crear un fichero de base de datos llamado CONTROLVEN usando el programa Access. Introducir en él las tablas diseñadas para este supuesto. Introducir algunos datos en las tablas (Intente que los datos sean coherentes)

SUPUESTO « TRANSPORTES » Crear un fichero de base de datos llamado TRANSPORTES usando el programa Access. Introducir en él las tablas diseñadas para este supuesto. Introducir algunos datos en las tablas (Intente que los datos sean coherentes)

SUPUESTO « MEDICIONES » Crear un fichero de base de datos llamado MEDICIONES usando el programa Access. Introducir en él las tablas diseñadas para este supuesto. Introducir algunos datos en las tablas (Intente que los datos sean coherentes)

SUPUESTO « RESERVAS HOTEL » Crear un fichero de base de datos llamado HOTEL usando el programa Access. Introducir en él las tablas diseñadas para este supuesto. Introducir algunos datos en las tablas (Intente que los datos sean coherentes)

SUPUESTO « TALLER MECÁNICO » Crear un fichero de base de datos llamado TALLER usando el programa Access. Introducir en él las tablas diseñadas para este supuesto. Introducir algunos datos en las tablas (Intente que los datos sean coherentes)

PROGRAMACIÓN JAVA - BASES DE DATOS – ACCESS – CONSULTAS CREACIÓN DE CONSULTAS EN ACCESS Entre en la base de datos MANEMPSA (usada en las hojas de ejercicios guiados) y añada registros a las tablas hasta que estas queden así: Tabla Trabajadores

Tabla Coches

Tabla Clientes

Tabla Servicios

Ahora, realice las siguientes consultas en la base de datos. Guarde cada una con el nombre que se indica. Se recomienda que compruebe cada consulta antes de guardarla.

1. Crear una consulta llamada Servicios de Limpieza. En ella deben aparecer los campos fecha del servicio, tipo, cantidad y comentario de aquellos servicios cuyo tipo sea Limpieza.

2. Crear una consulta llamada Servicios Baratos. En ella deben aparecer los campos número del servicio, fecha, tipo y cantidad de aquellos servicios que hayan costado menos de 180 euros.

3. Crear una consulta llamada Servicios anteriores 2006. En ella deben aparecer los campos número del servicio, fecha, tipo y cantidad de aquellos servicios que fueron realizados antes del 1 – 1 – 2006

4. Crear una consulta llamada Servicios de Fontanería En ella deben aparecer los campos número de servicio, cantidad, tipo y comentario de todos aquellos servicios que fueron de fontanería y costaron 250 o más euros.

5. Crear una consulta llamada Listado de Servicios No Limpieza En ella deben aparecer los campos número de servicio, cantidad, tipo y comentario de los servicios de Fontanería y los servicios de Electricidad.

6. Crear una consulta llamada Listado de Servicios de Electricidad En ella deben aparecer los campos fecha del servicio, cantidad, tipo, comentario, nombre y apellidos del trabajador y nombre del cliente de aquellos servicios que sean del tipo Electricidad. Debes tener en cuenta que los campos nombre y apellidos del trabajador pertenecen a la tabla Trabajadores, mientras que el nombre del cliente pertenece a la tabla Clientes. Los demás campos pertenecen a la tabla Servicios.

7. Crear una consulta llamada Servicios realizados por Juan En ella deben aparecer los campos fecha del servicio, cantidad, tipo, comentario, nombre del cliente y nombre y apellidos del trabajador de todos aquellos servicios realizados por el trabajador con DNI 12.321.567-B Ten en cuenta que tendrás que usar varias tablas para hacer la consulta.

8. Crear una consulta llamada Servicios a Academias En ella deben aparecer los campos fecha del servicio, tipo, cantidad, nombre del cliente y nombre y apellidos del trabajador de todos aquellos servicios que se hayan realizado a una Academia (es decir, el nombre del cliente debe contener la palabra “academia”)

9. Crear una consulta llamada Servicios del año 2006 En ella aparecerán los campos fecha del servicio, tipo, cantidad, apellidos del trabajador, nombre del cliente, CIF del cliente de todos aquellos servicios que se hayan realizado entre el 1 del 1 de 2006 y el 31 del 12 del 2006

10. Crear una consulta llamada Servicios en la calle Larga En ella aparecerán los campos fecha del servicio, tipo, cantidad, nombre del cliente, dirección del cliente, DNI del trabajador para todos aquellos servicios realizados en la calle Larga.

11. Crear una consulta llamada Servicios trabajadores 2006 En ella deben aparecer los campos fecha del servicio, tipo cantidad, nombre y apellidos del trabajador y fecha de entrada del trabajador de todos aquellos servicios realizados por los trabajadores que entraron en la empresa a partir del 1 – 1 – 2006. Para crear esta consulta tienes que usar las tablas Trabajadores y Servicios.

12. Crear una consulta llamada Clientes de Seguros En ella deben aparecer los campos CIF, nombre del cliente, dirección del cliente de todos aquellos clientes que gestionen seguros (deben contener en el nombre la palabra “seguros”)

13. Crear una consulta llamada Listado de Academias y Papelerías En ella deben aparecer los campos CIF, nombre del cliente, dirección del cliente y teléfono fijo de todos aquellos clientes que sean academias o papelerías.

14. Crear una consulta llamada Listado de SEAT y trabajadores En ella deben aparecer los campos matrícula, marca y modelo de los seat de la empresa. También interesa que aparezca el nombre y apellido del conductor de cada coche.

15. Crear una consulta llamada Servicios realizados con CITROEN En ella debe aparecer el listado de servicios que han sido realizados usando alguno de los citroen de la empresa. En esta consulta deben aparecer los siguientes campos: matrícula del vehículo, marca y modelo. Nombre y apellidos del trabajador que hizo el servicio. Nombre y dirección del cliente al que se le hizo el servicio. Tipo de servicio y cantidad. En esta consulta participan todas las tablas de la base de datos.

PROGRAMACIÓN JAVA - BASES DE DATOS – SQL – CONSULTAS CREACIÓN DE CONSULTAS USANDO SQL EJERCICIO 1 Las siguientes consultas son las realizadas en la hoja anterior. Se le pide al alumno que vuelva a hacer dichas consultas pero esta vez usando el lenguaje SQL (se le ha añadido a los nombres la palabra SQL para distinguirlas de las consultas de la hoja anterior)

1. Crear una consulta llamada Servicios de Limpieza SQL. En ella deben aparecer los campos fecha del servicio, tipo, cantidad y comentario de aquellos servicios cuyo tipo sea Limpieza.

2. Crear una consulta llamada Servicios Baratos SQL. En ella deben aparecer los campos número del servicio, fecha, tipo y cantidad de aquellos servicios que hayan costado menos de 180 euros.

3. Crear una consulta llamada Servicios anteriores 2006 SQL. En ella deben aparecer los campos número del servicio, fecha, tipo y cantidad de aquellos servicios que fueron realizados antes del 1 – 1 – 2006

4. Crear una consulta llamada Servicios de Fontanería SQL En ella deben aparecer los campos número de servicio, cantidad, tipo y comentario de todos aquellos servicios que fueron de fontanería y costaron 250 o más euros.

5. Crear una consulta llamada Listado de Servicios No Limpieza SQL En ella deben aparecer los campos número de servicio, cantidad, tipo y comentario de los servicios de Fontanería y los servicios de Electricidad.

6. Crear una consulta llamada Listado de Servicios de Electricidad SQL En ella deben aparecer los campos fecha del servicio, cantidad, tipo, comentario, nombre y apellidos del trabajador y nombre del cliente de aquellos servicios que sean del tipo Electricidad. Debes tener en cuenta que los campos nombre y apellidos del trabajador pertenecen a la tabla Trabajadores, mientras que el nombre del cliente pertenece a la tabla Clientes. Los demás campos pertenecen a la tabla Servicios.

7. Crear una consulta llamada Servicios realizados por Juan SQL En ella deben aparecer los campos fecha del servicio, cantidad, tipo, comentario, nombre del cliente y nombre y apellidos del trabajador de todos aquellos servicios realizados por el trabajador con DNI 12.321.567-B Ten en cuenta que tendrás que usar varias tablas para hacer la consulta.

8. Crear una consulta llamada Servicios a Academias SQL En ella deben aparecer los campos fecha del servicio, tipo, cantidad, nombre del cliente y nombre y apellidos del trabajador de todos aquellos servicios que se hayan realizado a una Academia (es decir, el nombre del cliente debe contener la palabra “academia”)

9. Crear una consulta llamada Servicios del año 2006 SQL En ella aparecerán los campos fecha del servicio, tipo, cantidad, apellidos del trabajador, nombre del cliente, CIF del cliente de todos aquellos servicios que se hayan realizado entre el 1 del 1 de 2006 y el 31 del 12 del 2006

10. Crear una consulta llamada Servicios en la calle Larga SQL En ella aparecerán los campos fecha del servicio, tipo, cantidad, nombre del cliente, dirección del cliente, DNI del trabajador para todos aquellos servicios realizados en la calle Larga.

11. Crear una consulta llamada Servicios trabajadores 2006 SQL En ella deben aparecer los campos fecha del servicio, tipo cantidad, nombre y apellidos del trabajador y fecha de entrada del trabajador de todos aquellos servicios realizados por los trabajadores que entraron en la empresa a partir del 1 – 1 – 2006. Para crear esta consulta tienes que usar las tablas Trabajadores y Servicios.

12. Crear una consulta llamada Clientes de Seguros SQL En ella deben aparecer los campos CIF, nombre del cliente, dirección del cliente de todos aquellos clientes que gestionen seguros (deben contener en el nombre la palabra “seguros”)

13. Crear una consulta llamada Listado de Academias y Papelerías SQL En ella deben aparecer los campos CIF, nombre del cliente, dirección del cliente y teléfono fijo de todos aquellos clientes que sean academias o papelerías.

14. Crear una consulta llamada Listado de SEAT y trabajadores SQL En ella deben aparecer los campos matrícula, marca y modelo de los seat de la empresa. También interesa que aparezca el nombre y apellido del conductor de cada coche.

15. Crear una consulta llamada Servicios realizados con CITROEN SQL En ella debe aparecer el listado de servicios que han sido realizados usando alguno de los citroen de la empresa. En esta consulta deben aparecer los siguientes campos: matrícula del vehículo, marca y modelo. Nombre y apellidos del trabajador que hizo el servicio. Nombre y dirección del cliente al que se le hizo el servicio. Tipo de servicio y cantidad. En esta consulta participan todas las tablas de la base de datos.

EJERCICIO 2 Realice también estas otras consultas usando el lenguaje SQL (asígneles el nombre que quiera):

1. Se pide mostrar un listado de clientes con las siguientes características: Campos a mostrar: nombre del cliente, dirección, teléfono 1. La condición es que no tengan teléfono 2 (dicho de otra forma, que el campo teléfono 2 sea nulo)

2. Se pide mostrar un listado de clientes con las siguientes características: Campos a mostrar: nombre, dirección, teléfono 1. La condición es que vivan en una calle, es decir, que su dirección comience por “C/”

3. Se pide mostrar un listado de trabajadores con las siguientes características: Campos a mostrar: nombre, sueldo, fecha de entrada. La condición es que hayan entrado en la empresa en el año 2002. Es decir, entre el 1/1/2002 y el 31/12/2002.

4. Se pide mostrar un listado de trabajadores con las siguientes características: Campos a mostrar: nombre, apellidos, sueldo. Condición: ninguna. Se pide que el listado salga ordenado por sueldo de mayor a menor.

5. Se pide mostrar un listado de trabajadores con las siguientes características: Campos a mostrar: todos Condición: Que no se llamen “Ana” Ordenados por nombre ascendentemente.

6. Se pide mostrar un listado de coches con las siguientes características: Mostrar todos los campos. Ordenado por año de compra, de más antiguo a más moderno.

7. Mejore la consulta anterior de forma que también se muestre el nombre del trabajador que conduce cada coche.

8. Se pide mostrar un listado de servicios con las siguientes características: Campos a mostrar: tipo de servicio, fecha, cantidad, comentario. Condición: mostrar los servicios de limpieza que hayan costado menos de 250 euros. Ordenado por cantidad de menor a mayor

9. Mejore la consulta anterior de forma que también se muestre la dirección donde se hizo el servicio.

10. Se pide mostrar un listado de servicios con las siguientes características: Campos a mostrar: tipo de servicio, fecha, cantidad, comentario. Condición: se pide mostrar los servicios de limpieza y los de fontanería todos en la misma consulta. Ordenado por fecha de más reciente a más antigua.

11. Se pide mostrar un listado de servicios con las siguientes características: Campos a mostrar: el nombre del trabajador, la fecha en que se hizo el servicio, la cantidad que costó el servicio, el tipo de servicio, el nombre del cliente, la dirección del cliente. Condición: se pide mostrar aquellos servicios de fontanería realizados por el trabajador con nombre Juan que hayan costado menos de 240 euros. El listado debe aparecer ordenado por cantidad de mayor a menor.

PROGRAMACIÓN JAVA - BASES DE DATOS – SQL – ALTAS/BAJAS/MODIFICACIONES

CREACIÓN DE CONSULTAS DE ACCIÓN USANDO SQL

PREPARACIÓN Los ejercicios que vienen a continuación modificarán el contenido de las tablas. En el caso de equivocación es posible perder todos los datos contenidos en la tabla con la que se está trabajando. Para evitar problemas, se harán copias de las tablas y se trabajará con las copias. En este ejercicio de preparación se explica brevemente como realizar una copia de una tabla. Siga los pasos que se indican a continuación:

1. Entre en la base de datos MANEMPSA que tiene guardada en MIS DOCUMENTOS. 2. En la zona de tablas, haga clic con el botón derecho sobre la tabla Trabajadores y active la opción Copiar. 3. En una zona en blanco haga clic con el botón derecho y active la opción Pegar. 4. Aparecerá un cuadro de diálogo indicando que va a copiar una tabla. Tiene que indicar el nombre que tendrá la copia. En nuestro ejemplo, el nombre será Trabajadores2. Pulse aceptar. 5. Si todo ha ido bien, verás que ha aparecido una nueva tabla llamada Trabajadores2. Si la abres, observarás que su contenido es el mismo que Trabajadores.

EJERCICIO: Crear una copia de las demás tablas: Clientes Clientes2 Coches Coches2 Servicios Servicios2

(Nota: para los siguientes ejercicios usaremos las copias de las tablas, para así mantener intacto el contenido de las tablas originales)

INSERCIÓN DE REGISTROS

NOTA: COMPROBAR QUE LOS EJERCICIOS SE HAN REALIZADO CORRECTAMENTE ENTRANDO EN LAS TABLAS Y OBSERVANDO SU CONTENIDO

EJERCICIOS: 1. En la tabla Trabajadores2 añada los siguientes trabajadores: Rosa González, con DNI 11.567.789-D, cobra 1100,60 euros y entró en la empresa el 2 de marzo del 2006. No tiene asignado un coche. Benito Rodríguez, con DNI 56.456.345-W, cobra 500 euros y entró en la empresa el 10 de Diciembre de 2005. El coche que tiene asignado tiene de matrícula 4454-EEE Eva Ramos, con DNI 33.987.987-F. Entró en la empresa el 20 de enero de 2007. No tiene asignado de momento un sueldo y tampoco tiene asignado coche.

2. En la tabla Coches2 añada el siguiente coche: SEAT Córdoba con matrícula 4454-EEE. Año 2004. Está asignado al trabajador con DNI 56.456.345-W

MODIFICACIÓN DE REGISTROS

NOTA: COMPROBAR QUE LOS EJERCICIOS SE HAN REALIZADO CORRECTAMENTE ENTRANDO EN LAS TABLAS Y OBSERVANDO SU CONTENIDO

EJERCICIOS: 1. Se pide asignar a los trabajadores de la tabla Trabajadores2 que hayan entrado antes del año 2005 un sueldo de 1400 euros. 2. En la tabla Trabajadores2 asigne al trabajador con DNI 33.987.987-F el coche con matrícula 4454-EEE. 3. La trabajadora llamada Ana ha sido suspendida de empleo. Asigne un valor 0 al sueldo de esta trabajadora en la tabla Trabajadores2. 4. Se ha averiguado el teléfono móvil del gerente de la empresa Academia La Plata. El móvil es el 633 45 54 45. Se pide que en la tabla Clientes2 asigne ese teléfono móvil a dicho cliente. 5. Se han detectado algunos errores de datos en el cliente con CIF B44556666. Concretamente, el nombre del cliente es Seguros La Cruz, su dirección es C/Lealas 10, y su teléfono fijo es el 956 30 90 90. Se pide que en la tabla Clientes2 haga dichos cambios a dicho cliente.

ELIMINACIÓN DE REGISTROS

NOTA: COMPROBAR QUE LOS EJERCICIOS SE HAN REALIZADO CORRECTAMENTE ENTRANDO EN LAS TABLAS Y OBSERVANDO SU CONTENIDO

1. Eliminar de la tabla Servicios2 a todos los servicios del año 2004 (es decir, cuya fecha esté comprendida entre 1-1-2004 y 31-12-2004) Comprueba el resultado observando el contenido de la tabla Servicios2 2. Eliminar de la tabla Servicios2 a todos los servicios de fontanería de más de 250 euros. Comprueba el resultado observando el contenido de la tabla Servicios2 3. Eliminar de la tabla Servicios2 aquellos servicios en los que se haya instalado algún recambio (es decir, que el campo comentario contenga la palabra “recambio”) Comprueba el resultado observando el contenido de la tabla Servicios2 4. Finalmente, elimina todos los registros de la tabla Servicios2. Comprueba el resultado observando el contenido de la tabla Servicios2 5. En la tabla Clientes2, eliminar a todos los clientes que no tengan móvil (es decir, que el campo móvil sea nulo) Comprueba el resultado observando el contenido de la tabla Servicios2 6. En la tabla Clientes2, eliminar a todos los clientes que tengan una empresa de seguros (es decir, que contengan la palabra “seguros” en el nombre del cliente) Comprueba el resultado observando el contenido de la tabla Servicios2 7. Finalmente, eliminar de la tabla Clientes2 el resto de registros. Comprueba el resultado observando el contenido de la tabla Servicios2

EJERCICIO FINAL Para la realización de los ejercicios anteriores se han hecho copias de las tablas de la base de datos. Una vez realizados dichos ejercicios estas tablas no son necesarias. Puede borrarlas simplemente haciendo clic con el botón derecho sobre ellas y activar la opción eliminar. Así pues, elimine las tablas: Trabajadores2, Clientes2, Servicios2, Coches2.

PROGRAMACIÓN JAVA – APLICACIONES DE BASES DE DATOS

CREACIÓN DE APLICACIONES JAVA USANDO BASE DE DATOS

EJERCICIO 1 Crear un programa en Java que manipulará la base de datos MANEMPSA. La ventana principal de este proyecto contendrá los siguientes botones: -

“Coches de la Empresa” – btnCoches Cuando se pulse este botón, deberá aparecer en un JOptionPane el listado de coches de la empresa. Debe aparecer la marca, modelo y año de cada coche, y además deben aparecer ordenados por año ascendentemente.

-

“Listado de Clientes” – btnClientes Cuando se pulse este botón, deberá aparecer en un JOptionPane el listado de clientes de la empresa. Debe aparecer el CIF del cliente, el nombre y la dirección. Los clientes deben aparecer ordenados por nombre.

-

“Listado de Servicios” – btnServicios Cuando se pulse este botón aparecerá en un JOptionPane el listado de servicios realizados. Debe aparecer el tipo de servicio, la cantidad del servicio y el CIF del cliente. Deben aparecer ordenados por cantidad de mayor a menor.

-

“Mil Euristas” – btnMil Cuando se pulse este botón, deberá aparecer en un JOptionPane el listado de trabajadores de la empresa que cobren 1000 o menos euros. Debe aparecer el DNI del trabajador, nombre, apellidos y sueldo.

-

“Limpiezas” – btnLimpiezas Cuando se pulse este botón, deberá aparecer en un JOptionPane el listado de servicios de limpieza realizados. Debe aparecer el número del servicio, el DNI del trabajador que realizó el servicio, el tipo de servicio y el coste. Debe aparecer ordenado por número de servicio de menor a mayor.

-

“Electricidad” – btnElectricidad Este botón es igual que el anterior, solo que en vez de mostrar los servicios de limpieza se tienen que mostrar los servicios de electricidad.

-

“Ingresos Empresa” – btnIngresos Cuando se pulse este botón, interesa que aparezca en un JOptionPane la suma de las cantidades de todos los servicios realizados.

-

“Citroen” – btnCitroen Cuando se pulse este botón, interesa que aparezca en un JOptionPane el número de coches citroen que tiene la empresa.

-

“Estadisticas Limpieza” – btnEstLim Cuando se pulse este botón, interesa que aparezca en un JOptionPane lo siguiente: • • •

-

El número de servicios de limpieza que se han realizado. La suma de los costes de todos los servicios de limpieza. El coste medio de un servicio de limpieza.

“El quinto servicio” – btnQuinto Cuando se pulse este botón interesa que aparezca en un JOptionPane los datos del quinto servicio realizado. Interesa que aparezca el número del servicio, el tipo de servicio y el coste de dicho servicio.

-

“Listado de servicios de fontanería” – btnFont Cuando se pulse este botón interesa que aparezca en un JOptionPane un listado con los servicios de fontanería. Interesa que aparezca el nombre y apellidos del trabajador que hizo el servicio, el tipo de servicio y el coste del servicio.

-

“Listado de servicios de menos de 200 euros” – btnMenosDos Cuando se pulse este botón interesa que aparezca en un JOptionPane un listado con los servicios con una cantidad menor de 200 euros. Interesa que aparezca el nombre del trabajador que hizo el servicio, el tipo de servicio, el coste y el nombre del cliente al que se le hizo el servicio. Haz que el listado salga ordenado por coste de mayor a menor.

PROGRAMACIÓN JAVA – APLICACIONES DE BASES DE DATOS

FECHAS, NÚMEROS REALES, VALORES NULOS

EJERCICIO 1 Crear un programa en Java que manipulará la base de datos MANEMPSA. La ventana principal de esta aplicación tendrá dos botones y un JTextPane:

Botón Datos Trabajadores Al pulsar este botón debe aparecer el listado de trabajadores en el JTextPane. Concretamente deben aparecer el nombre, apellidos, sueldo, fecha de entrada y matrícula del coche que conduce. El listado debe aparecer ordenado por fechas ascendentemente (es decir, primero los trabajadores con más antigüedad, y luego los más recientes) Las fechas deben aparecer en el siguiente formato: Día / Mes / Año Los sueldos deben aparecer con la coma decimal. Si el trabajador no tuviera asignada un coche, en el campo matrícula debería aparecer la cadena “sin coche”.

Botón Datos Servicios Al pulsar este botón aparecerá el listado de servicios en el JTextPane. El listado aparecerá ordenado por fechas de más reciente a más antiguo. Debe aparecer la fecha del servicio, el coste, el tipo y el comentario. La fecha debe aparecer en formato: Dia del Mes del Año. Por ejemplo: 3 del 5 del 2001 El coste aparecerá con coma decimal. Si no hay comentario para el servicio, debe aparecer la cadena “sin comentarios”.

PROGRAMACIÓN JAVA – APLICACIONES DE BASES DE DATOS

CONSULTAS DEL USUARIO Realizar una pequeña aplicación de base de datos que maneje la base de datos MANEMPSA. La ventana principal del programa contendrá un JTextPane y los siguientes elementos:

Botón Ver Servicios Al pulsar este botón aparecerá en el JTextPane el listado con todos los servicios realizados por la empresa ordenados por fecha de forma ascendente. Deben aparecer en el listado los siguientes campos: fecha del servicio, tipo, coste y comentario. La fecha aparecerá en formato dia-mes-año. El coste aparecerá con coma decimal. No interesa que aparezcan los valores null. Cuando esto suceda, sustituirlos por un simple guión “-“.

Selección por costes: Se deben añadir a la ventana los siguientes elementos: -

Un cuadro de texto. Un botón “Mayor que” Un botón “Menor que” Un botón “Igual a” Un botón “Distinto de”

En el cuadro de texto el usuario introducirá una cantidad. Al pulsar el botón “Mayor que” aparecerá el listado de servicios cuyo coste sea mayor a dicha cantidad. Al pulsar el botón “Menor que” aparecerá el listado de servicios cuyo coste sea menor a dicha cantidad. Al pulsar el botón “Igual a” aparecerá el listado de servicios cuyo coste sea igual a dicha cantidad. Al pulsar el botón “Distinto de” aparecerá el listado de servicios cuyo coste sea distinto a dicha cantidad.

Selección por tipo: Se deben añadir a la ventana los siguientes elementos: -

Un cuadro de texto. Un botón “Igual a”. Un botón “Contiene a”.

El usuario introducirá un texto en el cuadro de texto. Al pulsar el botón “Igual a”, el programa mostrará el listado de servicios cuyo tipo sea igual al texto introducido.

Por ejemplo, si el usuario introduce el texto “Limpieza”, el programa mostrará los servicios cuyo tipo sea igual a “Limpieza”.

Al pulsar el botón “Contiene a”, el programa mostrará el listado de servicios cuyo tipo contenga el texto del cuadro de texto. Por ejemplo, si el usuario introduce el texto “ía”, el programa mostrará el listado de servicios de Fontanería, Carpintería, etc. Es decir, todos los servicios que contengan “ía” en el tipo.

Selección por fecha: Se deben añadir a la ventana los siguientes elementos: -

Un cuadro de texto para el día, otro para el mes y otro para el año. Un botón “Anterior a” Un botón “Posterior a” Un botón “En el año”

El usuario introducirá una fecha en los cuadros día-mes-año. Luego, si el usuario pulsa el botón Anterior a el programa mostrará el listado de servicios que hayan sido anteriores a la fecha indicada. Si el usuario pulsa Posterior a el programa mostrará el listado de servicios que hayan sido posteriores a la fecha indicada. Si el usuario pulsa el botón En el año, el programa mostrará el listado de servicios que hayan sido realizados en el año indicado en el cuadro año. (En este caso no se tienen en cuenta los cuadros día y mes)

PROGRAMACIÓN JAVA – APLICACIONES DE BASES DE DATOS

ALTAS DE REGISTROS Realizar una pequeña aplicación de base de datos que maneje la base de datos MANEMPSA. La ventana principal de dicha aplicación contendrá los siguientes elementos:

Botón Listado de coches Al pulsar este botón, aparecerá en un panel de texto el listado de coches de la empresa. Deben aparecer todos los campos de los coches. Panel de Alta de coches Este panel contendrá una serie de cuadros de texto que permitirán introducir los datos de un nuevo coche que se quiera añadir. Dentro del panel también tendremos un botón Alta que al ser pulsado efectuará la introducción del nuevo coche en la tabla. Al pulsarse el botón Alta, deberá mostrarse el contenido de la tabla coches en el panel, y allí deberá aparecer el listado incluyendo el nuevo coche introducido. (El código del botón Alta deberá construir una consulta SQL válida del tipo INSERT INTO que permita introducir los datos del nuevo coche)

PROGRAMACIÓN JAVA – APLICACIONES DE BASES DE DATOS

BAJA DE REGISTROS Mejorar la aplicación realizada en la hoja de ejercicios anterior de forma que posibilite la eliminación de coches de la tabla coches de la base de datos MANEMPSA. Para ello, debe añadir a la ventana principal lo siguiente: -

Un cuadro de texto donde el usuario introducirá una matrícula. Un botón Eliminar coche.

Al pulsar el botón Eliminar coche, se borrará de la tabla el coche cuya matrícula se haya escrito en el cuadro de texto. Una vez realizado el borrado, aparecerá en el panel de la ventana el contenido de la tabla coches para que el usuario pueda confirmar que el coche ha sido realmente borrado. Hay que tener en cuenta varias cosas: -

El programa avisará si la matrícula introducida en el cuadro de texto no se corresponde con ningún coche de la base de datos. (En este caso no se hará el borrado, claro está)

-

En el caso de que la matrícula exista, el programa pedirá confirmación antes de efectuar el borrado.

PROGRAMACIÓN JAVA – APLICACIONES DE BASES DE DATOS

MODIFICACIÓN DE REGISTROS Mejorar la aplicación realizada en la hoja de ejercicios anterior de forma que posibilite la modificación de coches de la tabla coches de la base de datos MANEMPSA. Para ello, debe añadir a la ventana principal lo siguiente: -

Un panel de modificación que contenga un cuadro de texto por campo de la tabla coches (Este panel será muy parecido al panel de introducción de coches) Un botón Buscar al lado del cuadro de texto de la matrícula. Un botón Efectuar Modificación.

El usuario tendrá que introducir una matrícula y luego pulsará el botón Buscar. Al pulsar este botón, el programa rellenará los cuadros de texto con los datos del coche que tenga dicha matrícula. Si no existe un coche con dicha matrícula entonces el programa mostrará un mensaje de error. Una vez rellenos los cuadros de texto con los datos del coche, el usuario realizará modificaciones en dichos datos y luego pulsará el botón Efectuar Modificación. Al pulsar este botón se efectuará la modificación de los datos de este coche en la tabla coches y se presentará el listado completo de la tabla coches en el panel del programa.

PROGRAMACIÓN JAVA – JTABLE

EJERCICIO Nº1

Se pide que realice una aplicación que muestre una tabla con las siguientes columnas: Nombre

Examen 1

Examen 2

Examen 3

Al comenzar el programa la tabla estará vacía y solo se mostrará la cabecera. El programa constará además de la tabla de los siguientes elementos: -

Un botón “Añadir Blanco”. Este botón añadirá una nueva fila en blanco a la tabla.

-

Un botón “Añadir Alumno”. Este botón añadirá una nueva fila a la tabla con los siguientes valores: Nombre: “No definido” Examen 1: 5 Examen 2: 5 Examen 3: 5

-

Un botón “Eliminar” Este botón eliminará la fila donde que esté seleccionada en ese momento. En el caso de que no hubiera ninguna fila seleccionada al pulsar este botón, el programa debe mostrar un mensaje de error.

-

Un botón “Resultados” Este botón mostrará en un JOptionPane la nota media del alumno de la fila que esté seleccionada. También debe indicar en ese JOptionPane si el alumno ha aprobado o no. En el caso de que no hubiera ninguna fila seleccionada al pulsar este botón, el programa debe mostrar un mensaje de error.

-

Un botón “Resultados Trimestre 1” Este botón mostrará en un JOptionPane el número de alumnos que aprobaron el examen 1 y el número de alumnos que suspendieron dicho examen.

PROGRAMACIÓN JAVA – JTABLE

EJERCICIO Nº1 Realiza un programa que contenga un JTable y un botón. El botón tendrá el texto “Clientes” y al pulsarse se mostrará en la tabla el contenido de la tabla clientes de la base de datos MANEMPSA.

EJERCICIO Nº2 Realiza un programa igual al anterior pero que permita mostrar el contenido de la tabla servicios de la base de datos MANEMPSA.

PROGRAMACIÓN JAVA – JTABLE

EJERCICIO Nº1 Realiza un programa que permita realizar Altas, Bajas y Modificaciones en la tabla clientes de la base de datos MANEMPSA. Este programa debe mostrar en todo momento un JTable con el contenido actualizado de la tabla clientes. El programa debe tener tres botones. Un botón Eliminar, otro botón Nuevo Cliente y un botón Modificar Cliente. Al pulsar Eliminar se eliminará el cliente seleccionado en el JTable. Al pulsar Nuevo Cliente aparecerá un cuadro de diálogo donde el usuario introducirá los datos de un nuevo cliente. Al pulsar Modificar Cliente aparecerá un cuadro de diálogo donde el usuario podrá cambiar los datos del cliente que haya seleccionado en el JTable.

PROGRAMACIÓN JAVA – JTABLE

EJERCICIO Nº1 El programa realizado en la hoja de ejercicios anterior permitía el alta, baja y modificación de los clientes de la base de datos MANEMPSA. Se pide ahora que añada un cuadro de diálogo de filtrado al ejercicio de la hoja anterior que permita filtrar por los distintos campos de la tabla de clientes.

PROGRAMACIÓN JAVA – JTABLE

EJERCICIO Nº1 El programa de la hoja de ejercicios anterior permitía la gestión de la tabla clientes de la base de datos MANEMPSA. Se pide que mejore el programa de la hoja anterior de forma que el cuadro de diálogo de filtrado permita al usuario decidir la ordenación del listado. Por otro lado, se pide que junto al JTable donde aparece el listado de clientes aparezca el número de clientes que se está mostrando en todo momento en el JTable.

PROGRAMACIÓN JAVA – iREPORT

EJERCICIO Nº1 Crear una DSN llamada EjercicioDSN que haga referencia a la base de datos MANEMPSA que tiene almacenada en Mis Documentos.

EJERCICIO Nº2 En el programa iReport, crear una conexión llamada Conexión Ejercicio que esté creada a partir de la DSN del ejercicio anterior.

EJERCICIO Nº3 Crear un informe usando la conexión Conexión Ejercicio del ejercicio anterior donde aparezca el listado de clientes de la base de datos MANEMPSA ordenado por nombre de cliente. El título de este listado debe ser: Listado de Clientes y luego guarde el informe con el nombre clientes.

PROGRAMACIÓN JAVA – iREPORT

EJERCICIO Nº1 Crea un listado de clientes usando la opción mago de informes de iReport. Este listado debe mostrar los siguientes campos: nombre, dirección y los dos teléfonos. El listado debe salir ordenado por nombre.

Una vez creado el listado, debe realizar las siguientes modificaciones en él: -

El título del listado debe ser: “Clientes de MANEMPSA”. Y debe tener las siguientes características: o Color de fondo: Azul. o Tamaño de la letra: 18. o Color de letra: Blanco. o En cursiva.

-

La cabecera del listado debe tener las siguientes características: o Tamaño de letra: 10 o Cada campo de la cabecera debe tener una alineación Centro. o Los campos deben estar en negrita y subrayados o Deben ser de color Azul.

-

Los datos del listado deben tener las siguientes características: o Deben tener alineación centro. o Deben tener un tamaño de letra de 10 y el tipo de letra debe ser Comic Sans. o Los nombres deben aparecer en color verde, al igual que las direcciones. o Los teléfonos deben aparecer en color rojo y en negrita.

Una vez hecho esto, si quiere experimentar realizando algún cambio más, hágalo.

PROGRAMACIÓN JAVA – iREPORT

EJERCICIO Nº1 Se pide realizar un informe en el que aparezcan los servicios realizados al cliente “Seguros Segasa”, cuyo CIF es ‘B11223212’.

Interesa que el informe tenga el siguiente diseño:

-

El título será NOTA DE SERVICIOS SEGASA

-

En el encabezado de página debe aparecer una ficha como la que sigue:

Ficha de Cliente. CIF: NOMBRE: DIRECCIÓN: TELEFONO 1: TELEFONO 2:

---el cif del cliente-----el nombre del cliente-----dirección del cliente-----teléfono 1 del cliente-----teléfono 2 del cliente---

-

Incluya también en el encabezado de página un logotipo (bájese una imagen de internet)

-

El listado de servicios debe mostrar los datos: Fecha del servicio, tipo y cantidad ordenado ascendentemente por fechas. Por supuesto, este listado debe aparecer con su encabezado. Sería interesante que destacara el encabezado colocándolo en negrita y separándolo del listado de datos a través de una línea.

-

En la zona del pie de columna, añada simplemente una línea horizontal.

-

En la zona del pie de página y del pie de última página debe aparecer el siguiente texto centrado:

MANEMPSA Mantenimiento Integral a Empresas Polígono Industrial Norte, C/ Bonanza 3 11404 Jerez (Cádiz)