Descubre millones de libros electrónicos, audiolibros y mucho más con una prueba gratuita

Desde $11.99 al mes después de la prueba. Puedes cancelar en cualquier momento.

JAVA. Interfaces gráficas y aplicaciones para Internet (4ª Edición)
JAVA. Interfaces gráficas y aplicaciones para Internet (4ª Edición)
JAVA. Interfaces gráficas y aplicaciones para Internet (4ª Edición)
Libro electrónico1723 páginas10 horas

JAVA. Interfaces gráficas y aplicaciones para Internet (4ª Edición)

Calificación: 0 de 5 estrellas

()

Leer vista previa

Información de este libro electrónico

Hasta hace pocos años Java solo nos traía a la mente una taza de café, objeto que se ha convertido en su logotipo, seguramente por las muchas que se tomaron sus creadores. Sin embargo, hoy en día, cualquiera que haya tenido contacto con una página web tiene otro concepto, y sabe que Java es un lenguaje de programación orientado a objetos, introducido por Sun Microsystems, actualmente soportado por Oracle, cuyas características lo convierten en el producto ideal para desarrollar_x000D_
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.
IdiomaEspañol
Fecha de lanzamiento1 ene 2016
ISBN9788499644790
JAVA. Interfaces gráficas y aplicaciones para Internet (4ª Edición)

Lee más de Fco. Javier Ceballos

Relacionado con JAVA. Interfaces gráficas y aplicaciones para Internet (4ª Edición)

Libros electrónicos relacionados

Programación para usted

Ver más

Artículos relacionados

Comentarios para JAVA. Interfaces gráficas y aplicaciones para Internet (4ª Edición)

Calificación: 0 de 5 estrellas
0 calificaciones

0 clasificaciones0 comentarios

¿Qué te pareció?

Toca para calificar

Los comentarios deben tener al menos 10 palabras

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

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

    [email protected]

    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.

    Imagen

    2. 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.jpg

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

    Imagen

    Por 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!!!.

    Imagen_0031.jpg

    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:

    Imagen

    Para 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.jpg

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

    ImagenImagen

    Analizando el código, se puede observar que esta aplicación es un objeto de una subclase de la clase JFrame del paquete javax.swing:

    ImagenImagen

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

    ImagenImagen

    Primero, 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.

    Imagen

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

    Imagen

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

    Imagen

    En 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.jpg

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

    Imagen

    Añ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):

    Imagen

    Añ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):

    ImagenImagen

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

    Imagen

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

    Imagen

    La 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í:

    Imagen

    El código anterior generará una clase anónima. También se puede escribir así:

    Imagen

    Observe 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í:

    Imagen

    Otra técnica que puede ser útil es proceder en función de la clase del componente. Por ejemplo:

    Imagen

    Ademá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).

    Imagen

    Así 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í?

    Imagen

    Sencillamente, 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:

    ImagenImagen

    Así 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:

    ImagenImagen

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

    Imagen

    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:

    ImagenImagen

    A 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.jpg

    RESUMEN

    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:

    Imagen

    Para 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.jpg

    La 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.jpg

    Actualmente, 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

    ¿Disfrutas la vista previa?
    Página 1 de 1