JAVA. Interfaces gráficas y aplicaciones para Internet (4ª Edición)
()
Información de este libro electrónico
programas para la Web._x000D_
_x000D_
A modo de resumen, Java le permitirá crear programas para su uso personal, para su grupo de trabajo, para una empresa, aplicaciones distribuidas a través de Internet, aplicaciones de bases de datos, páginas web, servicios web y otras muchas cosas._x000D_
_x000D_
En este libro se explica cómo crear aplicaciones que muestren una interfaz gráfica al usuario, se estudian los enlaces a datos, SQL y el acceso a bases de datos (JDBC), la persistencia de los datos, el desarrollo de aplicaciones Java EE, el diseño de clientes web (HTML, applets), el desarrollo de servlets, el diseño de aplicaciones web con JSP, JSTL y JDBC, los servicios web XML y RESTFUL, los marcos de trabajo JavaServer Faces (JSF) y Spring para crear aplicaciones de tres o más capas para la web, las tecnologías para incluir AJAX en una aplicación web… todo ello con el fin de que diseñe aplicaciones para Internet._x000D_
_x000D_
Java: Interfaces gráficas y aplicaciones para Internet es un libro totalmente actualizado a las nuevas características de JDK 8/Java EE 7, con ejemplos claros y sencillos, fáciles de entender, que ilustran el diseño de interfaces gráficas, de páginas web y de aplicaciones con acceso a bases de datos para Internet utilizando JSF, persistencia y AJAX.
Lee más de Fco. Javier Ceballos
C/C++. Curso de programación (4ª edición) Calificación: 0 de 5 estrellas0 calificacionesMicrosoft C#. Curso de Programación (2ª Edición) Calificación: 0 de 5 estrellas0 calificacionesEnciclopedia de Microsoft Visual C# (4ª Edición) Calificación: 0 de 5 estrellas0 calificacionesVisual C#. Interfaces gráficas y aplicaciones para Internet con WPF, WCF y Silverlight Calificación: 0 de 5 estrellas0 calificacionesJava 2: Lenguaje y Aplicaciones Calificación: 0 de 5 estrellas0 calificacionesMicrosoft Visual Basic .NET. Curso de programación Calificación: 0 de 5 estrellas0 calificacionesVisual Basic. Interfaces gráficas y aplicaciones para Internet con WPF, WCF y Silverlight Calificación: 0 de 5 estrellas0 calificacionesProgramación Orientada a Objetos con C++ (4ª Edición) Calificación: 0 de 5 estrellas0 calificacionesEnciclopedia de Microsoft Visual Basic (3ª Edición) Calificación: 0 de 5 estrellas0 calificacionesEnciclopedia del lenguaje C++ (2ª Edición) Calificación: 0 de 5 estrellas0 calificacionesMicrosoft Visual Basic .NET. Lenguaje y aplicaciones (3ª Edición) Calificación: 0 de 5 estrellas0 calificacionesProgramación orientada a objetos con C++ (5ª edición) Calificación: 0 de 5 estrellas0 calificacionesC/C++. Curso de programación (5ª Edición) Calificación: 0 de 5 estrellas0 calificacionesMicrosoft C#. Lenguaje y Aplicaciones (2ª Edición) Calificación: 0 de 5 estrellas0 calificaciones
Relacionado con JAVA. Interfaces gráficas y aplicaciones para Internet (4ª Edición)
Libros electrónicos relacionados
JAVA. Interfaces gráficas y aplicaciones para Internet. 4ª Edición.: Ofimática Calificación: 4 de 5 estrellas4/5Enciclopedia de Microsoft Visual Basic (3ª Edición) Calificación: 0 de 5 estrellas0 calificacionesMicrosoft C#. Lenguaje y Aplicaciones (2ª Edición) Calificación: 0 de 5 estrellas0 calificacionesMicrosoft C#. Lenguaje y Aplicaciones. 2ª Edición. Calificación: 0 de 5 estrellas0 calificacionesJava 2: Lenguaje y Aplicaciones Calificación: 0 de 5 estrellas0 calificacionesMicrosoft Visual Basic .NET. Lenguaje y aplicaciones (3ª Edición) Calificación: 0 de 5 estrellas0 calificacionesMicrosoft Visual Basic .NET. Lenguaje y aplicaciones. 3ª Edición.: Diseño de juegos de PC/ordenador Calificación: 0 de 5 estrellas0 calificacionesEnciclopedia de Microsoft Visual C#. Calificación: 5 de 5 estrellas5/5Visual Basic. Interfaces gráficas y aplicaciones para Internet con WPF, WCF y Silverlight: Diseño de juegos de PC/ordenador Calificación: 3 de 5 estrellas3/5Visual Basic. Interfaces gráficas y aplicaciones para Internet con WPF, WCF y Silverlight Calificación: 0 de 5 estrellas0 calificacionesMicrosoft Visual Basic .NET. Curso de programación Calificación: 0 de 5 estrellas0 calificacionesVisual Basic.NET Curso de Programación: Diseño de juegos de PC/ordenador Calificación: 4 de 5 estrellas4/5Enciclopedia de Microsoft Visual Basic.: Diseño de juegos de PC/ordenador Calificación: 0 de 5 estrellas0 calificacionesVisual C#. Interfaces gráficas y aplicaciones para Internet con WPF, WCF y Silverlight Calificación: 0 de 5 estrellas0 calificacionesProgramación Orientada a Objetos con C++. 4ª Edición Calificación: 0 de 5 estrellas0 calificacionesProgramación Orientada a Objetos con C++ (4ª Edición) Calificación: 0 de 5 estrellas0 calificacionesC/C++. Curso de programación. 5ª Edición Calificación: 0 de 5 estrellas0 calificacionesMicrosoft C#. Curso de Programación. 2ª Edición Calificación: 4 de 5 estrellas4/5Java 2. Curso de Programación. 4ª Edición Calificación: 0 de 5 estrellas0 calificacionesC/C++. Curso de programación. 4ª edición: PROGRAMACIÓN INFORMÁTICA/DESARROLLO DE SOFTWARE Calificación: 4 de 5 estrellas4/5Programación orientada a objetos con C++, 5ª edición. Calificación: 5 de 5 estrellas5/5Enciclopedia del lenguaje C++. 2ª edición Calificación: 1 de 5 estrellas1/5Redes CISCO. Guía de estudio para la certificación CCNA Routing y Switching (4ª Ed. Act.) Calificación: 0 de 5 estrellas0 calificacionesDiseño automatizado de modelos de simulación basados en autómatas celulares Calificación: 0 de 5 estrellas0 calificacionesOrganización de proyectos con AUTOCAD 2021 Calificación: 0 de 5 estrellas0 calificacionesOracle 12c Forms y Reports: Curso práctico de formación Calificación: 0 de 5 estrellas0 calificacionesDesarrollo de Aplicaciones IOS con SWIFT Calificación: 0 de 5 estrellas0 calificacionesIngeniería inversa. Curso práctico Calificación: 0 de 5 estrellas0 calificacionesConstrucción y diseño de páginas web con html, css y javascript Calificación: 0 de 5 estrellas0 calificacionesUn uso de algoritmos genéticos para la búsqueda de patrones Calificación: 0 de 5 estrellas0 calificaciones
Programación para usted
HTML para novatos Calificación: 5 de 5 estrellas5/5Python Paso a paso: PROGRAMACIÓN INFORMÁTICA/DESARROLLO DE SOFTWARE Calificación: 4 de 5 estrellas4/5GuíaBurros Microsoft Excel: Todo lo que necesitas saber sobre esta potente hoja de cálculo Calificación: 4 de 5 estrellas4/5Python a fondo Calificación: 5 de 5 estrellas5/5VBA Excel Guía Esencial Calificación: 5 de 5 estrellas5/5Excel de la A a la Z: El Manual Práctico Paso a Paso de Microsoft Excel para Aprender Funciones Básicas y Avanzadas, Fórmulas y Gráficos con Ejemplos Fáciles y Claros Calificación: 0 de 5 estrellas0 calificacionesPython para principiantes Calificación: 5 de 5 estrellas5/5Tablas dinámicas para todos. Desde simples tablas hasta Power-Pivot: Guía útil para crear tablas dinámicas en Excel Calificación: 0 de 5 estrellas0 calificacionesLinux Essentials: una guía para principiantes del sistema operativo Linux Calificación: 5 de 5 estrellas5/5Curso básico de Python: La guía para principiantes para una introducción en la programación con Python Calificación: 0 de 5 estrellas0 calificacionesJavaScript: Guía completa Calificación: 4 de 5 estrellas4/5Arduino. Edición 2018 Curso práctico Calificación: 4 de 5 estrellas4/5Aprender a programar con Excel VBA con 100 ejercicios práctico Calificación: 5 de 5 estrellas5/5Aprende programación Python: python, #1 Calificación: 0 de 5 estrellas0 calificacionesCurso de Programación y Análisis de Software Calificación: 4 de 5 estrellas4/5Tablas dinámicas y Gráficas para Excel: Una guía visual paso a paso Calificación: 0 de 5 estrellas0 calificacionesEl gran libro de Python Calificación: 5 de 5 estrellas5/5Aprender HTML5, CSS3 y Javascript con 100 ejerecios Calificación: 5 de 5 estrellas5/5Arduino. Trucos y secretos.: 120 ideas para resolver cualquier problema Calificación: 5 de 5 estrellas5/5VBA Excel Modelo de Objetos Calificación: 3 de 5 estrellas3/5Diseño Web con CSS Calificación: 5 de 5 estrellas5/5El Arte del Emprendedor Digital Calificación: 0 de 5 estrellas0 calificacionesIntroducción al Uso de Formularios (UserForms) en VBA Calificación: 3 de 5 estrellas3/5Aprender a programar Android: con 100 ejercicios prácticos Calificación: 4 de 5 estrellas4/5Programación Orientada a Objetos Calificación: 3 de 5 estrellas3/5Aprende a Programar en C++ Calificación: 5 de 5 estrellas5/5Ortografía para todos: La tabla periódica de la ortografía Calificación: 5 de 5 estrellas5/5Lógica de programación: Solucionario en pseudocódigo – Ejercicios resueltos Calificación: 4 de 5 estrellas4/5Fundamentos De Programación Calificación: 5 de 5 estrellas5/5
Comentarios para JAVA. Interfaces gráficas y aplicaciones para Internet (4ª Edición)
0 clasificaciones0 comentarios
Vista previa del libro
JAVA. Interfaces gráficas y aplicaciones para Internet (4ª Edición) - Fco. Javier Ceballos
Java™
Interfaces gráficas y
aplicaciones para Internet
4.ª edición
Java™
Interfaces gráficas y
aplicaciones para Internet
4.ª edición
Fco. Javier Ceballos Sierra
Profesor titular de la
Escuela Politécnica Superior Universidad de Alcalá
Imagenfotoco.pngJava: Interfaces gráficas y aplicaciones para Internet, 4.ª edición. (E-Book)
© Fco. Javier Ceballos Sierra
© De la Edición Original en papel publicada por Editorial RA-MA ISBN de Edición en Papel: 978-84-9964-522-3
Todos los derechos reservados © RA-MA, S.A. Editorial y Publicaciones, Madrid, España.
MARCAS COMERCIALES. Las designaciones utilizadas por las empresas para distinguir sus productos (hardware, software, sistemas operativos, etc.) suelen ser marcas registradas. RA-MA ha intentado a lo largo de este libro distinguir las marcas comerciales de los términos descriptivos, siguiendo el estilo que utiliza el fabricante, sin intención de infringir la marca y solo en beneficio del propietario de la misma. Los datos de los ejemplos y pantallas son ficticios a no ser que se especifique lo contrario.
RA-MA es una marca comercial registrada.
Se ha puesto el máximo empeño en ofrecer al lector una información completa y precisa. Sin embargo, RA-MA Editorial no asume ninguna responsabilidad derivada de su uso ni tampoco de cualquier violación de patentes ni otros derechos de terceras partes que pudieran ocurrir. Esta publicación tiene por objeto proporcionar unos conocimientos precisos y acreditados sobre el tema tratado. Su venta no supone para el editor ninguna forma de asistencia legal, administrativa o de ningún otro tipo. En caso de precisarse asesoría legal u otra forma de ayuda experta, deben buscarse los servicios de un profesional competente.
Reservados todos los derechos de publicación en cualquier idioma.
Según lo dispuesto en el Código Penal vigente ninguna parte de este libro puede ser reproducida, grabada en sistema de almacenamiento o transmitida en forma alguna ni por cualquier procedimiento, ya sea electrónico, mecánico, reprográfico, magnético o cualquier otro sin autorización previa y por escrito de RA-MA; su contenido está protegido por la Ley vigente que establece penas de prisión y/o multas a quienes, intencionadamente, reprodujeren o plagiaren, en todo o en parte, una obra literaria, artística o científica.
Editado por:
RA-MA, S.A. Editorial y Publicaciones
Calle Jarama, 33, Polígono Industrial IGARSA
28860 PARACUELLOS DE JARAMA, Madrid
Teléfono: 91 658 42 80
Fax: 91 662 81 39
Correo electrónico: [email protected]
Internet: www.ra-ma.es y www.ra-ma.com
Diseño Portada: Antonio García Tomé
ISBN: 978-84-9964-479-0
La transformación a libro electrónico del presente título fue realizada por Sextil Online, S.A. de C.V./ Ink it ® 2017.
+52 (55) 52 54 38 52
www.ink-it.ink
Ayer es historia, mañana un misterio y
hoy es un regalo, por eso se llama presente.
Dedico esta obra
a María del Carmen, mi esposa,
y a mis hijos Francisco y Javier.
CONTENIDO
PRÓLOGO
CAPÍTULO 1. MI PRIMERA APLICACIÓN
FORMULARIOS
BIBLIOTECA JFC
ESTRUCTURA DE UNA APLICACIÓN
Compilar y ejecutar la aplicación
DISEÑO DE LA INTERFAZ GRÁFICA
Crear un componente Swing
Componentes Swing más comunes
Contenedores
Administradores de diseño
Añadir los componentes al contenedor
Asignar un administrador de diseño
Añadir una etiqueta y editar sus propiedades
Añadir un botón de pulsación y editar sus propiedades
MANEJO DE EVENTOS
Asignar manejadores de eventos a un objeto
Adaptadores
Responder a los eventos
ESTABLECER LA APARIENCIA DE LAS VENTANAS
RESUMEN
EJERCICIOS PROPUESTOS
CAPÍTULO 2. JFC (SWING)
COMPONENTES SWING
ARQUITECTURA MODELO-VISTA-CONTROLADOR
MANEJADORES DE EVENTOS DE SWING
JERARQUÍA DE COMPONENTES DE UNA APLICACIÓN
CAJAS DE TEXTO, ETIQUETAS Y BOTONES
Desarrollo de la aplicación
Objetos
Eventos
Pasos a seguir durante el desarrollo
El formulario, los componentes y sus propiedades
Tecla de acceso
Botón por omisión
Responder a los eventos
Enfocar un objeto
Seleccionar el texto de una caja de texto
INTERCEPTAR LA TECLA PULSADA
VALIDAR UN CAMPO DE TEXTO
Expresiones regulares
Ejemplos de expresiones regulares
El motor de expresiones regulares
CREAR UN CAMPO DE TEXTO VALIDADO
RESUMEN
EJERCICIOS RESUELTOS
Diseño de una calculadora
Objetos
Eventos
Pasos a seguir durante el desarrollo
Diseño de la ventana y de los controles
Establecer una fuente
Color
Escribir el código
EJERCICIOS PROPUESTOS
CAPÍTULO 3. MENÚS Y BARRAS DE HERRAMIENTAS
MENÚS
DISEÑO DE UNA BARRA DE MENÚS
Manejadores de eventos
Aceleradores y nemónicos
BARRA DE HERRAMIENTAS
Utilizar imágenes en botones
Diseño de una barra de herramientas
BARRA DE ESTADO
Diseño de una barra de estado
DESARROLLO DE UN EDITOR DE TEXTOS
Caja de texto multilínea
Panel de desplazamiento
Diseño del editor
El portapapeles
Trabajar con texto seleccionado
Diseño de la barra de menús
Diseño de la barra de herramientas
Asociar un método con un elemento de un menú
Archivo Salir
Edición Cortar
Edición Copiar
Edición Pegar
Opciones Fuente
Opciones Tamaño
Habilitar o inhabilitar los elementos de un menú
Marcar el menú seleccionado
Grupo de botones
Deshacer y rehacer
Recordar las ediciones reversibles
Añadir a la interfaz las órdenes Deshacer y Rehacer
MENÚS EMERGENTES
ASOCIAR UN ICONO A LA APLICACIÓN
REDIMENSIONAR UN COMPONENTE
RESUMEN
EJERCICIOS PROPUESTOS
CAPÍTULO 4. CONTROLES Y CAJAS DE DIÁLOGO
CAJAS DE DIÁLOGO MODALES Y NO MODALES
CAJAS DE DIÁLOGO PREDEFINIDAS
Visualizar datos con showMessageDialog
Confirmar datos con showConfirmDialog
Requerir datos con showInputDialog
Diálogo modal personalizado
Utilización de diálogos predefinidos
CAJAS DE DIÁLOGO PERSONALIZADAS
CASILLAS DE VERIFICACIÓN
BOTONES DE OPCIÓN
LISTAS SIMPLES
Diseñar la lista
Iniciar la lista
Acceder a los elementos seleccionados
Modelos de una lista simple
LISTAS DESPLEGABLES
Diseñar la lista
Iniciar la lista
Acceder al elemento seleccionado
Modelo de una lista desplegable
COMPONENTES DE RANGO DEFINIDO
JScrollBar
JSlider
JProgressBar
CAJAS DE DIÁLOGO ESTÁNDAR
Cajas de diálogo Abrir y Guardar
Propiedades
Filtros
Caja de diálogo Color
TEMPORIZADORES
RESUMEN
EJERCICIOS RESUELTOS
EJERCICIOS PROPUESTOS
CAPÍTULO 5. TABLAS Y ÁRBOLES
TABLAS
Construir una tabla
Iniciar la tabla
Modelos de una tabla
Crear un nuevo modelo para la tabla
Tamaño de las celdas
Acceder al valor de la celda seleccionada
ÁRBOLES
Construir un árbol
Iniciar el árbol
Modelos de un árbol
Acceder al nodo seleccionado
Añadir y borrar nodos
Añadir nodo
Borrar nodo
Borrar todos los nodos
Personalizar el aspecto de un árbol
EJERCICIOS RESUELTOS
Iniciar la tabla
Iniciar la ventana de la aplicación
Manejo de la aplicación
EJERCICIOS PROPUESTOS
CAPÍTULO 6. ENLACE DE DATOS
ASPECTOS BÁSICOS
Enlace de datos manual
Notificar cuándo cambia una propiedad
Enlace de datos con la biblioteca Beans Binding
La clase Binding
Crear un enlace
Enlaces con otros controles
Aplicar conversiones
Aplicar validaciones
Controlar eventos
ENLACES COMPLEJOS
Enlace a colecciones de objetos
JList
JComboBox
JTable
RESUMEN
CAPÍTULO 7. ACCESO A UNA BASE DE DATOS
SQL
Crear una base de datos
Crear una tabla
Escribir datos en la tabla
Modificar datos de una tabla
Borrar registros de una tabla
Seleccionar datos de una tabla
Un ejemplo con una sola tabla
Descripción del escenario
Creación de la base de datos y de sus tablas
Utilizando MySQL
Insertar datos en la base de datos
Modificar datos en la base de datos
Borrar registros de una tabla
Obtener datos de la base de datos
Un ejemplo con varias tablas
ACCESO A UNA BASE DE DATOS CON JDBC
Controladores
Descripción del escenario
Creación de la base de datos
Creación de las tablas
Conectando con la base de datos
Cargar el controlador
Conectar con la fuente de datos
Recuperar datos de la base de datos
Metadatos
Obtener datos de un conjunto de resultados
Insertar, actualizar y borrar datos en la base de datos
Navegar por la base de datos
Integridad referencial
EJEMPLO DE ACCESO A DATOS
UTILIZANDO UNA INTERFAZ GRÁFICA
GESTIÓN DE EXCEPCIONES Y DE FICHEROS LOG
EJERCICIOS RESUELTOS
EJERCICIOS PROPUESTOS
CAPÍTULO 8. PERSISTENCIA
API DE PERSISTENCIA DE JAVA
MAPEO OBJETO-RELACIONAL CON JPA
ENTIDADES
APLICANDO JPA
Unidad de persistencia
Definir el modelo de entidades
Entidad Alumno
Entidad Asignatura
Entidad AlumnoAsignatura
Clase insertable AlumnoAsignaturaPK
Asociaciones entre entidades
Definir el administrador de entidades
Operaciones con las entidades
Lectura
Actualización
Persistencia
Eliminación
Operaciones en cascada
Ciclo de vida de una entidad
Eventos durante el ciclo de vida de una entidad
Lenguaje de Consulta de Persistencia en Java
Clases de entidad a partir de una BBDD existente
Cadena de conexión
Modelo de entidades
Unidad de persistencia
Acceder a los datos
Clases controladoras JPA de clases de entidad
Utilizando enlaces de datos
CAPÍTULO 9. Java EE
INTRODUCCIÓN
¿QUÉ ES Java EE?
ARQUITECTURA Java EE MULTICAPA
Componentes Java EE
Contenedores Java EE
Tipos
Otros servicios Java EE
PRÁCTICAS EN EL DESARROLLO
La capa cliente
La capa web
La capa EJB
CREAR UNA APLICACIÓN JEE CON NETBEANS
Base de datos
Clases de entidad y unidad de persistencia
Crear los Enterprise Java Beans
Añadir un servlet
Crear la página que mostrará la interfaz gráfica
Crear una etiqueta personalizada
Refrescar la vista
RESUMEN
CAPÍTULO 10. CLIENTES
¿QUÉ ES INTERNET?
Intranet
Terminología Internet
SERVICIOS EN INTERNET
PÁGINAS WEB
Qué es HTML
Etiquetas básicas HTML
Etiquetas de formato de texto
URL
Enlaces entre páginas
Graficos
Marcos
Formularios
Entrada básica de datos
Caja de texto
Caja de clave de acceso
Casilla de verificación
Botón de opción
Parámetros ocultos
Enviar datos
Reiniciar los datos de un formulario
Imágenes
Orden de tabulación
Caja de texto multilínea
Listas desplegables
Tablas
HOJAS DE ESTILO
Clases
Etiquetas y
XML
XHTML
PÁGINAS WEB DINÁMICAS
APPLETS
Crear un applet
Restricciones de seguridad con los applets
Ejecutar un applet
La clase JApplet
public void init()
public void start()
public void paint(Graphics g)
public void stop()
public void destroy()
Un ejemplo simple
Ciclo de vida de un applet
Pasar parámetros a un applet
Mostrar una imagen
Reproducir un fichero de sonido
Mostrar información en la barra de estado
Crear una animación
Desplegar un applet en Apache Tomcat
Desplegar un applet en GlassFish
APLICACIÓN CLIENTE DE UNA APLICACIÓN JEE
Interfaz remota
Aplicación Java EE
Aplicación cliente
Java Web Start
EJERCICIOS RESUELTOS
EJERCICIOS PROPUESTOS
CAPÍTULO 11. SERVLETS
¿QUÉ ES UN SERVLET?
Características de un servlet
ESTRUCTURA DE UN SERVLET
Ciclo de vida de un servlet
Un servlet sencillo
Software necesario para ejecutar un servlet
EJECUTAR UN SERVLET EN EL SERVIDOR
INCLUIR PROCESOS ESCRITOS EN JAVA
INVOCAR AL SERVLET DESDE UNA PÁGINA HTML
PROCESAR FORMULARIOS
Tipos de peticiones
Petición HTTP GET
Petición HTTP POST
LEER LOS DATOS ENVIADOS POR EL CLIENTE
DESCRIPTOR DE DESPLIEGUE
Anotación WebServlet
INICIACIÓN DE UN SERVLET
SEGUIMIENTO DE UNA SESIÓN
Cookies
Identificar al cliente
Reescritura del URL
Parámetros ocultos en los formularios
Interfaz HttpSession
Obtener una sesión
Datos asociados con una sesión
Cancelar una sesión
SERVLETS Y JDBC
Creación de la base de datos
Creación de las tablas
Creación de la aplicación web
CONJUNTO DE CONEXIONES
EMPAQUETAR UNA APLICACIÓN WEB
INSTALAR UNA APLICACIÓN WEB EN EL SERVIDOR
APLICACIÓN JEE
EJERCICIOS RESUELTOS
EJERCICIOS PROPUESTOS
CAPÍTULO 12. JSP
¿CÓMO TRABAJA UNA PÁGINA JSP?
Ciclo de vida de una página JSP
Objetos implícitos
Ámbito de los atributos
Ámbito de aplicación
Ámbito de sesión
Ámbito de petición
Ámbito de página
Fijar un atributo con un ámbito específico
¿Cuándo utilizar uno u otro ámbito?
Ejemplo
LENGUAJE DE EXPRESIÓN EN JSP
Objetos implícitos
Comentarios
Directrices
Directriz page
Directriz include
Directriz taglib
Elementos de programación
Declaraciones
Expresiones
Fragmentos de código Java
Ejemplo
Activar el lenguaje de expresión (LE)
Ejemplo
Variables y expresiones
Operadores
Ejemplo
Palabras reservadas
Funciones
COMPONENTES SOFTWARE: JavaBeans
Normas de diseño
Crear y utilizar un componente JavaBean
Establecer y obtener el valor de las propiedades
Instalación en el servidor
BIBLIOTECA ESTÁNDAR DE ETIQUETAS
Operaciones con etiquetas básicas
Operaciones con etiquetas SQL
Conectar con la base de datos
Realizar una consulta a la base de datos
Realizar una modificación sobre la base de datos
Ejemplo
API de Java
ETIQUETAS PERSONALIZADAS
Tipos de etiquetas
Etiqueta definida mediante una clase
Etiqueta con atributos
Etiqueta definida mediante un fichero
Ejemplo
Directrices
Atributos de la directriz attribute
Atributos de la directriz variable
Fragmentos
ETIQUETAS PERSONALIZADAS VS. JavaBeans
MANIPULACIÓN DE EXCEPCIONES
TRANSFERIR EL CONTROL A OTRO COMPONENTE WEB
FORMULARIOS
Parámetros de las casillas de verificación
Solicitar datos mediante listas (menús)
APLICACIONES WEB UTILIZANDO JSP
Modelo 1
Modelo 2
JSP Y JDBC
EJERCICIOS RESUELTOS
EJERCICIOS PROPUESTOS
CAPÍTULO 13. SERVICIOS
SERVICIOS WEB XML
Crear un nuevo servicio web XML
Cómo se construye un servicio web
Escribir la interfaz del servicio web
Crear un cliente del servicio web
Aplicación Java como cliente de un servicio web
Descubrimiento de servicios web XML
Obtener acceso al servicio web XML
Aplicación web como cliente de un servicio web
Invocar al servicio web desde una página JSP
Invocar al servicio web desde un servlet
SERVICIOS WEB XML SIN HERRAMIENTAS RAD
Crear un servicio web XML
Compilar el servicio web
Generar los artefactos del servicio web en el lado del servidor
Empaquetar el servicio web
Desplegar en servicio web en el servidor GlassFish
Probar el servicio
Generar los artefactos del servicio web en el lado del cliente
Escribir la clase correspondiente al cliente
Compilar el cliente del servicio web
Ejecutar el cliente
SERVICIOS WEB RESTFUL
Crear un nuevo servicio web RESTful
Crear el servicio web RESTful y configurar REST
Probar el recurso web
Petición con parámetros
Cliente Java del servicio web RESTful
EJERCICIOS RESUELTOS
EJERCICIOS PROPUESTOS
CAPÍTULO 14. JSF
DESARROLLO DE UNA APLICACIÓN JSF
FacesServlet
Crear las páginas JSF
Añadir un componente
Añadir un fichero de propiedades
Añadir una nueva página
Definir la navegación entre páginas
Desarrollar los beans de apoyo
Convertidores
Configuración para los beans de apoyo
Desplegar la aplicación
Validación de los datos
Caja de texto vacía
Visualizando mensajes
Valor fuera de rango
Mensaje personalizado
Iniciación de las propiedades de un bean
Facelets
Crear el proyecto
Desarrollar los beans de apoyo
Añadir un fichero de propiedades
Crear las páginas JSF
Usar una plantilla Facelets
Escuchadores de eventos
CICLO DE VIDA DE UNA PÁGINA JSF
CONECTANDO CON BASES DE DATOS
Clases de entidad y unidad de persistencia
Crear los Enterprise Java Beans
Crear los beans de apoyo
Crear la interfaz gráfica
EJERCICIOS RESUELTOS
EJERCICIOS PROPUESTOS
CAPÍTULO 15. AJAX
FUNDAMENTOS DE AJAX
XMLHttpRequest
GENERACIÓN DE CÓDIGO JAVASCRIPT
Fichero JavaScript
AÑADIR AJAX A UNA APLICACIÓN WEB
JAVASERVER FACES MÁS AJAX
Validación usando AJAX
Proyecto JSF con tecnología AJAX
Crear la base de datos
Construir el proyecto
Crear la página JSF con AJAX
ICEFACES
Actualizaciones síncronas y asíncronas
Procesamiento de formularios
Componentes
Utilizando ICEfaces
Construir el proyecto
Crear la página web
EJERCICIOS PROPUESTOS
CAPÍTULO 16. SPRING
ACOPLAMIENTO ENTRE COMPONENTES
ELIMINAR EL ACOPLAMIENTO ENTRE COMPONENTES
INTRODUCCIÓN A SPRING
El contenedor de IoC de Spring
Metadatos de configuración
Crear el contenedor de IoC de Spring
Anotaciones
SPRING, ACCESO A DATOS Y JSF
Crear el proyecto
Capa de acceso a datos
Objetos de negocio
Capa de lógica de negocio
Capa de presentación
Integrar Spring con JSF
EJERCICIOS PROPUESTOS
APÉNDICES
ÍNDICE
PRÓLOGO
Java es un lenguaje de programación introducido por Sun Microsystems cuyas características lo sitúan, junto con Microsoft C# (C Sharp), en uno de los productos ideales para desarrollar programas para la Web.
Cuando Java se introdujo de forma importante, allá por 1995, fue cuando su uso en el diseño de páginas web revolucionó la naturaleza de estas. ¿Recuerda? Todo el mundo hablaba de applets, esos pequeños programas que se ejecutan en el contexto de una página web en cualquier ordenador, introduciendo animación y efectos especiales. Y quizás, esta idea esté enmascarando que Java no solo es eso. Java está también disponible para desarrollar aplicaciones de uso general; esto es, Java le permite crear programas para su uso personal, para su grupo de trabajo, para una empresa, aplicaciones distribuidas a través de Internet, aplicaciones de bases de datos, aplicaciones para móviles y otras muchas que usted pueda imaginar.
Actualmente, en el mercado, hay multitud de herramientas de programación Java, siendo una de las más conocidas NetBeans, actualmente soportada por Oracle. No obstante, la mejor forma de ver el alcance de Java es desarrollando directamente a través del kit de desarrollo de Java (JDK). Se trata de un paquete que se puede obtener de la Red basado en un conjunto de herramientas de órdenes en línea para editar, compilar, ejecutar y depurar programas Java.
Este libro, en su última versión, fue actualizado con JDK 8/Java EE 7 y NetBeans 8 (véanse los apéndices A y B). Está dedicado al diseño de interfaces gráficas, al desarrollo de aplicaciones con acceso a bases de datos, al diseño de páginas web y al desarrollo de aplicaciones para Internet con JSF, persistencia de los datos, servicios web, AJAX y otras técnicas.
Todos los capítulos expuestos se han documentado con abundantes problemas resueltos, de forma que cuando complete su estudio sabrá cómo escribir aplicaciones que presentan una interfaz gráfica, así como aplicaciones para Internet.
Considero importante que, antes de continuar, eche una ojeada a los apéndices. En ellos se expone cómo utilizar el entorno de desarrollo (EDI) NetBeans. Instalando este EDI tendrá todo lo necesario para desarrollar las aplicaciones mencionadas, incluso para trabajar con bases de datos Java DB.
Para quién es este libro
Este libro está pensado para aquellas personas que quieran aprender a desarrollar aplicaciones que muestren una interfaz gráfica al usuario, aplicaciones para acceso a bases de datos y para Internet (páginas web). Para ello, ¿qué debe hacer el lector? Pues simplemente leer ordenadamente los capítulos del libro, resolviendo cada uno de los ejemplos que en ellos se detallan.
Evidentemente, no vamos a enseñar a programar aquí, por eso es necesario tener algún tipo de experiencia con un lenguaje de programación orientado a objetos (Java, C#, Visual Basic, etc., son lenguajes orientados a objetos). Haber programado en Java sería lo ideal, así como tener conocimientos de HTML y XML. Estos requisitos son materia de mis otros libros Java: Lenguaje y aplicaciones y Java: Curso de programación, ambos editados también por las editoriales RA-MA y Alfaomega Grupo Editor.
Java: Lenguaje y aplicaciones se centra en la programación básica: tipos, sentencias, matrices, métodos, ficheros, etc., y hace una introducción a las interfaces gráficas, a las bases de datos y a las aplicaciones para Internet, y Java: Curso de programación cubre la programación básica (expuesta en menor medida en el libro anterior) y la programación orientada a objetos (POO) en detalle: clases, clases derivadas, interfaces, paquetes, excepciones, etc.; después, utilizando la POO, añade otros temas como estructuras dinámicas de datos, algoritmos de uso común, hilos (programación concurrente), etc. Este sí que es un libro de programación con Java en toda su extensión. Puede ver más detalles de cada uno de ellos en mi web: www.fjceballos.es.
Cómo está organizado el libro
El libro se ha estructurado en 16 capítulos más algunos apéndices que a continuación se relacionan. El capítulo 1 nos introduce en el desarrollo de aplicaciones de escritorio. Los capítulos 2 al 5 nos enseñan a desarrollar aplicaciones de escritorio que muestran una interfaz de ventanas al usuario. Los capítulos 6 al 8 cubren el enlace a datos, el acceso a bases de datos (JDBC) y la persistencia de los datos. Y los capítulos 9 al 16 nos enseñan cómo desarrollar aplicaciones para Internet a base de formularios web, servlets, servicios web, JSP, JSF y AJAX.
CAPÍTULO 1. MI PRIMERA APLICACIÓN
CAPÍTULO 2. JFC (SWING)
CAPÍTULO 3. MENÚS Y BARRAS DE HERRAMIENTAS
CAPÍTULO 4. CONTROLES Y CAJAS DE DIÁLOGO
CAPÍTULO 5. TABLAS Y ÁRBOLES
CAPÍTULO 6. ENLACE DE DATOS
CAPÍTULO 7. ACCESO A UNA BASE DE DATOS
CAPÍTULO 8. PERSISTENCIA
CAPÍTULO 9. Java EE
CAPÍTULO 10. CLIENTES
CAPÍTULO 11. SERVLETS
CAPÍTULO 12. JSP
CAPÍTULO 13. SERVICIOS WEB
CAPÍTULO 14. JSF
CAPÍTULO 15. AJAX
CAPÍTULO 16. SPRING
APÉNDICES
Qué se necesita para utilizar este libro
Este libro ha sido escrito utilizando el paquete JDK 8/Java EE 7 y NetBeans 8, que incluye todo lo necesario para escribir, construir, verificar y ejecutar aplicaciones Java. Por lo tanto, basta con que instale en su máquina ese software para poder reproducir todos los ejemplos durante el estudio.
Sobre los ejemplos del libro
La imagen del CD de este libro, con las aplicaciones desarrolladas y el software para reproducirlas, puede descargarla desde: https://www.tecno-libro.es/ficheros/descargas/9788499645223.zip La descarga consiste en un fichero ZIP con una contraseña ddd-dd-dddd-ddd-d que se corresponde con el ISBN de este libro (teclee los dígitos y los guiones).
Agradecimientos
He recibido ayuda de algunas personas durante la preparación de este libro y, por ello, estoy francamente agradecido; pero en especial quiero expresar mi agradecimiento a mi colega Óscar García Población y a mi amigo Roberto Canales Mora, empresario dedicado al desarrollo de soluciones informáticas (puede saber más de él en http://www.autentia.com), por sus buenas recomendaciones y aportaciones en la corrección que hicieron de la segunda edición de este libro. También deseo expresar mi agradecimiento a Oracle por poner a mi disposición en particular y de todos los lectores, en general, los productos que la creación y el estudio de esta obra requieren.
Francisco Javier Ceballos Sierra
http://www.fjceballos.es/
CAPÍTULO 1
© F.J.Ceballos/RA-MA
MI PRIMERA APLICACIÓN
El desarrollo de aplicaciones que utilizan interfaces gráficas a base de ventanas es una realidad. Una de las grandes ventajas de trabajar con ventanas es que todas se comportan de la misma forma independientemente del sistema operativo con el que trabajemos (Windows, Linux...) y, en muchas ocasiones, utilizan los mismos componentes básicos para introducir órdenes (menús descendentes, botones, etc.).
Por ejemplo, una ventana típica de Windows tiene las siguientes partes:
Barra de menús. Visualiza el conjunto de los menús disponibles para esa aplicación. Cuando alguno de los menús se activa haciendo clic con el ratón sobre su título, se visualiza el conjunto de órdenes que lo forman.
Imagen2. Icono de la aplicación y menú de control. El menú de control proporciona órdenes para restaurar tamaño, mover, dimensionar, minimizar, maximizar y cerrar la ventana.
3. Barra de título. Contiene el nombre de la ventana y del documento. Para mover la ventana a otro lugar, apunte con el ratón a esta barra, haga clic utilizando el botón izquierdo del ratón y, manteniendo pulsado el botón, arrastre en la dirección deseada. Un doble clic maximiza o retorna a tamaño normal la ventana, dependiendo esto de su estado actual.
4. Botón para minimizar la ventana. Cuando se pulsa este botón, la ventana se reduce a su forma mínima. Esta es la mejor forma de mantener las aplicaciones cuando tenemos varias de ellas activadas y no se están utilizando en ese instante.
5. Botón para maximizar la ventana. Cuando se pulsa este botón, la ventana se amplía al máximo y el botón se transforma en Imagen . Si este se pulsa de nuevo, la ventana se reduce al tamaño anterior.
6. Botón para cerrar la ventana. Cuando se pulsa este botón, se cierra la ventana; y la aplicación, si la ventana es la principal.
7. Barra de desplazamiento vertical. Cuando la información no entra verticalmente en una ventana, Windows añade una barra de desplazamiento vertical a la derecha de la ventana.
8. Marco de la ventana. Permite modificar el tamaño de la ventana. Para cambiar el tamaño, apunte con el ratón a la esquina o a un lado del marco y cuando el puntero cambie a una flecha doble, con el botón izquierdo del ratón pulsado, arrastre en el sentido adecuado para conseguir el tamaño deseado.
9. Barra de desplazamiento horizontal. Cuando la información no entra horizontalmente en una ventana, Windows añade una barra de desplazamiento horizontal en el fondo de la ventana.
Cada barra de desplazamiento tiene un cuadrado de desplazamiento que se mueve a lo largo de la barra para indicar en qué posición nos encontramos con respecto al principio y al final de la información tratada, y dos flechas de desplazamiento.
Para desplazarse:
Una línea verticalmente o un carácter horizontalmente: utilice las flechas de desplazamiento de las barras.
Varias líneas verticalmente o varios caracteres horizontalmente: apunte con el ratón a una flecha de desplazamiento, haga clic con el botón izquierdo y mantenga el botón pulsado.
Aproximadamente una pantalla completa: haga clic sobre la barra de desplazamiento. Para subir, haga clic encima del cuadrado de desplazamiento de la barra vertical, y para bajar, haga clic debajo del cuadrado. Para moverse a la izquierda, haga clic a la izquierda del cuadrado de desplazamiento de la barra horizontal, y para moverse a la derecha, haga clic a la derecha del cuadrado.
A un lugar específico: haga clic sobre el cuadrado de desplazamiento y, manteniendo el botón del ratón pulsado, arrastre el cuadrado.
10. Área de trabajo. Es la parte de la ventana en la que el usuario coloca el texto y los gráficos.
Muchas otras ventanas, como veremos posteriormente en nuestras aplicaciones, incluyen también una barra de herramientas, una barra de estado y algunas veces un botón para dividir la vista de la ventana en varias vistas.
FORMULARIOS
La unidad fundamental de una aplicación que visualice una interfaz gráfica es el formulario. Un formulario es realmente una ventana sobre la que se dibujan otros objetos llamados componentes o controles, tales como etiquetas, cajas de texto, casillas de verificación, botones de opción, botones de pulsación, barras de desplazamiento, etc., con el fin de aceptar, procesar o visualizar datos.
Imagen_0029.jpgEn una aplicación se pueden utilizar tantos formularios como se necesiten, y, dependiendo de la utilidad que se les dé, estos serán de diferentes tipos. Así, se puede crear un formulario para que contenga un gráfico, para visualizar información o para aceptar datos.
Para dibujar los controles, lo más fácil es utilizar un entorno de desarrollo integrado que proporcione un editor de formularios (véase el apéndice A).
Además, podemos añadir menús descendentes y menús contextuales, para proporcionar al usuario un amplio rango de órdenes seleccionables.
Finalizado el diseño de la interfaz gráfica de usuario (IGU: medio de comunicación de la aplicación con el usuario), se escribe el código fuente relacionado con cada objeto (formularios y controles). Esto quiere decir que cada objeto está ligado a un código que permanece inactivo hasta que se produzca el evento que lo activa. Por ejemplo, podemos programar un botón de órdenes (objeto que se puede pulsar) para que responda a un clic del ratón haciendo alguna cosa.
Según lo expuesto, una aplicación con una interfaz gráfica trabaja estableciendo entre los objetos que componen la misma una comunicación mediante mensajes, los cuales son producidos por eventos. Cuando un mensaje llega a un objeto, este tiene que procesarlo.
Un evento es un mecanismo mediante el cual el objeto puede notificar de la ocurrencia de un suceso. El evento puede ser producido por el usuario (por ejemplo, cuando pulsa una tecla), por el sistema (por ejemplo, transcurrió un determinado tiempo) o indirectamente por el código (por ejemplo, cuando el código carga una ventana). En un entorno de ventanas, cada ventana y cada control pueden responder a un conjunto de eventos predefinidos. Cuando ocurre uno de estos eventos, el sistema envía un mensaje que será interceptado por el objeto que deba responder al mismo. La respuesta consistirá en la ejecución del método que se haya escrito para responder a dicho mensaje.
ImagenPor ejemplo, en la figura siguiente, cuando el usuario haga clic sobre el botón Haga clic aquí, en la etiqueta aparecerá el mensaje ¡¡¡Hola, mundo!!!
.
Por lo tanto, para programar una aplicación basada en ventanas, hay que escribir código separado para cada objeto en general, quedando la aplicación dividida en pequeños métodos, conducido cada uno de ellos por un evento. Por ejemplo:
ImagenPara que se produzca el resultado que muestra la figura anterior, el método BotónMouseClicked ha de estar ligado al objeto botón titulado Haga clic aquí y debe ser puesto en ejecución cuando sobre él se produzca el evento clic. Esto quiere decir que cuando el usuario haga clic en ese botón, se ejecutará el método BotónMouseClicked. Por eso, esta forma de programar se denomina programación conducida por eventos y orientada a objetos.
BIBLIOTECA JFC
Para diseñar aplicaciones que utilicen interfaces gráficas (ventanas con controles, como etiquetas, cajas de texto, botones, barras de desplazamiento, etc.), Java proporciona una biblioteca de clases denominada JFC (Java Foundation Classes clases base de Java). Actualmente, bajo esta denominación se agrupan las siguientes API (interfaces para programación de aplicaciones):
Swing. Conjunto de componentes escritos en Java para diseñar interfaces gráficas de usuario que se ejecutan uniformemente en cualquier plataforma nativa que soporta la máquina virtual de Java.
AWT (Abstract Window Toolkit kit de herramientas de ventanas abstractas). Grupo de componentes, para diseñar interfaces gráficas de usuario, común a todas las plataformas, pero escritos específicamente para cada plataforma en código nativo; esto es, no están escritos en Java. Este grupo ha sido sustituido en gran medida por el conjunto de componentes Swing; muchos de estos heredan de sus correspondientes componentes AWT.
Accesibilidad. Ofrece soporte para usuarios con limitaciones.
Java 2D. Permite incorporar, en los programas, gráficos 2D de alta calidad, texto e imágenes.
Soporte para arrastrar y colocar (drag and drop). Permite la transferencia de datos entre aplicaciones mediante la simple operación de arrastrarlos hasta el lugar de destino.
¿Swing o AWT? La gran diferencia entre los componentes Swing y los componentes AWT es que los primeros están implementados absolutamente con código no nativo, lo que los hace independientes de la plataforma, razón que justifica sobradamente su utilización. Además, proporcionan más capacidades que los componentes AWT. Los componentes Swing se pueden identificar porque su nombre empieza por J; por ejemplo, el componente AWT Button tiene su correspondiente componente Swing JButton. Los componentes AWT se localizan en el paquete java.awt y los componentes Swing en el paquete javax.swing. Todos los componentes Swing son subclases de la clase JComponent.
Como ejemplo, en los siguientes apartados vamos a crear una aplicación que presente una interfaz gráfica como la de la figura anterior.
ESTRUCTURA DE UNA APLICACIÓN
Este apartado explica cómo construir una aplicación mínima que presente una interfaz gráfica. De esta forma podemos estudiar desde un punto de vista práctico cuáles son y cómo interaccionan entre sí los elementos que configuran una aplicación. Dicha aplicación construirá y visualizará una ventana como la de la figura siguiente:
Imagen_0032.jpgEsta ventana tiene un menú de control, un título y los botones de maximizar, minimizar y cerrar. Cuando el usuario pulse el botón Imagen307.PNG , la ventana se reducirá a un icono, cuando pulse el botón Imagen314.PNG , la ventana se agrandará para ocupar toda la pantalla y cuando pulse el botón Imagen323.PNG , la aplicación finalizará. Así mismo, cuando haga clic encima del icono de la aplicación situado a la izquierda de la barra de título, se abrirá el menú de control. Este menú incluye las órdenes Restaurar, Mover, Tamaño, Minimizar, Maximizar y Cerrar. Las tres últimas realizan la misma función que los botones descritos.
Esta aplicación, que denominaremos CAplicacion.java, la escribiremos con el fin de estudiar de forma pormenorizada su estructura.
Una aplicación que muestra una interfaz gráfica cuando se ejecuta no es más que un objeto de una clase derivada de JFrame. Según esto, el código mostrado a continuación puede ser una estructura válida para la mayoría de las aplicaciones que inician su ejecución visualizando una ventana principal:
ImagenImagenAnalizando el código, se puede observar que esta aplicación es un objeto de una subclase de la clase JFrame del paquete javax.swing:
ImagenImagenLa clase CAplicacion hereda todos las propiedades y métodos de su clase padre JFrame. Además de las propiedades y métodos heredados, la clase CAplicacion encapsula tres métodos más: el constructor CAplicacion, initComponents y exitForm. Por otra parte, el método initComponents añade al objeto CAplicacion (referenciado por this) un objeto de la clase WindowAdapter; se trata del manejador de eventos (ME) de ventana. Cuando sobre CAplicacion se produzca un evento de ese tipo, por ejemplo cerrar la ventana, el ME lo filtrará y buscará el método que se debe ejecutar para responder a tal evento, modificando el estado (propiedades del objeto) del objeto CAplicacion.
El punto de entrada a la aplicación es el método main. Veamos qué ocurre cuando se ejecuta este método:
ImagenImagenPrimero, se invoca al constructor CAplicacion para construir un objeto JFrame que se corresponde con la ventana principal de la aplicación o ventana marco.
new CAplicacion();
El constructor establece el tamaño y el título de la ventana, y llama al método initComponents, para iniciar los componentes del formulario.
ImageninitComponents invoca al método addWindowListener(WindowListener l) para añadir a la ventana principal (referenciada por this) un escuchador de eventos (también llamado manejador de eventos) del tipo WindowListener. De esta forma, la aplicación podrá responder a los eventos de ventana (por ejemplo, cerrar la ventana). Los manejadores de eventos se explican un poco más adelante, en el apartado Manejo de eventos.
Cuando en una ventana ocurre el evento cerrar la ventana (clic en el botón Imagen ) se invoca automáticamente al método windowClosing, que, en nuestro caso, llama al método exitForm que finaliza la aplicación.
ImagenEche una ojeada al apartado Diseño de una aplicación con interfaz gráfica del apéndice A; fíjese en el método initComponents. Podrá observar que el proceso aquí explicado para cerrar la ventana se implementa indirectamente a través de la llamada al método setDefaultCloseOperation.
Una vez finalizado el método initComponents, la ventana principal está construida. Para visualizarla, el método main envía el mensaje setVisible con el argumento true al objeto CAplicacion.
Estamos ante una programación orientada a objetos y conducida por eventos. Esto es, la aplicación se ejecuta y queda a la espera de las acciones que pueda emprender el usuario de la misma. En el ejemplo tan simple que acabamos de presentar, una de las acciones que puede tomar el usuario es cerrar la ventana, lo que origina el evento correspondiente. ¿Cómo responde la aplicación a este evento? Ejecutando el método windowClosing asociado con él de forma predeterminada. Por lo tanto, nosotros podemos redefinir este método y programar las acciones a tomar; en este caso, salir de la aplicación. Lógicamente, se pueden producir otros eventos; por ejemplo: la ventana se abre, se minimiza, vuelve a su estado normal, etc. Lo que tiene que saber es que la aplicación Java siempre responderá a cada evento invocando a su método asociado.
Un detalle de estilo a la hora de escribir el código. Observe que, por no añadir las sentencias import que se muestran a continuación, los nombres de las clases e interfaces tienen que ir precedidos por el nombre del paquete al que pertenecen. Hay entornos de desarrollo, como NetBeans, que trabajan de esta forma.
import javax.swing.*; // componentes swing
import java.awt.*; // administradores de diseño
import java.awt.event.*; // manejadores de eventos
Si edita, compila y ejecuta esta aplicación, como se indica en el apartado siguiente, obtendrá como resultado la ventana mostrada anteriormente. Así mismo, podrá observar que dicha ventana tiene operativas todas sus capacidades (maximizar, minimizar, etc.). Entonces, si todas sus capacidades están habilitadas de forma predeterminada, ¿por qué se ha redefinido el método windowClosing? Porque además de cerrar la ventana (acción habilitada de forma predeterminada), queremos salir de la aplicación (acción ejecutada por el método System.exit).
Compilar y ejecutar la aplicación
Observe la primera línea de código de la aplicación anterior; especifica el paquete al que pertenece la clase CAplicacion:
package Cap01.EstructuraAp;
Sabemos que la propia biblioteca de clases de Java está organizada en paquetes dispuestos jerárquicamente. Pues bien, esta estructura jerárquica se hace corresponder en el disco duro con una estructura jerárquica de carpetas o directorios, de forma que los nombres de las carpetas coincidan con los elementos que componen el nombre del paquete. Según esto, CAplicacion será una clase ubicada en la carpeta ...\Cap01\EstructuraAp, donde los tres puntos (...) sustituyen al sistema de ficheros al que pertenece Cap01; por ejemplo, c:\java\ejemplos.
Según lo expuesto, para compilar y ejecutar la aplicación desde la línea de órdenes, tendremos que realizar los pasos siguientes:
1. Especificar la ruta donde se localiza el compilador java. Por ejemplo:
set path=%path%;c:\Java\jdk1.7\bin
2. Compilar la aplicación. Para nuestro ejemplo, escribiríamos:
cd c:\java\ejemplos
javac Cap01/EstructuraAp/CAplicacion.java (se puede utilizar / o \)
3. Ejecutar la aplicación. Para nuestro ejemplo, escribiríamos (observe que se escribe el nombre de la clase principal precedido por el nombre del paquete):
java Cap01/EstructuraAp/CAplicacion (se puede utilizar / o .)
Si no se hubiera especificado un nombre de paquete (línea package...), para compilar y ejecutar la aplicación, haríamos lo siguiente:
1. Especificar la ruta donde se localiza java. Por ejemplo:
set path=%path%;c:\Java\jdk1.7\bin
2. Compilar la aplicación. Para nuestro ejemplo, escribiríamos:
cd c:\java\ejemplos\Cap01\EstructuraAp
javac CAplicacion.java
3. Ejecutar la aplicación. Para nuestro ejemplo, escribiríamos:
java CAplicacion
Desde un entorno de desarrollo, por ejemplo desde NetBeans, todo este proceso sería automático, como se explica en el apéndice A. Pruebe a utilizarlo. Véase también el apéndice C relativo a ficheros JAR.
DISEÑO DE LA INTERFAZ GRÁFICA
Nuestro siguiente paso consistirá en añadir a la ventana de la aplicación los componentes Swing necesarios. Este proceso requiere crear los componentes y colocarlos en el contenedor aportado por el propio formulario o en otros que nosotros creemos expresamente. Así mismo, la colocación de los componentes en un contenedor está supeditada a un administrador de diseño. Todo ello lo veremos detalladamente a continuación.
Crear un componente Swing
La forma de crear un componente Swing no difiere en nada de cómo lo hacemos con un objeto de cualquier otra clase. Se crea el componente invocando al constructor de su clase y se inician las propiedades del mismo invocando a los métodos correspondientes.
El siguiente ejemplo crea un botón de pulsación titulado Haga clic aquí, establece como tecla de acceso la c y le asigna una descripción abreviada. Más tarde veremos cómo añadirlo a un contenedor.
// Crear un botón referenciado por jBtSaludo jBtSaludo =
new JButton(Haga clic aquí
);
// Establecer como tecla de acceso la c. Entonces, pulsar Alt+C
// será equivalente a hacer clic sobre el botón. jBtSaludo.
setMnemonic(‘c’);
// Asignar al botón una descripción abreviada
jBtSaludo.setToolTipText(botón de pulsación
);
Componentes Swing más comunes
Hay componentes Swing para cada uno de los elementos que usted ya ha visto más de una vez en alguna ventana de la interfaz gráfica de su sistema Windows, UNIX u otro. A continuación se muestra de forma resumida una lista de los más comunes:
Etiquetas. Se implementan a partir de la clase JLabel.
Botones. Se implementan a partir de la clase JButton.
Cajas de texto. Se implementan a partir de la clase JTextField las de una sola línea de texto, y a partir de JTextArea las de varias líneas.
Casillas de verificación. Se implementan a partir de la clase JCheckBox.
Botones de opción. Se implementan a partir de la clase JRadioButton.
Listas. Se implementan a partir de la clase JList.
Barras de desplazamiento. Se implementan a partir de la clase JScrollBar.
Cuadros de diálogo estándar. Se implementan a partir de la clase JOptionPane.
Los componentes Swing se localizan en el paquete javax.swing. Todos los componentes Swing son subclases de la clase JComponent.
Contenedores
Los contenedores son componentes Swing utilizados para ubicar otros componentes. Una ventana es un contenedor. Como ejemplo, se puede ver en la figura siguiente la interfaz gráfica correspondiente a la aplicación Swing que a continuación vamos a desarrollar. Se trata de una ventana con una etiqueta y un botón; estos componentes pueden estar sobre el contenedor definido por la propia ventana o en cualquier otro que nosotros creemos y añadamos a dicha ventana.
ImagenEn general, para ayudarnos a colocar adecuadamente los componentes, es posible utilizar una jerarquía de contenedores. La raíz de esa jerarquía siempre será el contenedor del nivel superior definido por el marco de la ventana. Pertenecen a este nivel los contenedores definidos por JFrame, JDialog y JApplet.
Cada contenedor define un componente denominado panel. Así, un contenedor del nivel superior en la jerarquía define un panel denominado panel raíz. Se trata de un panel de contenido que permite ubicar, además de controles, otros paneles, formando así una jerarquía de paneles. Para acceder al panel raíz de una ventana, esta debe invocar a su método getContentPane. Por ejemplo, la siguiente sentencia añade el objeto jPnPanel al panel raíz de la ventana correspondiente (la referenciada por this):
getContentPane().add(jPnPanel, BorderLayout.CENTER);
En general, un panel de contenido es un objeto de la clase JPanel. A diferencia del panel raíz, un objeto JPanel se corresponde con un contenedor de un nivel intermedio; su propósito es simplificar la colocación de controles. Un panel de contenido puede incluir a su vez otros paneles de contenido formando así una jerarquía de paneles. Como ejemplo, la siguiente sentencia crea un objeto JPanel:
JPanel jPnPanel = new JPanel();
Para añadir un componente a un panel, utilizaremos su método add. Por ejemplo, el siguiente código añade una etiqueta (objeto de la clase JLabel) y un botón (objeto de la clase JButton) al panel referenciado por jPnPanel:
jPnPanel.add(etiqueta);
jPnPanel.add(botón);
Administradores de diseño
Un administrador de diseño está pensado para mostrar varios componentes a la vez en un orden preestablecido.
Si utiliza NetBeans, este asignará a cada contenedor de forma predeterminada un administrador de diseño libre, Free Design, que permite distribuir los componentes libremente usando unas líneas guía que automáticamente sugieren la alineación y el espaciado óptimo para los mismos, todo esto sin requerir un administrador de diseño de los definidos en Java. Esto es así porque Free Design utiliza el administrador de diseño GroupLayout especialmente construido para ser utilizado con el IDE NetBeans de forma totalmente transparente para facilitar el diseño de formularios (lo mismo sucede con SpringLayout).
Además, Swing proporciona los siguientes administradores de diseño:
Imagen BorderLayout. Diseño con límites. Divide un contenedor en cinco secciones denominadas norte, sur, este, oeste y centro. Es el administrador de diseño que tienen asignado de forma predeterminada los contenedores del nivel superior. Los componentes se colocarán en una sección u otra según decidamos.
Imagen GridLayout. Diseño por rejilla. Coloca los componentes en el contenedor en filas y columnas.
Imagen GridBagLayout. Diseño tipo rejilla. Coloca los componentes en el contenedor en filas y columnas. A diferencia de GridLayout, permite que un componente pueda ocupar más de una fila y/o columna.
Imagen CardLayout. Diseño por paneles. Este administrador permite colocar en el contenedor grupos diferentes de componentes en instantes diferentes de la ejecución (similar a los paneles con pestañas).
Imagen BoxLayout. Diseño en caja. Coloca los componentes en el contenedor en una única fila o columna, ajustándose al espacio que haya.
Imagen FlowLayout. Diseño en flujo. Coloca los componentes en el contenedor de izquierda a derecha (igual que se coloca el texto en un párrafo). Es el administrador de diseño asignado de forma predeterminada a los contenedores de un nivel intermedio.
Además de estos, podemos utilizar el administrador de diseño absoluto o no utilizar ninguno (administrador de diseño nulo: null); estos dos últimos no son estándar, pero permiten colocar los componentes exactamente donde se quiera. Nosotros utilizaremos el administrador de diseño null en este y sucesivos capítulos para obtener un código limpio que nos permitirá aprender con mayor facilidad.
Cuando queramos asignar a un contenedor un administrador de diseño diferente del predeterminado, primero hay que crearlo y después asignárselo invocando a su método setLayout. Por ejemplo, la siguiente sentencia asigna al contenedor jPnPanel un administrador de diseño de tipo GridLayout con 0 filas y 1 columna (los controles se colocarán en columna).
jPnPanel.setLayout(new GridLayout(0, 1));
Esta otra sentencia que se muestra a continuación indica que no se asignará ningún administrador de diseño al contenedor del objeto referenciado por this:
getContentPane().setLayout(null);
Añadir los componentes al contenedor
Nuestro objetivo es diseñar una aplicación que muestre una ventana principal con un botón y una etiqueta:
Imagen_0041.jpgCuando el usuario haga clic en el botón, la etiqueta mostrará el mensaje ¡¡¡Hola, mundo!!!
. La figura anterior muestra el aspecto de esta ventana. En ella se puede observar que el botón puede activarse, además de con un clic del ratón, utilizando las teclas Alt+C, y que tiene asociada una breve descripción.
Asignar un administrador de diseño
Volviendo a la aplicación anterior (CAplicacion.java), vamos a asignar al contenedor JFrame un administrador de diseño null. Para ello, añada al método initComponents la siguiente línea de código:
ImagenAñadir una etiqueta y editar sus propiedades
Para añadir una etiqueta al contenedor proporcionado por el objeto CAplicacion, siga estos pasos:
1. Añada a la clase CAplicacion una variable de tipo JLabel denominada jEtSaludo:
private javax.swing.JLabel jEtSaludo;
2. Cree un objeto JLabel referenciado por jEtSaludo. Para ello, añada al método initComponents el código siguiente:
jEtSaludo = new javax.swing.JLabel();
3. Modifique las propiedades de la etiqueta para que muestre inicialmente el texto etiqueta
, centrado, en negrita y de tamaño 18. Para ello, escriba a continuación de la sentencia anterior el siguiente código:
jEtSaludo.setText(etiqueta
);
jEtSaludo.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
jEtSaludo.setFont(new java.awt.Font(Dialog
, 1, 18));
4. Finalmente, añada la etiqueta al panel raíz del objeto CAplicacion y establezca su posición en el contenedor y su tamaño.
getContentPane().add(jEtSaludo);
jEtSaludo.setBounds(40, 36, 204, 30);
El método add del objeto Container devuelto por getContentPane permite añadir un componente a un contenedor; en nuestro caso, al de CAplicacion; setBounds, método heredado de la clase java.awt.Component, permite establecer las coordenadas de la esquina superior izquierda de un componente (relativas a la esquina superior izquierda del contenedor), su anchura y su altura.
Una vez ejecutados los pasos anteriores, la clase CAplicacion puede quedar así (se han omitido los métodos ya expuestos):
ImagenAñadir un botón de pulsación y editar sus propiedades
Para añadir un botón de pulsación, los pasos son análogos a los expuestos para añadir una etiqueta:
1. Añada a la clase CAplicacion una variable de tipo JButton denominada jBtSaludo:
private javax.swing.JButton jBtSaludo;
2. Cree un objeto JButton referenciado por jBtSaludo. Para ello, añada al método initComponents el código siguiente:
jBtSaludo = new javax.swing.JButton();
3. Modifique su propiedad text para que muestre el título Haga clic aquí
:
jBtSaludo.setText(Haga clic aquí
);
4. Modifique su propiedad toolTipText para que muestre el mensaje botón de pulsación
:
jBtSaludo.setToolTipText(botón de pulsación
);
5. Modifique su propiedad mnemonic para asociarle la tecla de acceso c:
jBtSaludo.setMnemonic(‘c’);
6. Finalmente, establezca la posición y el tamaño del botón en el contenedor y añádalo al panel raíz del objeto CAplicacion.
getContentPane().add(jBtSaludo);
jBtSaludo.setBounds(40, 90, 204, 30);
El proceso de añadir los componentes resultará muy sencillo si utilizamos un entorno de desarrollo como NetBeans de Sun Microsystems. Simplemente tendríamos que tomar los componentes de una paleta y dibujarlos sobre el formulario utilizando el ratón. Esto haría que se añadiera automáticamente todo el código descrito anteriormente (véase el apéndice A para más detalles).
Una vez ejecutados los pasos anteriores, la clase CAplicacion puede quedar así (se han omitido los métodos ya expuestos):
ImagenImagenMANEJO DE EVENTOS
Cuando una acción sobre un componente genera un evento, se espera que suceda algo, entendiendo por evento un mensaje que un objeto envía a algún otro objeto. Entonces hay un origen del evento, por ejemplo, un botón, y un receptor del mismo, por ejemplo, la ventana que contiene ese botón. Lógicamente, ese algo hay que programarlo y para ello hay que saber cómo controlar ese evento. Los eventos que se producen sobre un componente se manipulan a través de los manejadores de esos eventos. Un manejador/escuchador de eventos es un objeto en el que un componente delega la tarea de manipular un tipo particular de eventos.
En la figura siguiente puede ver que cuando un componente genera un evento, un manejador de eventos vinculado con el componente se encarga de responder al mismo ejecutando el método programado para ello.
ImagenUn componente tendrá asociados tantos manejadores o escuchadores de eventos como tipos de eventos tenga que manejar.
Java proporciona varios manejadores de eventos, cada uno de los cuales maneja un tipo particular de eventos. Por ejemplo, WindowListener permite a una ventana responder a las acciones que ocurren sobre ella (eventos de tipo WindowEvent), como minimizarla, abrirla, moverla, etc., y ActionListener permite a un componente responder a las acciones que ocurren sobre él (eventos de tipo ActionEvent), como un clic sobre un botón.
Asignar manejadores de eventos a un objeto
Un objeto, generalmente un componente, tendrá asociados tantos manejadores de eventos como tipos de eventos tenga que manejar.
Por ejemplo, considere el botón jBtSaludo que anteriormente añadimos a la interfaz gráfica de CAplicacion. Cada vez que el usuario haga clic sobre este botón, se generará un evento de acción que podrá ser interceptado por un manejador de este tipo de eventos, si es que tiene uno asociado.
¿Cómo vinculamos un manejador de eventos con un componente? Lo haremos de la siguiente forma:
1. Creamos una clase que implemente la interfaz que aporta los métodos que permiten responder al tipo de eventos que tratamos de manejar. En nuestro caso se trata de la interfaz ActionListener.
ImagenLa clase ManejadorEvtjBt redefine el método actionPerformed que se ejecutará como respuesta al evento evt generado.
2. Construimos un objeto de esa clase; se trata del manejador de eventos.
java.awt.event.ActionListener al = new ManejadorEvtjBt();
3. Vinculamos el manejador de eventos con el componente.
jBtSaludo.addActionListener(al);
Estas operaciones pueden escribirse de una forma más simplificada así:
ImagenEl código anterior generará una clase anónima. También se puede escribir así:
ImagenObserve que el método actionPerformed recibe como argumento un evento de tipo ActionEvent. Dicho argumento no es más que un objeto que proporciona información tal como el componente que originó el evento, si se pulsó simultáneamente alguna tecla (Alt, Ctrl, Shift), tipo de evento, orden asociada con ese evento, etc. Tal información la utilizaremos para responder a dicho evento. Por ejemplo, si hubiera más de un componente asociado con el manejador de eventos del ejemplo anterior, podríamos proceder así:
ImagenOtra técnica que puede ser útil es proceder en función de la clase del componente. Por ejemplo:
ImagenAdemás del método getSource, la clase ActionEvent proporciona el método getActionCommand que permite trabajar con órdenes de acción diferentes a la predeterminada (la orden predeterminada coincide con el texto asociado con el componente: título del botón, contenido de la caja de texto, etc.). Las órdenes de acción son excepcionalmente útiles cuando se escribe un programa en el que más de un componente debería provocar la misma acción (por ejemplo, los elementos de un menú). Con este fin, componentes como el botón, la caja de texto o un elemento de un menú, proporcionan el método setActionCommand. En capítulos posteriores podrá experimentar con estos métodos.
Adaptadores
Si echamos una ojeada a la ayuda proporcionada junto con el JDK y observamos los métodos proporcionados por las interfaces expuestas anteriormente, veremos que hay interfaces como ActionListener que proporcionan un único método y otras como WindowListener que proporcionan varios métodos.
Ahora observe el método initComponents de la clase CAplicacion del ejemplo que venimos desarrollando a lo largo de este capítulo; invoca al método addWindowListener para añadir a la ventana principal (referenciada por this) un manejador de eventos del tipo WindowListener. De esta forma, la aplicación podrá responder a los eventos de ventana (por ejemplo, cerrar la ventana).
ImagenAsí mismo, observe que el argumento de addWindowListener es un objeto de una clase anónima, subclase de WindowAdapter, que redefine el método windowClosing. Dicha clase anónima será denominada CAplicacion$1 por el compilador, lo que podrá comprobar cuando compile la aplicación.
¿Quién es WindowAdapter? ¿Por qué siguiendo lo expuesto en el apartado anterior no se ha añadido el manejador de eventos de ventana así?
ImagenSencillamente, porque este código no compilaría. Piense que la clase anónima que se construiría a partir de este código sería una clase CAplicacion$1 que implementaría la interfaz WindowListener y que, como podemos observar, solo redefiniría el método windowClosing, cuando tendría que redefinir todos los métodos abstractos proporcionados por la interfaz, dejando vacíos todos aquellos que no necesiten realizar alguna operación fuera de lo normal. Esto es:
ImagenImagenAsí es como se define la clase WindowAdapter del paquete java.awt.event de la biblioteca de Java que hemos utilizado en nuestra aplicación. Lógicamente, esta clase, que recibe el nombre de adaptador, implementa la interfaz WindowListener. Por lo tanto, utilizando esta clase, nos evitamos el trabajo de tener que redefinir métodos innecesarios.
El paquete java.awt.event define adaptadores para todas las interfaces que proporcionan más de un método. Por ejemplo: FocusAdapter, KeyAdapter, MouseAdapter, etc.
Responder a los eventos
Una vez finalizado el diseño de la interfaz gráfica, hay que asignar a cada uno de los componentes la tarea que debe desempeñar.
Por ejemplo, con respecto a la aplicación que estamos desarrollando, ¿qué tiene que suceder cuando el usuario haga clic en el botón? Pues que en la etiqueta debe aparecer el mensaje ¡¡¡Hola, mundo!!!
. Esto implica añadir un manejador que manipule el evento clic del botón. Para ello, añada el siguiente código al método initComponents:
Entonces, lo que ahora tenemos que hacer es escribir en el método jBtSaludoActionPerformed el código que debe ejecutarse para responder al evento clic de este botón. En nuestro caso, lo que queremos es que la etiqueta muestre el mensaje ¡¡¡Hola, mundo!!!
. Sucesivas pulsaciones mostrarán el mismo mensaje pero en un color diferente. Según esto, el método podría escribirse así:
El método setForeground establece el color del primer plano; en nuestro caso del texto. Observe que este método recibe como argumento un objeto de la clase Color que especifica las componentes rojo, verde y azul del color RGB que representa dicho objeto. Dichas componentes son obtenidas de forma aleatoria invocando al método random.
ESTABLECER LA APARIENCIA DE LAS VENTANAS
Swing tiene un administrador de interfaz de usuario, UIManager, que controla la apariencia (look and feel) de los componentes que forman una interfaz gráfica, que puede ser de estilo Windows, Motif X-Window o Java.
Lo normal es establecer el estilo propio de nuestro sistema, que es devuelto por el método getSystemLookAndFeelClassName de UIManager, o bien el estilo Java, que es devuelto por getCrossPlatformLookAndFeelClassName (estilo multiplataforma, también llamado metal). Para establecer uno de estos estilos, invocaremos al método setLookAndFeel como se muestra a continuación:
ImagenImagenA continuación, compile y ejecute la aplicación. Después haga clic sobre el botón, o bien pulse las teclas Alt+C, y observe los resultados.
Imagen_0051.jpgRESUMEN
En este capítulo se ha expuesto cómo es la estructura de una aplicación Java que presenta una interfaz gráfica y cómo se diseña dicha interfaz. Esto ha requerido crear componentes Swing y explicar lo que son los contenedores y los administradores de diseño. Una vez diseñada la interfaz, se ha explicado cómo manipular los eventos que desencadenarán los objetivos perseguidos. Y, finalmente, se ha indicado cómo modificar el aspecto de la interfaz.
EJERCICIOS PROPUESTOS
1. Modifique la aplicación Saludo desarrollada anteriormente en este capítulo, para que presente una interfaz gráfica igual, pero utilizando administradores de diseño diferentes al absoluto y al nulo. Utilice NetBeans para ello.
Se recomienda realizar una construcción según la figura siguiente:
ImagenPara agregar componentes a una ventana cuando se utilizan administradores de diseño, es aconsejable utilizar contenedores intermedios; esto facilitará la realización de otras operaciones posteriores como, por ejemplo, añadir un borde alrededor de los componentes.
Siempre que sea necesario, un contenedor puede incluir otros contenedores, lo que dará lugar a una jerarquía de contenedores que facilitará la distribución de los componentes. La raíz de esa jerarquía es el contenedor del nivel superior definido por el marco de la ventana.
El resultado será análogo al siguiente:
Imagen_0052.jpgLa ventaja de este diseño sobre el anterior es que ahora, cuando redimensione el formulario, los controles también se redimensionarán.
CAPÍTULO 2
© F.J.Ceballos/RA-MA
JFC (SWING)
Según se expuso en el capítulo anterior, Java proporciona una biblioteca de clases denominada JFC (Java Foundation Classes clases base de Java), denominación que agrupa las interfaces para programación de aplicaciones: Swing, AWT, Accesibilidad, Java 2D y el soporte para arrastrar y colocar (drag and drop), todas incluidas en el conjunto de bibliotecas que definen lo que es Java Platform Standard Edition:
Imagen_0053.jpgActualmente, Swing ha llegado a desplazar a AWT porque ofrece un conjunto de componentes escritos en Java con una mayor funcionalidad y, al estar escritos en Java, independientes de la plataforma.
La diferencia básica entre AWT y Swing es que cada componente AWT tiene asociado su propio recurso nativo de ventana. Esto supone, por una parte, dependencia de la plataforma (por utilizar en su implementación código nativo) y, por otra, un gran consumo de recursos en los programas que incluyan un gran número de componentes. Por esta razón, a estos componentes se les atribuyó el calificativo de pesados
. En cambio, los componentes Swing, a diferencia de los AWT, están escritos en Java, lo que les hace independientes de la plataforma, y no tienen su propia ventana; son sencillamente dibujados como imágenes sobre sus contenedores. Esto redunda en un menor consumo de recursos, razón por la que a estos componentes se les atribuyó el calificativo de ligeros
.
COMPONENTES