Des Arrollo Interfaces
Des Arrollo Interfaces
Confección de
informes I
08
/ 1. Introducción y contextualización práctica 3
/ 10. Bibliografía 14
© MEDAC 978-84-18983-19-1
Reservados todos los derechos. Queda rigurosamente prohibida, sin la autorización escrita de los titulares del copyright,
bajo las sanciones establecidas en las leyes, la reproducción, transmisión y distribución total o parcial de esta obra por
cualquier medio o procedimiento, incluidos la reprografía y el tratamiento informático.
Establecer la estructura de los informes.
En este capítulo, nos vamos a centrar en una de las herramientas para la creación de reportes más utilizadas en la
actualidad, JasperReports + iReports, desde su descarga e instalación hasta su
puesta en funcionamiento. Esta herramienta pertenece a Jaspersoft y está
disponible desde los principales IDE (Eclipse y Netbeans).
La creación de estos informes no es estática, sino que, a través de las herramientas existentes para la generación
de los mismos, será posible seleccionar entre múltiples elementos y plantillas de diseño que permiten crear los
documentos finales. La creación de informes no es trivial, resulta un elemento clave en muchos procesos, como los
que se muestran en la imagen.
Es posible diferenciar entre dos tipos de informes atendiendo a la forma en la que estos quedan vinculados con la
aplicación. Todo informe requiere de un origen de datos del que tomará la información necesaria para su construcción,
ahora bien, en función de si esto se hace desde la misma aplicación en la que se desarrolla el proyecto o en otra
externa, nos permite distinguir entre dos tipos de informes, incrustados y no incrustados:
• Informes incrustados. Este tipo de informe es el que se genera directamente desde la aplicación en la que el
proyecto que se está desarrollando. Podemos decir que son herramientas integradas en el propio IDE.
Cuando se produce la creación de un informe, de forma automática se genera una clase contenedora con
el mismo nombre que el informe. De esta manera, la interacción entre el proyecto y el informe se hace
directamente a nivel de clases.
a. iReport + JasperReport
b. Eclipse Birt
Eclipse Business Intelligence and Reporting Tools es una herramienta de código abierto que permite la creación de
informes de forma dinámica para entornos de inteligencia empresarial. Se utiliza, sobre todo, para el desarrollo de
aplicaciones en Java, tanto de escritorio como aplicaciones web. Toda la información relativa a esta aplicación se
encuentra disponible desde el sitio web oficial de Eclipse.
c. Crystal report
Esta herramienta de inteligencia empresarial se utiliza para crear informes de forma dinámica, sobre todo, en el
entorno de desarrollo Microsoft Visual Studio.
A continuación, desde la ventana de búsqueda donde aparecen todos los plugins disponibles, buscamos Jasper y pulsamos
el botón Go. Nos aparecerá, entre las opciones disponibles, Jaspersort Studio y basta con pulsar el botón Install.
Finalmente, aceptamos las condiciones y dará comienzo el proceso de instalación. Para que la instalación se complete,
será necesario reiniciar Eclipse.
TEMA 8. CONFECCIÓN DE INFORMES I
Desarrollo de interfaces /6
Para comprobar que la instalación ha tenido éxito, se accede al menú Open Perspective, y como se puede ver en la
siguiente imagen, ya tendríamos disponible el plugin para la generación de informes iReport.
Otra opción para la instalación consiste en descargar el paquete instalable desde la página de Jaspersort Community.
Actualmente, está disponible desde el enlace:
https://community.jaspersoft.com/project/ireport-designer/releases
A continuación, seleccionamos la última versión y comienza la descarga de forma automática en nuestro equipo.
Para ilustrar la creación de un informe, en este capítulo, se utilizará el que viene configurado por defecto, Sample Db.
Al pulsar sobre el botón Test, si todo está instalado correctamente, devolverá un mensaje de éxito.
Hasta aquí ya se habría configurado todo el entorno para la creación de informes, ahora, para crearlos, basta con
acceder al menú File, a continuación, new File y JasperReport.
Existen plantillas completamente en blanco para la generación de informes y otros documentos. En cada caso, se
seleccionará el que más se adecúa al resultado que se desea conseguir.
Tras seleccionar el formato deseado, se pulsa el botón Finish. Finalmente, se solicita seleccionar sobre cuál de los
proyectos contenidos en el IDE se va a realizar el informe.
• Explorador de informes: Esta zona está dividida por Repository Explorer y Project Explorer. En la segunda, se
muestra el resumen habitual de Eclipse en el que se muestran los proyectos y todos los ficheros que pertenecen
a cada uno, incluyendo los generados que la herramienta iReport (presentan una extensión .jrxml). Desde la
pestaña de Repository Explorer, se accede a las conexiones a orígenes de datos.
• Zona de diseño: Al igual que ocurría con el diseño de interfaces utilizando JSwing, esta zona es el lienzo sobre
el que se va colocar y diseñar todo lo relativo al aspecto visual del informe. En la parte inferior, se observan
tres pestañas: Design (utilizada para realizar el diseño), Source (donde se muestra el código generado) y
Preview (en la que se muestran una visión preliminar del diseño, siempre que no se produzcan errores durante
el proceso de compilación).
• Paleta de elementos: En esta sección, se muestran todos los elementos que se pueden utilizar para el diseño
de un informe. Para colocar un elemento, se pulsa sobre él con el ratón y, a continuación, se coloca en la zona
de diseño.
• Zona de propiedades: Cuando se ha seleccionado y colocado un elemento de la paleta sobre la vista del
informe, pulsando en cada uno de estos elementos aparece un nuevo menú, Properties, donde se recogen
todas las propiedades que admiten personalización en cada uno de los elementos.
• Zona de errores: En la zona inferior de la interfaz, aparecen los posibles errores de compilación que se deberán
resolver. Recordemos que estos informes se encapsulan como una clase, por lo que cualquier llamamiento o
instanciación de un objeto o variable debe realizarse correctamente.
• Title: En esta sección, se coloca el nombre asignado al informe. Debe ser claro y conciso para que resuma en
pocas palabras el tipo de datos que se recogen en el informe.
• Page Header: Esta zona se sitúa justo debajo del título del informe y, en ella, aparecen datos generales como
la fecha de generación del mismo.
• Column Header: Es habitual que los informes se generen utilizando columnas bajo las cuales se organiza la
información a mostrar en el informe. En esta sección, se colocan las etiquetas identificadoras de cada una de
las columnas.
Para visualizar el informe, desde Eclipse, en la pestaña Preview, es posible acceder a una vista preliminar del informe
generado como si de una imagen se tratara.
Si lo que se desea es ejecutar y guardar el informe, es decir, obtener una versión “definitiva” del mismo, en la parte
superior, aparece un icono en forma de disquete que nos permitirá exportar el informe en cualquiera de los formatos
de salida permitidos en la aplicación.
Por ejemplo, si se desea enviar por correo electrónico, será aconsejable utilizar un formato como PDF, ya que permite
su descarga y visualización de una forma eficiente.
Otro de los formatos de salida bastante utilizados son los ficheros CSV, puesto que permiten almacenar gran cantidad
de información que habitualmente puede ser procesada por aplicaciones de hojas de cálculo como Excel o Numbers.
• Variables de usuario: Este primer tipo de variables es el que puede crear el usuario. Normalmente, corresponde
con el nombre de los campos del origen de datos vinculado al informe.
• Variables predefinidas: Estas variables aparecen por defecto en la herramienta, es decir, siempre van a estar
presentes y modelan elementos habituales en la generación de cualquier informe.
NOMBRE DESCRIPCIÓN
También, es habitual el uso de determinados valores calculados que resumen los datos mostrados en un informe.
Podemos decir que se agrupan en función del criterio definido. Algunas de las operaciones más comunes son:
• Numeración de líneas: Se utiliza para numerar las líneas contenidas en un informe, habitualmente, en la zona
de Details. Es necesario crear una nueva variable que irá incrementando su valor.
• Recuentos y totales: Este tipo de operaciones se utilizan sobre los valores contenidos en una columna, en
concreto, se aplica la operación suma sobre todos los valores de una determinada columna.
Como se puede ver en la siguiente imagen, cuando se sitúan las variables en la zona de diseño (sobre Details), se
crea de forma automática en Column Header una etiqueta que indica lo que se muestra en cada columna.
Para mostrar el valor resultante de las operaciones realizadas, estas se deben colocar en la zona de Summary. En
concreto, de la misma forma que se han colocado las variables en la zona de Details, también se ubicarán en la de
Summary. A continuación, al hacer doble clic sobre el nuevo elemento situado en la zona de diseño, se abre un
cuadro que permite seleccionar el tipo de operación a realizar.
TEMA 8. CONFECCIÓN DE INFORMES I
Desarrollo de interfaces / 12
Nudo:En primer lugar, selecciona una plantilla de diseño y, seguidamente, modifica, elimina y añade los elementos
que consideres oportunos para obtener una vista final como la mostrada en la imagen anterior. Las imágenes y las
barras se han colocado utilizando las opciones de Image y Rectangle.
Para colocar el número de página, se ha utilizado una variable llamada Page_Number que aparece en la paleta de
elementos en Composite Elements. Para concatenar cualquier palabra a una variable, basta con hacer doble clic
sobre esta y añadir la cadena de texto en el editor de expresiones que aparece en la parte superior de la nueva
ventana.
Nudo: JasperReport permite guardar los informes en múltiples formatos. Desde la pestaña Preview, pulsamos sobre
la fecha que hay justo al lado del “disquete” y seleccionamos el formato de salida que se ajusta a los requisitos de
diseño; a continuación, se escoge la ruta donde se va a guardar el fichero.
Desenlace: A continuación, se muestran los formatos escogidos para cada uno de los casos expuestos:
• Informe mostrado en línea al pulsar sobre un enlace en una página web. En este caso, el formato escogido
será HTML el cual permite descargar el informe con todas las etiquetas necesarias de creación de un sitio web.
• Se desea trabajar con los datos descargados utilizando herramientas de cálculo como Excel o Number. Para
esta segunda opción, sería posible escoger como formato CSV o XLS, y si es conocido que se va a utilizar con
herramientas tales como Excel, podrían tomarse directamente XLS.
• El fichero descargado se va a enviar como adjunto en un correo electrónico a los miembros de una junta
directiva y este no se pude modificar. Finalmente, en este caso, podríamos escoger Docx o PDF, pero dado
que se especifica que el fichero no se pueda modificar, se seleccionará PDF.
Es importante diferenciar entre aquellos informes que aparecen directamente vinculados en el mismo entorno de
trabajo en el que se ha desarrollado un proyecto, hablamos de los informes incrustados, de aquellos que se generan
en aplicaciones externas. Existen muchas herramientas que permiten realizar este tipo de informes, algunas de las
comunes son: Crystal report, Eclipse Birt o JasperReport.
En este capítulo, hemos abordado el proceso de descarga, instalación e inicio de JasperReport, una herramienta
que permite la creación de informes muy completos para aplicaciones creadas en Eclipse, aunque también está
disponible para otros IDE, como Netbeans.
Algunos de los elementos claves utilizados para la inclusión de datos obtenidos de la conexión a bases de datos en
los informes son las variables, parámetros y campos. La combinación de todos esos permiten definir qué tipo de
información va a estar contenida e incluso realizar diferentes operaciones de cálculo sobre estas.
TEMA 8. CONFECCIÓN DE INFORMES I
Desarrollo de interfaces / 14
Una de las funciones habituales de un sistema de información es recoger datos. Estos datos, una vez procesados, se
deben poder comunicar de una manera amigable al usuario.
Dependiendo del tipo de usuario, esta comunicación puede ser bastante diferente. Un usuario técnico puede
necesitar datos muy concretos, mientras que un ejecutivo agradecerá un resumen, seguramente acompañado de
un gráfico.
Las tablas no presentan una forma resumida de los datos de una colección de registros, por lo que, si no queremos
tener que realizar cálculos para averiguar estos detalles, se deben crear informes para obtener este tipo de
información de la base de datos.
Por tanto, los informes son la herramienta que nos permite dar forma al resultado de nuestras consultas.
/ 10. Bibliografía
Fernández, A., García-Miguel, B. y García-Miguel, D. (2020). Desarrollo de Interfaces (1.a ed.). Madrid, España: Síntesis.
DESARROLLO DE INTERFACES
TÉCNICO EN DESARROLLO DE APLICACIONES
MULTIPLATAFORMA
07
/ 1. Introducción y contextualización práctica 3
/ 15. Bibliografía 16
© MEDAC 978-84-18983-19-1
Reservados todos los derechos. Queda rigurosamente prohibida, sin la autorización escrita de los titulares del copyright,
bajo las sanciones establecidas en las leyes, la reproducción, transmisión y distribución total o parcial de esta obra por
cualquier medio o procedimiento, incluidos la reprografía y el tratamiento informático.
Crear menús que se ajustan a los estándares.
En el desarrollo de interfaces, la consecución de la usabilidad queda definida por un conjunto de pautas relativas a
diferentes aspectos del diseño, atendiendo, sobre todo, a la forma de interacción entre aplicación y usuario.
• Punto focal. El punto de atención debe situarse de forma estratégica para no impedir al usuario su
interoperabilidad con la interfaz.
• Relación entre elementos. Esta relación entre elementos debe construirse de forma coherente.
• Legibilidad y flujo entre elementos. El diseño de la interfaz debe construirse de forma legible para el usuario,
los elementos se situarán de tal forma que resulten fáciles de localizar y de realizar su lectura.
• Atajos de teclado
Los atajos de teclado permiten reducir el tiempo de acceso y puesta en ejecución de determinadas acciones.
Habitualmente, los atajos se suelen asociara a aquellas tareas que se utilizan de forma más frecuente.
Los eventos realizados con el ratón suelen ser sustituidos por ciertas combinaciones de teclas que agilizan la acción.
Por ejemplo, es común que para copiar y pegar un texto se acuda a los conocidos atajos de teclado, Ctrl+C, y para
pegarlo, Ctrl+V (estas combinaciones dependerán del sistema operativo). ¿Por qué se utilizan estos atajos? Porque
en acciones muy comunes como estas, resultan más ágil hacerlo así que pulsando sobre el menú correspondiente,
buscar la opción de copiar y luego repetir el proceso para realizar el pegado.
El uso de menús supone múltiples ventajas como son la posibilidad de una navegación rápida e intuitiva del usuario
por toda la aplicación; además, estos permiten mantener una vista despejada de la aplicación al mostrarse y recogerse
a voluntad del usuario.
De forma habitual, los menús aparecen siempre en la misma zona de la aplicación, usualmente en la parte superior de
las aplicaciones. Cuando se pulsa sobre ellos con el ratón o utilizando la combinación de teclas oportunas, es posible
navegar sobre cada uno de los títulos que definen cada menú y los desplegables que se abren.
En este tipo de menús, es habitual encontrar la apertura de combinaciones en cascada, es decir, submenús recogidos
dentro de los menús centrales y que agrupan más acciones.
También, es posible distinguir entre menús contextuales o emergentes, los cuales aparecen normalmente al
seleccionar algún objeto y pulsar sobre ellos utilizando el botón secundario del ratón. El diseño de este tipo de
menús debe tener en cuenta las siguientes premisas:
• Las tareas recogidas en estos menús deberán aparecer también en Fig. 3. Diagrama de menús sencillos e
otro sitio, puesto que puede que el acceso a los mismos no sea del intuitivos vs menús con demasiados elementos
todo intuitivo para todos los usuarios de la aplicación. y desordenados.
Los usuarios deben controlar diferentes aspectos de ellas: poder abrirlas, cerrarlas, modificar su tamaño… y si esto
no es posible, debe existir una justificación lógica en su diseño.
La selección de un mal diseño donde se despliegan ventanas constantemente y no se cierran puede disminuir la
usabilidad de la aplicación, ya que devolverán una interfaz desordenada que complicará la navegación en la aplicación.
Otro de los más importantes bloques de diseño que constituyen el eje central de cualquier aplicación son los cuadros
de diálogo que permiten la comunicación activa entre una interfaz y el usuario, puesto que a través de cajas de texto
emergentes se pueden mostrar mensajes importantes del sistema sobre los que el usuario puede realizar pequeñas
acciones como respuesta al mensaje.
En cuanto a las pautas de diseño relativas a estos elementos, se ha de poner especial énfasis en la terminología
utilizada en los mensajes, pues estos han de ser activos y positivos, y se deben adaptar a las posibles variantes
culturales en las que se despliega la aplicación. Se aconseja que los mensajes describan claramente el mensaje,
evitando dar por sentada la información.
TÉCNICO EN DESARROLLO DE APLICACIONES MULTIPLATAFORMA
/7 MEDAC · Instituto Oficial de Formación Profesional
El diseño de todos estos elementos debe facilitar y mejorar la usabilidad de la aplicación. En muchos casos, una mala
elección de este tipo de componentes convierte una gran aplicación en un fracaso.
a. Iconos
Los iconos permiten asociar acciones a un determinado objeto que suele utilizarse como acceso directo a la acción
que representa, agilizando así la interacción con la propia aplicación.
Ahora bien, su diseño debe ser representativo de la acción que enlaza, pero, además, este diseño debe ser todo lo
sencillo posible, puesto que al mostrarlo sobre una pantalla de forma reducida, puede no verse de manera óptima.
b. Colores
La elección de una buena paleta de colores contribuye de forma decisiva en la experiencia de uso de cualquier
aplicación. Los colores se han de escoger de forma adecuada para la comunicación del mensaje que se desea
transmitir, por ejemplo, si se va a diseñar una aplicación que quiere transmitir un mensaje de calma, no será
demasiado aconsejable escoger una paleta de colores extravagantes que pueden transmitir el mensaje contrario.
Además, los colores pueden contribuir a destacar diferentes elementos de la aplicación, poniendo el foco en los más
importantes. De esta manera, se aumentará la eficiencia y velocidad de uso de la herramienta.
No se debe abusar del número de colores ni de un uso desmesurado del color, puesto que esto puede molestar al
usuario, creando incluso confusión a la hora de utilizar la aplicación.
La tipografía consiste en el tipo o tipos de letras que se utilizarán en el diseño de una interfaz. El uso de fuentes
familiares mejora en gran medida la calidad de la lectura.
La selección de las fuentes debe basarse en criterios de legibilidad y que se ajusten de forma adecuada a la resolución
de la pantalla. En cuanto a los criterios de diseño, se destacan:
• Tamaño de la fuente. Este debe ser adecuado para la lectura y proporcional a la resolución de la pantalla.
• Estilo. No es conveniente abusar de la negrita o el subrayado, ni estilos demasiados sobrecargados que puedan
dificultar la lectura del sitio.
Finalmente, la distribución de los elementos en las ventanas de la aplicación o en los cuadros de diálogos, entre
otros, también requiere de especial atención, puesto que con ella podemos provocar confusión en los usuarios o, por
el contrario, hacer más intuitiva su experiencia de uso. Algunas de las pautas recomendadas son:
• Disponer los elementos de manera que se facilite el seguimiento y lectura de los mismos. Por ejemplo, si se
va a seguir una secuencia de pasos, resultará más intuitivo hacerlo de izquierda a derecha y de arriba a abajo.
Este tipo de elementos permiten escoger un valor o conjunto de estos y enviarlo a la aplicación para realizar las
acciones oportunas. Por lo tanto, en cuanto a su diseño, deben cumplir las siguientes pautas:
• Las acciones codificadas en cada opción deben quedar suficientemente comprensibles para el usuario.
• Las opciones deben ser fácilmente distinguibles unas de otras y, por tanto, relativamente rápidas de escoger
y seleccionar.
El conjunto de esas pautas implica que el usuario no necesite investigar sobre la función de cada una de las opciones,
lo que ralentizaría el uso de la aplicación y disminuiría la satisfacción del usuario con respecto a la misma.
c. Menús desplegables
Este tipo de elementos también permiten escoger un valor o conjunto de estos y enviarlo a la aplicación para realizar
las acciones oportunas. Por lo tanto, en cuanto a su diseño, deben cumplir también ciertas pautas. Una de las más
importantes es que el número de elementos recogidos en este tipo de menús esté en torno a diez, de lo contrario,
el usuario se perderá entre las opciones.
a. Tablas
Las tablas suelen mostrar la información de una forma estructurada enfatizando los datos que en ella se recogen,
ahora bien, no se debe abusar del uso de este tipo de elementos, puesto que se correrá el riesgo de trivializarlas. En
cuanto a las pautas de diseño, debemos priorizar:
• Los datos deben quedan recogidos bajo unas etiquetas claras y concisas que no requieran de
explicaciones adicionales.
• Debe aparecer siempre el título de la tabla y su longitud no debe exceder las dos líneas de texto.
• Es aconsejable utilizar encabezados de fila o columna, según proceda, que resuman el contenido de la fila
o columna.
b. Gráficos
El uso de gráficos también debe hacerse de forma balanceada con respeto a la aplicación. Algunas de las pautas de
diseño para la selección de este tipo de elemento son:
Para realizar el diseño de estas secuencias, se necesitará desarrollar varios prototipos sobre el funcionamiento que se
pretende conseguir, tratando de encontrar el equilibro perfecto entre el número de pasos óptimos para completar la
acción, haciendo que estos sean lo suficientemente intuitivos para todo usuario desde su primera toma de contacto
con la aplicación.
TÉCNICO EN DESARROLLO DE APLICACIONES MULTIPLATAFORMA
/ 11 MEDAC · Instituto Oficial de Formación Profesional
Las pautas de diseño que se aconsejan seguir para realizar el diseño de las secuencias de control son:
• Diseñar y establecer de forma clara el objetivo principal asociado a cada uno de los elementos de la interfaz.
• Mostrar y documentar, para el usuario, la secuencia establecida para que pueda implementarla sin problemas.
• En la medida de lo posible, utilizar la regla de los tres clic, lo que implica que para llegar a cualquier objetivo,
sean necesarios, como máximo, este número de selección de opciones. Si es muy superior, puede suponer una
pérdida de usabilidad para la aplicación.
Todo esto supone una secuencia de acciones que tiene como objetivo final la
creación de un nuevo documento, y que se divide en varias acciones, desde
la más general hasta la más particular. Fig. 11. Diagrama de pautas de diseño.
• Integridad de la información.
• Datos
• Procesos
a. Imágenes
El uso de imágenes también debe hacerse de forma balanceada con respeto a la aplicación.
Es importante que presenten buena calidad, puesto que aportará a la aplicación un mayor grado de detalle, si se
escogen fotografías u otro tipo de diseños de mala calidad, puede disminuir el grado de satisfacción del usuario sobre
la aplicación.
b. Animaciones
Las animaciones son pequeños vídeos compuestos por una breve secuencia de imágenes con movimiento que
se muestran al usuario. Es muy importante no abusar en su uso con este tipo de elementos, puesto que pueden
sobrecargar la aplicación sin aportar ningún valor, pudiendo incluso llegar a restarlo.
TÉCNICO EN DESARROLLO DE APLICACIONES MULTIPLATAFORMA
/ 13 MEDAC · Instituto Oficial de Formación Profesional
c. Vídeos
Los vídeos son utilizados, sobre todo, para mostrar de forma visual todo tipo de acciones, procesos o productos,
entre otros.
Nudo: En este ejercicio, se diseñará una interfaz usable para reservar mesa en un restaurante italiano. La ventana
constará de:
• Texto con la dirección, correo electrónico y teléfono del establecimiento siempre visible.
• Tendrá que ser responsiva para que se adapte a móvil, teléfono y tablet.
Diseña la distribución que debería tener la interfaz para cumplir los requisitos propuestos.
Desenlace: La nueva interfaz propuesta será un modelo basado en la usabilidad como propósito principal, y para ello,
se ha decidido tomar decisiones de diseño relacionadas con:
• Utilizar un icono de tres rayas paralelas para establecer el menú de navegación, en lugar de utilizar palabras,
para que sea más visual.
• Usar una tipografía sencilla de tipo “Lora”, en lugar de otra más recargada como “DayDream”, para facilitar
la lectura.
TEMA 7. USABILIDAD II: PAUTAS DE DISEÑO
Desarrollo de interfaces / 14
• La gama de colores corresponde a los de la bandera italiana y no se han utilizado colores estridentes o
en exceso.
• La imagen seleccionada tiene buena calidad para que pueda ser una interfaz responsiva en todos los
dispositivos y tiene un significado más allá de lo puramente decorativo.
Fig. 14. Diseño de una interfaz para reservar mesa en un restaurante italiano.
Nudo: En este caso práctico, se plantea analizar la usabilidad de la interfaz Microsoft Bob que se lanzó para Windows
95 con el propósito de ser un programa de oficina con editor de texto, tutoriales, calendario… y que resultó siendo
un fracaso.
Este análisis nos permitirá entender por qué es necesario que la utilidad de una herramienta prevalezca frente a
la estética.
Desenlace: Esta interfaz consta de varios elementos que hacen de ella una aplicación poco usable:
• El ruido de fondo de los ladridos del perro, así como todos los sonidos que se reproducen al hacer clic sobre
cualquier elemento restan la atención del usuario respecto a la tarea que está realizando.
• El apartado de ayuda es escaso y no resuelve gran parte de la problemática que pueda surgir al usuario.
• El consumo de recursos es muy alto para el tipo de ordenadores que estaban en el mercado, por lo que solían
ir muy lentos.
TÉCNICO EN DESARROLLO DE APLICACIONES MULTIPLATAFORMA
/ 15 MEDAC · Instituto Oficial de Formación Profesional
• Realiza preguntas constantemente sobre si el usuario está de acuerdo con la decisión tomada.
• Se prioriza la estética frente a la funcionalidad dando lugar a una interfaz poco usable.
La usabilidad nos permite diseñar cualquier tipo de aplicación en base a unas pautas que permiten establecer ciertos
controles en cuanto a la facilidad o dificultad de uso de un sitio web. En concreto, en el desarrollo de interfaces, la
consecución de la usabilidad queda definida por un conjunto de pautas relativas a diferentes aspectos del diseño, y
es un elemento clave. De nada servirá que la aplicación realice unas acciones muy complejas si los usuarios no son
capaces de utilizarlas.
La facilidad de interacción con una interfaz es clave para cualquier empresa o entidad financiera, como es el caso
propuesto. Si el acceso a la información y la realización de operaciones es lo más fácil posible, se evitarán errores y el
usuario estará dispuesto a volver a utilizar esta interfaz.
Para que al usuario le sea lo más familiar posible la interfaz, es importante lograr mantener el punto focal, la
consistencia entre ventanas, una relación entre elementos y una buena legibilidad.
En el caso de que todas las acciones solo se puedan realizar desde la pantalla táctil, estamos limitando la usabilidad
del cajero, porque algunas acciones se llevarán a cabo en un menor tiempo si se dispone de botones con las tareas
más frecuentes.
El menú es recomendable mantenerlo en la parte de arriba de la interfaz, en el lado izquierdo, para mantener una
coherencia respecto a la navegación y no desorientar al usuario. Además, si se muestran las doce opciones, sería un
menú demasiado extenso, por lo que sería recomendable diseñar dos menús con un máximo de seis opciones cada
uno: operaciones de consulta (movimientos, cargos, domiciliaciones…) y tipos de transacciones (transferencias,
cargar móvil, cargar tarjeta, pagar recibos…).
Es conveniente que las ventanas se superpongan unas a otras y se pueda volver fácilmente a la acción anterior con un
botón representado con una fecha hacia la izquierda. Si se implementara el modelo sugerido por la entidad bancaria,
se estaría reduciendo la legibilidad de la operación y reduciendo la usabilidad de la interfaz.
TEMA 7. USABILIDAD II: PAUTAS DE DISEÑO
Desarrollo de interfaces / 16
Por último, los errores deben transmitirse en un lenguaje positivo, explicando qué ha pasado y por qué. Además, se
debe mostrar una alternativa o posible solución al cliente de manera que no se sienta culpable de haber realizado
mal alguna tarea y evitando la frustración que eso pueda conllevar.
/ 15. Bibliografía
Fernández, A., García-Miguel, B. y García-Miguel, D. (2020). Desarrollo de Interfaces (1.a ed.). Madrid, España: Síntesis.
DESARROLLO DE INTERFACES
TÉCNICO EN DESARROLLO DE APLICACIONES
MULTIPLATAFORMA
Usabilidad I: concepto
y normativa
06
/ 1. Introducción y contextualización práctica 3
/ 2. Concepto de usabilidad 4
2.1. Experiencia del usuario 4
/ 3. Normativa 5
3.1. ISO 5
3.2. Normas y estándares de usabilidad. ISO 9241 6
/ 13. Bibliografía 15
© MEDAC 978-84-18983-19-1
Reservados todos los derechos. Queda rigurosamente prohibida, sin la autorización escrita de los titulares del copyright,
bajo las sanciones establecidas en las leyes, la reproducción, transmisión y distribución total o parcial de esta obra por
cualquier medio o procedimiento, incluidos la reprografía y el tratamiento informático.
Crear menús que se ajusten a los estándares.
/ 2. Concepto de usabilidad
El concepto de usabilidad, del inglés Usability, hace referencia a la facilidad o dificultad de uso de un sitio web, de
aplicaciones y herramientas o de cualquier otro entorno software que implique la interacción con un usuario.
Como enunciaba Jakob Nielsen: «Si no lo haces fácil, los usuarios se marcharán de tu web» o abandonarán la
aplicación en busca de otra que resulte más sencilla de utilizar.
Características
La usabilidad se define por un conjunto de parámetros que permiten establecer las características deseables sobre
una mejor usabilidad. Se trata de diseñar sistemas eficientes, efectivos, seguros, útiles, fáciles de aprender y fáciles
de recordar:
• Eficiencia de uso: Esta característica hace referencia al tiempo que se requiere para completar una acción
determinada. No resulta muy conveniente que un usuario tarde mucho tiempo en encontrar botones, menús,
accesos… O en comprender un funcionamiento excesivamente complejo de la aplicación.
• Facilitar buenos mensajes de error, crear diseños que eviten los errores más comunes: Haciendo posible
deshacer acciones realizadas y garantizar la integridad del sistema en caso de un fallo de software o hardware.
La interacción Persona - Ordenador (IPO) o, en inglés, Human-Computer Interaction (HIC) es «la disciplina que
estudia el intercambio de información entre las personas y los ordenadores», cuyo objetivo es que el intercambio y
acceso a la información sea lo más eficiente posible.
/ 3. Normativa
3.1. ISO
La Organización Internacional de la Normalización (International Organization for Standardization, ISO), se encarga
de la creación de normas y estándares cuyo objetivo principal es conseguir asegurar que servicios y productos
presenten ciertos niveles de calidad, eficiencia y seguridad.
La ISO define la usabilidad como la capacidad de un producto para ser entendido, aprendido, usado y resultar
atractivo para el usuario cuando se usa bajo determinadas condiciones. Es decir, la usabilidad no antepone la
facilidad de uso al diseño, ni el diseño a la facilidad para comprender su funcionamiento por parte del usuario, será
una combinación de diferentes aspectos clave, que podrán variar en función del tipo de aplicación y del grupo de
usuarios al que va dirigida.
A continuación, vamos a hacer un recorrido sobre las principales normas y estándares enunciados por la ISO en
relación a la consecución de buenos parámetros de usabilidad, con respecto al diseño y desarrollo de interfaces que
favorecen la interacción entre el usuario y la aplicación.
TEMA 6. USABILIDAD I: CONCEPTO Y NORMATIVA
Desarrollo de interfaces /6
• ISO/IEC 9126-1: Estándar internacional relativo a la ingeniería del software en cuanto a la calidad del producto.
Se distinguen subestándares: modelo de calidad y métricas (de calidad de uso, externas e internas).
• ISO/IEC 9241: Se trata de una guía de usabilidad donde se recogen los beneficios relativos a las medidas de
usabilidad evaluadas. En el siguiente apartado, la analizaremos más en detalle.
Las normas relativas al diseño de la interfaz y la interacción generado entre el usuario y la aplicación son:
• ISO/IEC 14915: Estándar internacional relativo a la ergonomía del software elaborado con respecto a la
interfaz multimedia.
• IEC TR 61997: Se recogen un conjunto de guías de interfaz multimedia para usuarios en equipos de uso
general.
ISO Descripción
• ISO 13407: Esta norma recoge los principios relativos al diseño de aplicaciones e interfaces en sistemas
interactivos, poniendo el foco en el usuario.
• ISO/TR 16982: Recoge la lista de métodos ergonómicos presentes en las distintas fases del ciclo de diseño
y desarrollo.
Una de las herramientas más convenientes son los test de usabilidad, los cuales deben evaluar tanto la facilidad
de uso por parte de un usuario (no experto) como si la funcionalidad desarrollada cumple con la finalidad de la
aplicación. Si el desarrollo resulta intuitivo para una persona, pero no cumple sus expectativas en cuanto al objeto
de desarrollo, tampoco estará cumpliendo los criterios de usabilidad.
Los test de usabilidad no son herramientas de opinión subjetiva, ya que se deben desarrollar de forma exhaustiva
para que, de manera objetiva, se evalúen todos los parámetros deseados.
Por lo tanto, en el diseño de este tipo de test, se deben contemplar ciertas métricas comunes que devuelven de
manera fiable la usabilidad presenten en el sistema evaluado.
TEMA 6. USABILIDAD I: CONCEPTO Y NORMATIVA
Desarrollo de interfaces /8
4.1. Satisfacción
El nivel de satisfacción de un usuario es clave para la evaluación de la aplicación. La obtención de un nivel bajo de
satisfacción, unido a un buen diseño de cuestionario, permitirá añadir las modificaciones oportunas al sistema.
Métricas
Calificación de satisfacción del
usuario sobre la aplicación
Frecuencia de reutilización de la aplicación
Métricas
Cantidad de tareas relevantes completadas
en cada uno de los intentos
Número de acceso a la documentación,
al soporte y a la ayuda
Cantidad de funciones aprendidas
Número de usuarios capaces de aprender
las características del producto
Cantidad y tipos de errores tolerados por los usuarios
5.2. Eficiencia
El grado de eficiencia se define en relación al tiempo que es necesario para completar una tarea con el software
desarrollado.
TÉCNICO EN DESARROLLO DE APLICACIONES MULTIPLATAFORMA
/9 MEDAC · Instituto Oficial de Formación Profesional
Las métricas definidas para este atributo están basadas, sobre todo, en el primero de los intentos, puesto que, en ese
momento, aún no se tiene demasiado conocimiento sobre la aplicación. Si en este intento los valores son buenos, en
los restantes ofrecerán grandes resultados, que se valoran en las métricas de efectividad.
Métricas
Tiempo productivo
Errores persistentes
Tiempo necesario para aprender de nuevo
la funcionalidad del producto pasado
un tiempo desde su anterior uso
Tabla 4. Métricas de eficiencia.
El flujo no solo se ejecuta una vez, es decir, cuando se completa el primer diseño y se realizan las pruebas y test
necesarios. En este sentido, no será suficiente con una sola revisión para obtener la versión completa, sino que
el proceso de retroalimentación puede extenderse todo lo necesario. Estos pasos necesarios para un desarrollo
completo son:
• Una vez se han definido cada una de las tareas propias de la funcionalidad esperada de la herramienta, así
como el tipo de usuario alo que va dirigida, se diseñan los parámetros de usabilidad necesarios.
• Tras este primer desarrollo, se obtienen los llamados prototipos, sobre los cuales se comienza a aplicar los test
de usabilidad, creados en base a los parámetros definidos en el punto 3.
• En base a estos resultados, se irá rediseñando y readaptando las diferentes versiones del software, hasta
obtener un resultado final que puede llevarse a producción, donde será distribuida de la forma pertinente.
Los expertos realizan la conocida evaluación heurística o método de inspección, mediante el cual analizan toda la
aplicación e identifican los problemas existentes o algunos que pudieran ocurrir antes de llevar a producción una
aplicación. El coste de corrección después de implantar cualquier software o herramienta es mucho más elevado que
si se realiza antes. La evaluación heurística se divide en dos partes:
• Evaluación detalle. Se analiza de forma exhaustiva cada pantalla, acción, menú, diálogo, comentario …
https://bit.ly/31ynVw8
TÉCNICO EN DESARROLLO DE APLICACIONES MULTIPLATAFORMA
/ 11 MEDAC · Instituto Oficial de Formación Profesional
Por ejemplo, a un experto una determinada funcionalidad le puede resultar intuitiva y fácil de aprender, pero no
dejan de ser expertos en desarrollo, y, desde el punto de vista de un usuario, esta forma de acometer la acción puede
no ser percibida como intuitiva.
Los métodos de test con usuarios se basan en el uso de cuestionarios tipo. Según el Diseño Centrado en el Usuario
(DCU), los test de usuario se basan en pruebas que observan la forma de interacción de los usuarios con el producto
objeto del test.
Es aconsejable que el número de usuarios que participan en este test sea de, al menos, 15, para poder garantizar
una tasa de detección cercana al 100%. La elección de estos debe basarse en los perfiles a los que está dirigida la
aplicación. No tendrá sentido probar una aplicación para la gestión logística de un almacén con un grupo de usuarios
que no tienen ninguna vinculación a este tipo de áreas.
Las pruebas se realizan de forma individual y se deben tener en cuenta todas las observaciones que se tomen, desde
la primera toma de contacto, hasta la realización de la prueba completa. Algunos criterios de diseño son:
• Pruebas factibles, que pueden realizarse, no se trata de un examen que los usuarios no deben superar.
• Uso natural: Estas pruebas se realizan sobre la versión final y con una
interacción también similar a la real, sin ningún moderador que paute
la acciones.
Fig. 9. Pautas para el diseño de pruebas de
• Híbridos: Combinación entre cualquiera de las descritas. usabilidad.
Con respecto al diseño de pruebas con usuarios, ya vimos en el apartado 6 el flujo completo para el desarrollo de un
producto, interrelacionando los test de usabilidad como elemento clave en la implementación de cualquier producto
software. El diseño de las pruebas de usabilidad también requiere de un conjunto de pautas:
• Se diseña el formato y tipo de datos que se tomarán y analizarán en el estudio (cuantitativos, cualitativos,
mixtos, presencial o en remoto…).
• Se determina el número de personas que participan en el estudio. Estos se escogen adecuando sus perfiles al
tipo de producto que se va a evaluar. En el caso de los expertos, será deseable que tengan cierta experiencia
en evaluaciones de usabilidad.
• Se implementa el plan de test: La guía de las pruebas que se van a realizar, el tiempo que se va a destinar a cada
una de ellas, etc. Todos los aspectos relativos a estas pruebas tienen que estar cuidadosamente escogidos
para abarcar el mayor número posible de casuísticas y prever cualquier tipo de contratiempo que pudiera
entorpecer la satisfacción del usuario con respecto a la aplicación.
Nudo: En este ejercicio, se diseñará una interfaz consistente para un call center de una empresa de reparto. La
ventana principal tendrá acceso directo al resto de secciones de la interfaz. Constará de un logo y cuatro apartados:
• Clientes de la empresa
• Proveedores de la empresa
• Diseña la distribución que debería tener la interfaz para cumplir los requisitos principales de una interfaz
consistente.
• Es intuitiva en cuanto a la situación de las secciones por codificación de colores cromática, lo que permite que
el usuario siempre sepa en qué parte de la interfaz se encuentra.
• La distribución de los elementos es constante, por lo que, para tareas similares, el usuario ejecutará la misma
secuencia de acciones.
• Los conceptos utilizados en el menú son términos sencillos e intuitivos, que se mantienen a lo largo del uso
de toda la interfaz.
• Se respeta una situación constante del menú y elementos, como la barra de navegación.
Nudo: En este caso práctico, se plantea mejorar la usabilidad de un formulario para dar de alta a un cliente:
• En el campo Provincia, mostrar un desplegable con las opciones posibles según la Región seleccionada.
El concepto de usabilidad se resume en la facilidad o dificultad de usar una herramienta, aplicación o cualquier otro
entorno software que implique la interacción con un usuario. Algunas de las características que debe cumplir todo
sistema para garantizar esta usabilidad son: eficiencia de uso, facilidad de aprendizaje, retención del usuario en el
tiempo, satisfacción o tasa de error.
La Organización Internacional de la Normalización se encarga crear normas y estándares cuyo objetivo principal
es asegurar que servicios y productos presenten ciertos niveles de calidad, eficiencia y seguridad. Algunos de los
estándares más importantes son los relativos al uso del producto, servicio o herramienta desarrollados, como ISO/
IEC 9126-1 o ISO/IEC 9241.
TÉCNICO EN DESARROLLO DE APLICACIONES MULTIPLATAFORMA
/ 15 MEDAC · Instituto Oficial de Formación Profesional
Finalmente, otro de los elementos clave vistos en este tema son las medidas de usabilidad, ya que se trata de una
herramienta esencial para la evaluación de la usabilidad en un sistema, sobre todo en lo que respecta al desarrollo de
una interfaz adecuada para la aplicación y los usuarios a los que va dirigida.
La Organización Internacional de la Normalización, ISO, se encarga de crear normas y estándares cuyo objetivo
principal es conseguir que el software presente ciertos niveles de calidad, eficiencia y seguridad.
A la hora de diseñar una interfaz usable, debe evitarse el uso excesivo de mensajes de error, dado que al usuario
puede parecerle que se le está regañando o, incluso, que está cometiendo un error insalvable mucho más grave de
lo que es. Es más beneficioso diseñar una interfaz usable que sea intuitiva y permita al usuario realizar sus tareas de
manera autónoma.
Además de medir la satisfacción de los usuarios, es importante tener en cuenta la efectividad y la eficiencia. Es decir,
el grado de éxito de la aplicación (si cumple o no la funcionalidad para la que ha sido desarrollada) y el tiempo que
es necesario para completar una tarea.
Por último, además de las evaluaciones heurísticas realizadas por expertos, existen las pruebas de usuario que
analizan y evalúan la interfaz, detectando errores que los expertos no han sido capaces de detectar.
/ 13. Bibliografía
Fernández, A., García-Miguel, B. y García-Miguel, D. (2020). Desarrollo de Interfaces. (1.a ed.). Madrid: Síntesis.
DESARROLLO DE INTERFACES
TÉCNICO EN DESARROLLO DE APLICACIONES
MULTIPLATAFORMA
Explotación de
componentes
visuales
05
/ 1. Introducción y contextualización práctica 4
/ 2. Características fundamentales 5
2.1. Introspección y reflexión 5
2.2. Persistencia del componente 5
/ 3. Pruebas unitarias 6
3.1. JUnit en Eclipse 7
3.2. Clase prueba 7
3.3. Métodos de prueba 7
3.4. Comprobación de errores 8
/ 4. Eventos: clases 8
/ 5. Eventos: componentes 9
/ 8. Eventos: métodos 12
© MEDAC 978-84-18983-19-1
Reservados todos los derechos. Queda rigurosamente prohibida, sin la autorización escrita de los titulares del copyright,
bajo las sanciones establecidas en las leyes, la reproducción, transmisión y distribución total o parcial de esta obra por
cualquier medio o procedimiento, incluidos la reprografía y el tratamiento informático.
/ 10. Caso práctico 1: “Configuración del ratón” 15
/ 13. Bibliografía 18
Crear componentes visuales.
Determinar los eventos a los que se debe responder desde una determinada
interfaz.
Por esta razón, todos los componentes descritos hasta ahora son necesarios. Sobre todo, la capacidad de
interactividad que estos pueden presentar, gracias a la aparición de los eventos.
Los eventos permiten que el usuario pueda establecer una «comunicación» con cualquier aplicación para que esta
se ajuste a las decisiones del usuario en lo que respecta a su recorrido
por un sitio web, aplicación o herramienta.
/ 2. Características fundamentales
Los componentes visuales son elementos clave para el desarrollo de interfaces. Su forma de utilización y estructura
característica son esenciales para la implementación de aplicaciones a través de su uso. De una forma ágil y sencilla,
liberan al desarrollador de los costes que supondría la creación de todos y cada uno de elementos visuales implicados
en una sola interfaz de aplicación.
Mediante la reflexión, es posible recuperar y modificar de forma dinámica diferentes datos relativos a la estructura
de un objeto: los métodos y propiedades de la clase, los constructores, las interfaces o el nombre original de la clase,
entre otros.
La introspección es una de las características más importantes en el desarrollo de interfaces, sobre todo cuando se
utilizan entornos visuales de diseño, puesto que permite a estas herramientas tomar de forma dinámica todos los
métodos, propiedades o eventos asociados a un componente, que se colocan sobre el lienzo de diseño simplemente
arrastrando y soltando el elemento.
Por lo tanto, la introspección de los componentes visuales requiere de la reflexión para funcionar correctamente.
Ambas propiedades son dos características clave en el diseño de JavaBean que vimos en el tema anterior.
/ 3. Pruebas unitarias
El desarrollo de pruebas de software es importante en la implementación
de nuevos componentes, puesto que, de esta forma, se reducen
considerablemente los tiempos de desarrollo. Si se ha probado y verificado
el comportamiento de un componente, esta acción ya no será necesaria,
aunque sí habría que verificar cómo sería su uso en el marco de otro proyecto Fig. 3. Logo JUnit.
que lo utilice.
Las pruebas se diseñan en base al comportamiento esperado de un componente, extendiéndose a todas las
casuísticas posibles.
Las pruebas unitarias son pruebas que se realizan sobre una funcionalidad concreta, es decir, sobre una parte del
programa, con el objetivo de comprobar si funciona de forma correcta. Para el desarrollo de pruebas unitarias,
encontramos el framework de Java, JUnit. Para intalarlo, basta con incorporar algunas librerías JAR al entorno
de desarrollo.
• Rápida ejecución
import junit.framework.TestCase;
public class TestCalculadora extends TestCase{…}
/ 4. Eventos: clases
La programación basada en eventos es la clave de la iteración entre el usuario y una interfaz. Sin la existencia de
esta, solo tendríamos textos, imágenes o cualquier otro elemento. Este tipo de programación podría dividirse en
dos grandes bloques: la detección de los eventos y las acciones asociadas a su tratamiento. Podemos decir que la
programación basadas en componentes y la basada en eventos se encuentran estrechamente ligadas, puesto que la
finalidad de gran parte de los componentes descritos en el capítulo anterior es la recogida de información directa a
través de la comunicación e interacción con el usuario. En función del origen del evento, es decir, de dónde se haya
producido, diferenciamos entre eventos internos y externos:
• Eventos internos. Este tipo de eventos está producido por el propio sistema.
• Eventos externos. Los eventos externos son aquellos producidos por el usuario, habitualmente, a través del
teclado o del puntero del ratón.
Los objetos que definen todos los eventos que se verán en este tema se basan en las siguientes clases, o en varias de
estas, puesto que existen relación de herencia entre ellas.
Clase Descripción
ContainerEvent Evento producido al añadir o eliminar componente sobre un objeto de tipo Container
Este tipo de eventos se produce cuando una ventana ha sufrido algún tipo
WindowsEvent
de variación, desde su apertura o cierre, hasta el cambio de tamaño
/ 5. Eventos: componentes
Los componentes utilizados para el desarrollo de interfaces presentan, habitualmente, un tipo de evento asociado.
No es lo mismo el tipo de detección asociado a un botón o a la pulsación de una tecla, que la forma de detección de
la apertura o cierre de una ventana.
En la siguiente tabla, se muestran los componentes más habituales y el tipo de evento asociado a estos.
Nombre
Nombre evento Descripción del evento
componente
Detecta la pulsación de la tecla Enter
JTextField ActionEvent
tras completar un campo de texto
JComboBox ActionEvent ItemEvent Se detecta la selección de uno de los valores del menú
A continuación, se verán todos los tipos de listeners asociados al tipo de evento al que corresponden. Como se puede
observar, un mismo tipo de escuchador puede estar presente en varios eventos y componentes diferentes, aunque,
normalmente, presentan un comportamiento muy similar.
6.1. KeyListener
Este evento se detecta al pulsar cualquier tecla. Bajo este escuchador, se contemplan varios tipos de pulsaciones,
cada uno de los cuales presentará un método de control propio. Se implementan los eventos ActionEvent.
Se produce al pulsar
keyTyped
y soltar la tecla
6.2. ActionListener
Este evento detecta la pulsación sobre un componente. Está presente en varios tipos de elementos y es uno de los
escuchadores más comunes.
La detección tiene lugar ante dos tipos de acciones: la pulsación sobre el componente con la tecla Enter, siempre
que el foco esté sobre el elemento; o la pulsación con el puntero del ratón sobre el componente. Estos componentes
implementan los eventos de tipo ActionEvent.
Componente Descripción
JTextField Al pulsar la tecla Enter con el foco situado sobre la caja de texto
JList Al hacer doble clic sobre uno de los elementos del componente lista
Este evento se produce al hacer clic sobre algún componente. Es posible diferenciar entre distintos tipos de
pulsaciones y asociar a cada una de ellas una acción diferente.
Modo de
Definición
pulsación
Se produce al pulsar y soltar con el puntero
mouseClicked
del ratón sobre el componente
• FocusListener
Este evento se produce cuando un elemento está seleccionado o deja de estarlo, es decir, al tener el foco sobre el
componente o dejar de tenerlo.
• MouseMotionListener
Mientras que el caso anterior detecta la acciones con el puntero en cuanto a pulsar o soltar las teclas del ratón, este
nuevo evento se produce ante la detección del movimiento del ratón.
/ 8. Eventos: métodos
Cada uno de los eventos detallados en los apartados anteriores utilizará un método para el tratamiento del mismo,
es decir, tras enlazar al escuchador con la ocurrencia de un evento, será necesario ejecutar un método u otro en
función del tipo de evento asociado.
En la siguiente tabla, se muestra la relación entre el Listener y el método propio de cada evento:
Listener Métodos
En primer lugar, se crea una nueva instancia del evento y este se vincula con el componente sobre el que va a actuar.
TÉCNICO EN DESARROLLO DE APLICACIONES MULTIPLATAFORMA
/ 13 MEDAC · Instituto Oficial de Formación Profesional
Para que se produzca esta detección, será necesario enlazar el evento con los escuchadores, elementos que se
encuentren a la espera de que se produzca algún evento (Listeners). Estos elementos son interfaces que implementan
un conjunto de métodos.
Sintaxis 1:
nombreComponente.addtipoEventoListener(new tipoEventoListener()
{…}
Sintaxis 2:
El valor de tipoEventoListener se obtiene de las tablas del apartado 4, escogiéndolo en función del evento que se
vaya a tratar.
Cuando se activa y vincula un escuchador o listener a un componente y, por tanto, a la ocurrencia de un evento, los
componentes no realizan un filtrado previo de los eventos para determinar si los manejan o no, sino que los reciben
todos. A través de la asociación de la acción al evento se determinará si se maneja el evento o no.
A continuación, se implementa el método bajo el cual se desarrolla la acción, que se ejecutará tras la ocurrencia del
evento, ya sea la pulsación sobre un botón, selección con el ratón, marcado en una lista de componentes o escritura
a través del teclado, entre otros.
En el lenguaje de programación Java, cada evento está asociado a un objeto de la clase EventObject y, por lo tanto, a
un método concreto. La estructura general para la definición de este método sigue el siguiente patrón:
Los métodos relativos a cada evento, prestando especial atención a las diferentes casuísticas que presentan algunos
eventos, son los estudiados en el apartado 4.
En primer lugar, se crea una nueva clase JFrame y se inserta un panel JPanel para ubicar encima el resto de elementos.
TEMA 5. EXPLOTACIÓN DE COMPONENTES VISUALES
Desarrollo de interfaces / 14
Se coloca una etiqueta y un botón, en la distribución que se desee, desde la vista de diseño. En la parte del código,
de forma automática, se habrá generado:
Y ahora, ¿cómo se crea el código relativo a la producción y detección de eventos para cada componente?
Desde la vista de diseño, hacemos doble clic sobre el botón, lo que nos lleva al código, donde ahora aparecen algunas
líneas nuevas.
btnNewButton.addActionListener(new ActionListener({
De forma automática, se implementa tanto el escuchador vinculado al botón (ActionListener) como el método
dentro del cual se desarrollan las acciones desencadenadas por el evento (actionPerformed), que recibe por
parámetro un ObjectEvent de tipo ActionEvent.
Finalmente, solo quedará colocar el código que envía a la etiqueta de texto creada en el inicio el mensaje «Hola
Mundo» y la muestra por pantalla.
Nudo: Para implementar los eventos escuchadores asociados al JSpinner y al JComboBox. será necesario utilizar:
• En el caso del JSpinner. para capturar la velocidad establecida por el usuario. se utilizará el evento de cambio
de estado:
spinner1.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent e) {
combo1.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
TEMA 5. EXPLOTACIÓN DE COMPONENTES VISUALES
Desarrollo de interfaces / 16
• Cuando se detecte el cambio de estado del componente JSpinner, se llamará al método de ‘pintar’ para
dibujar la barra de progreso con el color y longitud apropiados. Si la velocidad seleccionada es 0, la longitud
de la barra será de 20px y el color será el rojo. Si es 25, será de color naranja y longitud 40px. Por último, en
el caso de ser velocidad 50, la barra será de longitud 60px y de color verde.
if(spinner1.getValue().equals(0)) {
g.setColor(Color.red);
g.fillRect(50,120, 20, 20);
• Con la detección del evento del botón seleccionado en el JComboBox, se llamará también al método ‘pintar’,
que dibujará el botón del ratón seleccionado. En el caso de que sea el botón izquierdo, dibujará desde el píxel
215 del eje ‘x’, que es donde empieza el rectángulo del botón. Si es el botón derecho, se dibujará ese mismo
círculo desde la coordenada ‘x’ de 275 px.
if(combo1.getSelectedItem().toString().equals(“Izquierdo”)) {
g.fillRect(215,120, 60, 60);
g.setColor(Color.gray);
g.fillOval(215,120,60,60);
}
else {
g.fillRect(275,120, 60, 60);
g.setColor(Color.gray);
g.fillOval(275,120,60,60);
}
Desenlace:
Por último, repetimos el proceso con los seis botones restantes, asignándole a cada uno de ellos la nota inglesa
correspondiente (do=C, re=D, mi=E, fa=F, sol=G, la=A, si=B).
El proceso de creación y asociación de eventos se basa en los llamados listeners (escuchadores), que se enlazan a los
componentes «escuchando» si se producen cambios asociados a la integración entre el usuario y la interfaz, y si es
así, se ejecutan las acciones implementadas.
Como hemos visto en las tablas de este tema, debemos diferenciar entre los escuchadores, los métodos que tratan
las acciones y los eventos. Escogiendo la combinación adecuada, podremos desarrollar prácticamente cualquier tipo
de interfaz.
Por último, en este tema también hemos visto la generación y aplicación de pruebas unitarias, imprescindibles para
garantizar la implantación correcta de cualquier tipo de desarrollo.
Ahora que tenemos un diseño bastante avanzado de la base de datos para la tienda de nuestro amigo, nos plantea
una nueva cuestión en con la que podemos ayudarle.
Le gustaría saber cómo gestionar la información de la base de datos, modificando, añadiendo y eliminando elementos
sobre las tablas que la componen (Clientes, Almacén, Empleados…).
En el ámbito de la programación, los eventos están asociados a las acciones que realizan los usuarios para interactuar
con la interfaz o bien a los sucesos que se quieren controlar para dar respuesta a ellos.
Existen múltiples tipos de eventos. Además de hacer clic con el ratón, otros eventos muy utilizados son el movimiento
del ratón y escribir con el teclado.
La implementación de interfaces con Java tiene asociada una funcionalidad que permite detectar diferentes tipos
de eventos. Estos programas pueden detectar desde el tipo de evento (clic, desplazamiento del ratón, pulsación del
teclado…) hasta el componente con el que se ha interactuado (botón, menú desplegable, completar el campo de
un formulario…).
/ 13. Bibliografía
Fernández, A., García-Miguel, B. y García-Miguel, D. (2020). Desarrollo de Interfaces. (1.a ed.). Madrid: Síntesis.
DESARROLLO DE INTERFACES
TÉCNICO EN DESARROLLO DE APLICACIONES
MULTIPLATAFORMA
Creación de
componentes
04
/ 1. Introducción y contextualización práctica 3
/ 4. Propiedades y atributos 5
/ 5. JavaBean. Características 6
/ 11. Imágenes 13
/ 15. Bibliografía 16
© MEDAC 978-84-18983-19-1
Reservados todos los derechos. Queda rigurosamente prohibida, sin la autorización escrita de los titulares del copyright,
bajo las sanciones establecidas en las leyes, la reproducción, transmisión y distribución total o parcial de esta obra por
cualquier medio o procedimiento, incluidos la reprografía y el tratamiento informático.
Identificar las herramientas para el diseño y prueba de componentes.
Todo componente supone un elemento JavaBean, el cual presenta ciertas características que definen su
funcionamiento, como son la introspección y la reflexión, así como la posibilidad de customización y la generación
de una comunicación activa entre el usuario y la interfaz a través de los eventos.
La integración de cualquier componente se basa en la generación de un archivo Jar que puede ser importado en
cualquier entorno de desarrollo, permitiendo así el uso de sus componentes.
A continuación, vamos a plantear un caso a través del cual podremos Fig. 1. Componentes visuales más utilizados de
aproximarnos de forma práctica a la teoría de este tema. la librería Swing.
Cuando hablamos de reutilización del código, nos referimos a la reutilización de librerías, frameworks o kit
de herramientas.
Para el desarrollo de interfaces gráficas visto hasta ahora con Swing, se han tomado algunos de los componentes
ya implementados y se han personalizado modificando algunas de sus propiedades. Ahora bien, utilizando como
base estos elementos ya desarrollados se podrán crear otros nuevos que presenten otras características que el
componente tomado como referencia no incorpora. El desarrollo de cero de un componente requeriría de líneas y
líneas de código. En la actualidad, se toman como base los ya implementados y se les incorporan ciertas mejoras.
• Debido a la disminución del tiempo necesario para el desarrollo se reducen los costes del proyecto.
Normalmente, el coste total de un desarrollo está estrechamente ligado al tiempo necesario para su creación.
Los componentes permiten la implementación de sistemas utilizando componentes ya desarrollados, y por tanto,
probados, lo que conlleva a una notable reducción del tiempo de implementación y los costes asociados.
Para conseguir una reutilización eficiente del software es necesario que esta esté definida de la manera más
generalizada posible, puesto que a partir de los componentes más generales se podrían implementar múltiples
versiones modificadas.
Atendiendo al diseño gráfico con JSwing, cuando hablamos de un componente, nos referimos a alguno de los
elementos que se sitúan en la ventana, directamente sobre el JFrame y JDialog, o sobre un JPanel, y que le aporta
funcionalidad a la interfaz, o, de lo contrario, solo tendríamos una ventana abierta sin más.
TÉCNICO EN DESARROLLO DE APLICACIONES MULTIPLATAFORMA
/5 MEDAC · Instituto Oficial de Formación Profesional
• La implementación puede estar realizada con cualquier lenguaje de programación, pero ha de estar completa.
Todos los tipos de componentes visuales que presenta la librería JSwing se muestran a continuación, a modo de
resumen. Se podrá tomar cualquiera de ellos para desarrollar uno nuevo desde cero.
OBJECT
COMPONENT
CONTAINER
JTOGGLEBUTTON
/ 4. Propiedades y atributos
Las propiedades de un componente definen los datos públicos que forman la apariencia y comportamiento
del objeto. Las propiedades pueden modificar su valor a través de los métodos que definen el comportamiento
de un componente.
Por ejemplo, si hablamos de un componente tipo JButton, una de sus propiedades será font, la fuente del texto que
aparece dentro del elemento. Este valor será consultado o modificado a través de métodos tales como setFont (…).
Los métodos clave que permiten analizar el contenido de una propiedad o atributo son los de tipo get, mientras que
para modificar su valor se utilizan los métodos set.
TEMA 4. CREACIÓN DE COMPONENTES
Desarrollo de interfaces /6
Una propiedad de ámbito Una propiedad de tipo privada Pueden ser utilizadas sin la
público puede ser utilizada desde solo es accesible desde la necesidad de crear una instancia
cualquier parte de la aplicación. clase donde se ha creado. del objeto al que está referida.
• Las propiedades simples son aquellas que representan solo un valor. Es el caso de los atributos sencillos como
los de tipo string, int o boolean, entre otros.
• Las propiedades indexadas son aquellas que representan un conjunto de valores en forma de array. Por
ejemplo, cuando hablamos de un elemento tipo ComboBox, el listado de valores que se muestran en el menú
se recoge dentro de un array, por lo tanto, esta propiedad sería de tipo indexada.
Los atributos, aunque son similares a las propiedades, se utilizan para almacenar los datos internos y de uso privado
de una clase u objeto.
/ 5. JavaBean. Características
Para el desarrollo de interfaces a través del lenguaje de programación Java, los componentes software que permiten
su reutilización reciben el nombre de JavaBeans. Estos pueden ser representados gráficamente o, por el contrario,
no presentar ninguna interfaz visual. Prácticamente, todos los componentes y elementos de la paleta gráfica vista
en el entorno de diseño son módulos de tipo JavaBean.
JavaBean es el primer modelo para el desarrollo de componentes de Java e implementa el modelo Propiedad-Evento-
Método, es decir, podemos decir que sus características distintivas son: los métodos, las propiedades y los eventos.
• Persistence. Cualquier nuevo componente JavaBean podrá ser almacenado para ser utilizado
posteriormente en cualquier proyecto. La persistencia se logra gracias a la serialización del componente
(implements Serializable).
TÉCNICO EN DESARROLLO DE APLICACIONES MULTIPLATAFORMA
/7 MEDAC · Instituto Oficial de Formación Profesional
En primer lugar, es necesario crear un nuevo proyecto para la creación de un nuevo componente. A continuación,
para tomar como referencia un componente ya creado, utilizaremos la herencia, es decir, el nuevo extenderá del
base. Para implementar la herencia, como seguro que ya conoces de la asignatura de Programación, utilizaremos la
palabra reservada extends, seguida del nombre de la clase de la que se hereda.
Para la creación de un nuevo componente, la clase que lo implementa ha de ser de tipo JavaBean, por lo que se tienen
que cumplir dos características básicas:
Para definir el nuevo comportamiento, será necesario implementar la nueva funcionalidad, es decir, los métodos.
Es habitual utilizar alguno de los ya existentes y sobrescribir su contenido añadiendo nuevo código. Para
redefinir el comportamiento, se utiliza la palabra reservada @Override, seguido del mismo nombre del método
en la clase de referencia.
@Override
protected void nuevoMetodo ( … )
{
super.nuevoMetodo( … );
}
Recuerda que si quieres mantener la misma funcionalidad que el método del componente base, se utiliza el
constructor de la clase padre de la que se hereda (super) y, a continuación, se añade la nueva implementación.
La creación de estas propiedades se realiza de la forma habitual en la que se implementan los atributos de cualquier
objeto en Java, se añade en la parte superior de la clase.
A continuación, se incorporan los métodos set y get a la clase. Estos métodos son muy importantes, puesto que son
los que permiten modificar y recuperar el valor de los atributos.
Desde el menú de propiedades de vista de diseño ya aparecerán, si todo se ha hecho de forma correcta, todos los
atributos del nuevo componente.
TÉCNICO EN DESARROLLO DE APLICACIONES MULTIPLATAFORMA
/9 MEDAC · Instituto Oficial de Formación Profesional
Por ejemplo, en el siguiente caso, se ha creado un nuevo componente basado en JTextField que incorpora una nueva
propiedad booleana bajo el nombre booleanColor.
En el caso de utilizar el nuevo componente creado en los apartados anteriores, los pasos para generar un Jar desde
Eclipse son:
1. Crea un paquete (package) y coloca la clase o clases implementadas del nuevo componente dentro del
paquete.
3. A continuación, accedemos a la opción Export del proyecto donde se ubica el nuevo componente (pulsando
con el botón derecho sobre el nombre del proyecto) y escogemos la opción Jar File, situada dentro de la
carpeta Java. Finalmente, indicamos un nuevo nombre para el archivo Jar y se guarda.
Ahora, para incluir el componente en un nuevo proyecto, en primer lugar, se añade a las librerías el archivo Jar creado o
descargado. Esto se realiza a través de la opción Build Path (botón derecho sobre el nuevo proyecto) y, a continuación,
Configure Build Path. Finalmente, sobre Classpath, añadimos el Jar utilizando la función Add external jars.
Por último, se incluye el componente en la paleta de la zona de diseño, Palette (aunque el proceso de incorporación
se realiza desde un proyecto específico), y el nuevo elemento quedará incluido de forma permanente.
TEMA 4. CREACIÓN DE COMPONENTES
Desarrollo de interfaces / 10
Con el botón derecho, pulsamos sobre la categoría donde se va a incluir el nuevo componente y, a continuación,
Add component.
Si la inclusión de la librería se ha realizado correctamente al buscar el nombre de la clase, este debe aparecer. Se
selecciona y se pulsa OK en las dos ventanas.
Existen multitud de herramientas en la actualidad que pueden utilizarse para la edición de imágenes, desde algunas
más profesionales como Adobe Photoshop hasta otras que permiten realizar un amplio conjunto de acciones,
suficientes para el desarrollo de gráfico de ciertos componentes. Veamos algunas de ellas:
A) GIMP
En primer lugar, podemos utilizar GIMP. Se trata de un programa de edición de imágenes gratuito. Permite la edición
de representaciones digitales en forma de mapa de bits, dispone de tijeras inteligentes, filtros, la posibilidad del uso
de capas, entre otras muchas características.
B) Paint o Pinta
Microsoft Paint o Pinta son herramientas similares entre sí, que incluyen opciones sencillas que permiten una edición
de calidad para aquellos casos en los que no se necesita algo demasiado profesional. Microsoft Paint incluye, en su
nueva versión, funcionalidades para el diseño 3D.
C) Photoshop
Adobe Photoshop es una de las herramientas para la edición de imágenes más reconocidas y utilizadas en la
actualidad. Una de las funcionalidades más importantes que incorpora esta aplicación es el uso de capas, mediante
las cuales es posible aplicar a la imagen multitud de efectos y tratamientos. Algunas de sus características son:
• Elevada potencia de procesamiento de imágenes, lo que la hace muy adecuada para el entorno profesional.
Todos los componentes utilizan este Se utiliza para actualizar los gráficos
método para dibujar su “forma”. dibujados sobre la interfaz.
Uno de los elementos más importantes de esta clase es el atributo Color, el cual, a través del método setColor (Color
c), permite definir el trazo de la figura que se va a diseñar.
Por otra parte, es posible añadir figuras geométricas sobre la interfaz de diseño. Los métodos utilizados son
draw y fill. El primero dibuja el perímetro de la figura indicada, mientras que el segundo, además, lo rellena del
color señalado.
Dibuja un rectángulo
Dibuja una elipse desde la Dibuja un polígono
desde la posición
posición inicial marcada utilizando el array de
inicial marcada por las
por las coordenadas coordenadas x e y pasado
Dibuja una línea desde la coordenadas x e y, y con la
x e y, y con la altura por parámetro. De la
posición inicial marcada altura y ancho indicados.
y ancho indicados. misma forma que en casos
por las coordenadas x1 e En el caso del segundo
fillOval crea y rellena la anteriores, fillPolygon
y1 hasta la final x2 e y2. método, se rellena
elipse del mismo color realiza el diseño relleno
del mismo color que del mismo color que la
que el definido para
el definido para la línea de perímetro.
la línea del borde.
línea del borde.
/ 11. Imágenes
Los componentes destinados a la creación de ventanas, paneles u otros contenedores no incluyen la opción de
cargar a través de una URL una imagen de fondo. Ahora bien, utilizando los métodos propios de la clase Graphics y
añadiendo ciertas modificaciones sería posible incorporar esta funcionalidad, hablamos del método paint.
En el siguiente fragmento de código, en primer lugar, se realiza un llamamiento al método paint utilizando la palabra
reservada super, por lo tanto, se está haciendo un llamamiento al constructor de la superclase.
super.paint(g);
A continuación, se crea una instancia de la clase Toolkit, esto permite asociarle una imagen a través de su URL
completa a un objeto de tipo Image.
Para mostrar la imagen cargada se utiliza el método drawImagen de la clase Graphics, el cual recibe, también por
parámetro, la posición exacta en la que la imagen se va a dibujar.
Si no se indica el valor correspondiente a las dimensiones de la imagen, se cargará la imagen con el tamaño con la
que ha sido guardada. Es aconsejable ajustarlo a la ventana, puesto que de lo contrario la imagen se vería incompleta.
En el siguiente fragmento de código se ha utilizado una imagen cuyas dimensiones exceden el tamaño de la ventana,
por lo que se han ajustado al tamaño del frame maximizado.
Nudo: La mejor manera de controlar la fecha introducida en una interfaz es con un calendario en el que el usuario
solo tenga que hacer clic para seleccionar el año, mes o día. De esta forma, además, es sencillo poder recuperar
los valores seleccionados para trabajar con ellos. En este caso, como la librería Java Swing no trae por defecto este
componente, se ha importado la librería JCalendar para poder utilizar el componente JMonthChooser.
Para agregar un nuevo componente a la paleta de diseño, en primer lugar, es necesario disponer del Jar del
componente. Los pasos necesarios a seguir son:
1. Incluir el componente en el proyecto, añadiendo las librerías del archivo Jar descargado. Desde la opción Build
Path, Configure Build Path. Sobre Classpath añadimos el Jar utilizando la función Add external jars.
2. Incluir el componente en la paleta de la zona de diseño. Para ello, con el botón derecho, pulsamos sobre la
categoría donde se va a incluir el nuevo componente y, a continuación, Add component.
3. Declarar el componente.
4. Instanciar el componente.
monthChooser.setBounds...
panel.add(monthChooser);
Desenlace:
4. Dibujar un óvalo desde la coordenada ‘x’ en 150 píxeles e ‘y’ en 70 píxeles. Con un radio en el eje ‘x’ de 50
píxeles y de 70 píxeles en el eje ‘y’.
6. Dibujar un rectángulo que comience en el eje ‘x’ en el píxel 350 y en el eje ‘y’ en el 70. De ancho que tenga
50 píxeles y de alto 70.
8. Dibujar un triángulo utilizando el método fillPolygon indicando las posiciones en el eje ‘x’ de los tres vértices,
las posiciones de los tres vértices en el eje ‘y’.
TEMA 4. CREACIÓN DE COMPONENTES
Desarrollo de interfaces / 16
Desenlace:
Fig. 11. Interfaz con las principales formas de Graphics del caso práctico 2
De la misma forma, la distribución y posterior integración de aquellos componentes que no se recogen en la paleta
básica de entorno de desarrollo, resultan esenciales para la creación de entornos de desarrollo personalizados que
se ajusten a las especificaciones de cada nuevo proyecto.
El diseño de interfaces no solo requiere de elementos con una funcionalidad específica, como los botones, los menús
o las cajas de texto, sino que serán útiles para mejorar la experiencia de uso de otros elementos más visuales, como
los que se pueden obtener a través de la librería Graphics, la cual nos permite “dibujar” sobre la ventana multitud de
formas y otros elementos gráficos.
Durante el desarrollo de una interfaz, podemos hacer uso de los componentes visuales de los que disponga nuestro
entorno de desarrollo o crear nuestros propios componentes. Para resolver el caso inicial planteado, existen
varias opciones:
En primer lugar, sería posible utilizar componentes ya existentes en la paleta de Eclipse para la realización de un
calendario a través de la combinación de JTextField y JLabel. Los de tipo JTextField serán cajas de dos caracteres para
los días y los meses, y de cuatro caracteres para los años. Los JLabel se pueden utilizar para separar los campos de las
fechas con un símbolo como “/” o “_”.
TÉCNICO EN DESARROLLO DE APLICACIONES MULTIPLATAFORMA
/ 17 MEDAC · Instituto Oficial de Formación Profesional
Por otro lado, es posible utilizar un componente con la funcionalidad de la fecha ya incorporada, estamos hablando
de componentes externos que se pueden importar a nuestro entorno. Este es el caso de JDateChooser, que permite
hacer clic en el icono de un calendario y seleccionar la fecha deseada.
/ 15. Bibliografía
Fernández, A., García-Miguel, B. y García-Miguel, D. (2020). Desarrollo de Interfaces (1.a ed.). Madrid, España: Síntesis.
DESARROLLO DE INTERFACES
TÉCNICO EN DESARROLLO DE APLICACIONES
MULTIPLATAFORMA
Generación de
interfaces a partir de
documentos XML
03
/ 1. Introducción y contextualización práctica 4
/ 4. Eventos 11
© MEDAC 978-84-18983-19-1
Reservados todos los derechos. Queda rigurosamente prohibida, sin la autorización escrita de los titulares del copyright,
bajo las sanciones establecidas en las leyes, la reproducción, transmisión y distribución total o parcial de esta obra por
cualquier medio o procedimiento, incluidos la reprografía y el tratamiento informático.
/ 7. Caso práctico 1: “Generación de un logo con
gráficos vectoriales escalables” 15
/ 10. Bibliografía 18
Reconocer las ventajas de generar interfaces de usuario a partir de su descripción
XML.
Este lenguaje hoy en día es muy importante por diversos usos, entre los que destacan:
• Computación distribuida: se trata de la posibilidad de utilizar XML para intercambiar información entre
diferentes ordenadores a través de redes.
2.1. XHTML
XHTML (eXtensible HyperText Markup Language) es un lenguaje derivado de XML similar a HTML, pero con
algunas diferencias que lo hacen más robusto y aconsejable para la modelación de páginas web.
• <! DOCTYPE>
• Siempre deben estar en minúsculas los elementos y los nombres de los atributos.
En el siguiente ejemplo se muestra el prototipo de un documento redactado con formato XHTML en el que podemos
comprobar que se cumplen todas las características descritas.
2.2. GML
GML (Geography Markup Language). Cualquier documento GML puede recibir un formato que define el tipo de
texto que es (títulos, párrafos, listas…). Estos tipos de documentos están compuestos de marcas precedidas de
doble punto(:). En el siguiente ejemplo se muestra un listado de lenguajes definidos a partir del lenguaje XML.
2.3. MathML
El lenguaje MathML (Mathematical Markup Language) se usa junto con el lenguaje XHTML y se basa en el
intercambio de información de tipo matemático entre programas. En el siguiente ejemplo se muestra la fórmula
matemática a2+b2=c2 escrita en lenguaje MathML.
<math>
<mrow>
<mi>a</mi>
<mn>2</mn>
<mo>+</mo>
<mi>b</mi>
<mn>2</mn>
<mo>=</mo>
<mi>c</mi>
<mn>2</mn>
</mrow>
</math>
2.4. RSS
El lenguaje RSS (Really Simple Syndication) tiene como objetivo principal la difusión de información entre los
usuarios suscritos a una fuente de contenidos actualizada frecuentemente. Los programas de este tipo suelen estar
compuestos por novedades del sitio web, el título, fecha de publicación o descripción. En el siguiente ejemplo se
muestra una noticia publicada en lenguaje RSS.
2.5. XSLT
XSLT (eXtensible Stylesheet Languaje for Transformation) podríamos decir que se trata de las hojas de estilo CSS,
pero dirigidas a XML. Presenta un funcionamiento más completo que CSS, puesto que permite agregar o eliminar
elementos y atributos desde un archivo.
Además, permite realizar pruebas e, incluso, tomar decisiones sobre los elementos que se han de mostrar u ocultar.
2.6. SVG
SVG corresponde a Scalable Vector Graphics (o Gráficos Vectoriales Escalables). Este lenguaje permite representar
elementos geométricos vectoriales, imágenes de mapa de bits y texto. En los siguientes ejemplos se muestra la
creación de diferentes elementos gráficos utilizando el lenguaje vectorial.
Ejemplo 1:
<!DOCTYPE html>
<html>
<body>
Código 4. Implementación
TEMA 3. GENERACIÓN DE INTERFACES A PARTIR DE DOCUMENTOS XML
Desarrollo de interfaces /8
Otras de las formas geométricas más utilizadas en SVG son el cuadrado, la elipse, la línea, la polilínea y el polígono.
Ejemplo 2:
Ejemplo 3:
Ejemplo 4:
El resto del documento XML se escribirá con etiquetas, y siempre hay que abrirlas y cerrarlas:
El conjunto formado por las etiquetas (apertura y finalización) y el contenido se conoce como elemento o nodo (en
el caso de hacer una representación jerárquica de los datos).
Por ejemplo, el conjunto < nombre> Lucas </ nombre> es un elemento o nodo, con la etiqueta ‘nombre’ y el contenido
‘Lucas’. Puede darse el caso de que el contenido de un elemento contenga otros elementos en lugar de los datos en
formato de texto, pero no podrá contener las dos cosas: los otros elementos y datos en formato de texto.
Este tipo de estructura de documento con las etiquetas y los atributos implica que debemos tener mucho cuidado en
la forma de almacenar la información, ya que debemos estructurar muy bien el documento y ordenar adecuadamente
las informaciones.
Un documento XML tiene una estructura anidada de manera jerárquica. Hay que prestar especial atención a la
apertura y cierre de todas las etiquetas para que queden todas cerradas. Es habitual que los elementos tengan otros
vinculados, es decir, elementos que descienden de él. En estos casos, las etiquetas de los descendientes/hijos deben
cerrarse antes que la del padre.
Para lograr esto, será necesario que la estructura jerárquica se cumpla de manera estricta con respecto a las
etiquetas que se utilizan en el documento. Es decir, todas las etiquetas abiertas deben haber sido cerradas en el
orden adecuado. Los valores de los datos o contenidos de los nodos se encuentran entre el texto que indica la
apertura de la etiqueta y lo que indica el cierre.
TEMA 3. GENERACIÓN DE INTERFACES A PARTIR DE DOCUMENTOS XML
Desarrollo de interfaces / 10
3.1. Etiquetas
Las etiquetas XML son marcas que sirven para diferenciar un contenido específico del resto del contenido del
documento. Una etiqueta empieza con el carácter ‘<”, continúa un nombre identificativo, y termina con el carácter
“>”. El nombre de una etiqueta siempre debe empezar por una letra, pero, a continuación, pueden utilizarse: letras,
dígitos, guiones, rayas, punto o dos puntos. Existen tres tipos de etiquetas:
• End-Tag: Etiquetas de cierre, similar a las de apertura, pero comienzan por “/”. (</etiqueta>)
3.2. Atributos
Un atributo es un componente de las etiquetas que consiste en un par ‘nombre=valor’. Se puede encontrar en las
etiquetas de apertura o en las etiquetas vacías, pero no en las de cierre. Hay que tener en cuenta que en una misma
etiqueta no pueden existir dos atributos con el mismo nombre, y todos los atributos de un elemento siempre son
únicos. Por ejemplo:
En este caso tenemos tres atributos únicos, nombre, apellido1 y apellido2. En cambio, en el siguiente caso, no sería
correcto, dado que tenemos el atributo apellido repetido:
3.3. Valores
Tal y como se ha visto en el apartado anterior, el atributo de un elemento XML proporciona información acerca del
elemento, es decir, sirve para definir las propiedades de los elementos. La estructura de un atributo XML es siempre
un par de ‘nombre=valor’.
<biblioteca>
<texto tipo_texto=“libro” titulo=“Diseño de interfaces web”
editorial=“Síntesis”>
<tipo>
<libro isbn=“9788491713241” edicion=“1”
paginas=“210”/>
</tipo>
<autor nombre=“Diana García-Miguel López”/>
</texto>
</biblioteca>
En el ejemplo observamos que los elementos aparecen coloreados en rojo (biblioteca, texto, tipo), los nombres de
los atributos en negro (tipo_texto, título, editorial, isbn, edición, páginas) y sus valores en azul.
TÉCNICO EN DESARROLLO DE APLICACIONES MULTIPLATAFORMA
/ 11 MEDAC · Instituto Oficial de Formación Profesional
/ 4. Eventos
Una interfaz, por sí sola, no puede saber en qué momento querrá el usuario llevar a cabo una determinada
funcionalidad. Para ello, existen lo que denominamos eventos, que dan lugar a interfaces dinámicas.
Los eventos proporcionan un mecanismo adecuado para tratar las diferentes formas interacción entre el usuario y la
aplicación, por ejemplo, cuando el usuario presiona una tecla o pulsa con el puntero del ratón. Ante la llegada de un
evento, en algunas ocasiones nos interesará tratarlo. Por ejemplo, la pulsación de un número en una aplicación que
presenta la funcionalidad de una calculadora. Otras veces no será necesario el tratamiento del evento con ninguna
acción, por ejemplo, cuando el usuario presiona con el ratón sobre un texto al que no hemos asignado ninguna
información complementaria.
Algunos de los eventos más comunes que se pueden producir en una aplicación, como interacción con las interfaces
gráficas son:
• Click: uno de los eventos más comunes, se produce al hacer clic sobre el control con el botón izquierdo del
ratón.
• GetFocus: evento producido cuando el elemento recibe el foco de atención, normalmente se utiliza para
introducir datos o realizar alguna operación en tiempo de ejecución.
• LostFocus: este evento se produce cuando el elemento de control pierde el punto de enfoque.
De igual modo, si queremos que un texto se ponga de color rojo al situarnos encima, y de color gris al salir, existen
otros eventos que podemos utilizar como MouseEntered y MouseExited; el primer evento se encargará de poner el
texto de color rojo y, el segundo, de ponerlo de color gris.
Una de las características fundamentales que presentan los editores de XML son las facilidades de implementación
que ofrecen para escribir código resaltando la sintaxis, insertando elementos y estructuras de XML de uso común a
través de la función de autocompletado.
5.1. Notepad ++
Editor de textos de propósito general que reconoce la sintaxis de múltiples lenguajes de programación. Es gratuito,
está disponible para Linux y Windows y su código fuente se puede descargar.
Ha triunfado bastante entre la comunidad de desarrolladores web por las características que ofrece y por lo ligero
que es (ocupa poco espacio y es muy rápido). Se puede extender a través de plugins. Posee uno llamado XML Tools
que añade un nuevo menú con numerosas opciones como, por ejemplo, validar un documento XML con su DTD. Su
interfaz es minimalista, pero los desarrolladores pueden personalizarla.
TÉCNICO EN DESARROLLO DE APLICACIONES MULTIPLATAFORMA
/ 13 MEDAC · Instituto Oficial de Formación Profesional
5.2. Atom
El editor Atom es una herramienta multinivel que sirve tanto para los usuarios que comienzan a programar, como
para uso profesional. Actualmente es uno de los editores preferidos para programadores. Se pueden añadir lenguajes
que no se incluyen de serie o añadir distintos tipos de interfaces gráficas.
Cada ventana de Atom es, en esencia, una página web renderizada localmente, y el espacio de trabajo se compone
de paneles que pueden recolocarse de manera flexible para que la programación resulte más cómoda.
5.2.1. Teletype
Atom tiene una manera de colaborar en tiempo real mediante la herramienta ‘Teletype’, la cual permite que
muchos desarrolladores puedan editar un archivo a la vez, en tiempo real. Son herramientas muy útiles cuando un
desarrollador tiene que trabajar de forma colaborativa con otras personas.
Su funcionamiento se basa en que el usuario con rol de anfitrión comparte su código con el resto de usuarios. Para
lograrlo, se utiliza un código generado por el anfitrión y que este comparte con los invitados. Cada uno de ellos podrá
editar el código compartido en tiempo real y visualizar las modificaciones del resto del equipo.
Todavía en Atom, queremos destacar una de las mayores ventajas de este editor de código, como son las herramientas
Git y GitHub, que permiten controlar distintas versiones de un proyecto mientras se está desarrollando. El proyecto
en el que estamos trabajando podrá sincronizarse automáticamente con el repositorio Git y podremos visualizar en
todo momento si estamos trabajando en la misma versión que se encuentra en el repositorio o qué diferencias
existen.
TEMA 3. GENERACIÓN DE INTERFACES A PARTIR DE DOCUMENTOS XML
Desarrollo de interfaces / 14
Dreamweaver permite escribir código en todos los lenguajes de programación importantes. Totalmente integrado
en el ecosistema de software de Adobe, está disponible para Windows y OS X. Dispone de vista previa para que los
desarrolladores puedan programar mientras previsualizan el producto final. Además, permite confirmar el código y
accesibilidad de la página, característica que puede facilitarles seguir las pautas de accesibilidad de contenido web.
Una de sus principales características es el resaltado de sintaxis, además de la finalización inteligente de código,
la interfaz personalizable y que es gratuito (aunque dispone de una versión de pago más completa). Pertenece al
software de Visual Studio y una de las novedades más potentes que ofrece es el servicio Live Share, extensión que
permite compartir código base con un compañero de equipo, de forma que se puede colaborar en tiempo real.
Al ser XML un lenguaje independiente de la plataforma, significa que cualquier programa diseñado para lenguaje
XML puede leer y procesar los datos XML independientemente del hardware o del sistema operativo que se esté
utilizando.
Gracias a su portabilidad, XML se ha convertido en una de las tecnologías más utilizadas como base para el almacenaje
de contenidos, como modelo de representación de metadatos, y como medio de intercambio de contenidos:
• XML para el almacenamiento de contenidos: en los últimos años está creciendo la demanda de bases de
datos XML nativas, es decir, bases de datos que almacenan y gestionan documentos XML directamente, sin
ningún tipo de transformación previa.
• XML como medio de intercambio de contenidos: la integración que permite el lenguaje XML en diferentes
plataformas se basa en la facilidad de intercambio de contenidos dado que, al utilizar documentos basados en
este lenguaje, se puede procesar para múltiples fines: como integración en una base de datos, visualización
como parte de un sitio web o mensajes entre aplicaciones.
• XML para la representación de metadatos: lo más importante para representar metadatos es el sistema de
indexación y recuperación, para poder discriminar dentro de un contenido los elementos o atributos que se
desea recuperar.
• Una segunda onda azul (que simbolizará la relajación del ámbito del mindfulness).
• Una tercera onda rosa (que servirá para representar los programas de corazón).
• Una última onda amarilla (correspondiente al color de las monedas de los programas de economía).
Nudo: En primer lugar, como se ha visto en los apartados anteriores, el lenguaje SVG permite representar elementos
geométricos vectoriales e imágenes de mapa de bits. En este caso, se puede realizar el diseño de 4 elipses que
representarán las cuatro ondas del nombre de la cadena y las cuatro secciones que trabajan. Se propone realizar un
sencillo código SVG con cuatro componentes de tipo elipse y modificar sus radios y estilo de color para conseguir el
logo que desea la empresa.
TEMA 3. GENERACIÓN DE INTERFACES A PARTIR DE DOCUMENTOS XML
Desarrollo de interfaces / 16
Desenlace: En base a las especificaciones de la empresa, una propuesta de diseño del logo sería el siguiente: la base
sería una elipse verde, superpuesta a ella una elipse azul con menores radios en el eje x e y, y después, de manera
sucesiva, se representan las elipses rosa y amarilla. Por último, se les envía un diseño con los componentes anteriores
y queda diseño de interfaz como el que se muestra.
<!DOCTYPE html>
<html>
<body>
<svg height=”150” width=”500”>
<ellipse cx=”240” cy=”100” rx=”220” ry=”30” style=”fill:lime” />
<ellipse cx=”220” cy=”70” rx=”190” ry=”20” style=”fill:cyan” />
<ellipse cx=”210” cy=”45” rx=”170” ry=”15” style=”fill:pink” />
<ellipse cx=”205” cy=”25” rx=”140” ry=”12” style=”fill:yellow” />
</svg>
</body>
</html>
Desenlace: La información quedará estructurada en elementos de tipo ‘maravilla’ con subelementos que contendrán
el nombre y el país.
Es importante recordar que, para estructurar correctamente un documento XML, existen reglas en cuanto a las
etiquetas, atributos y valores que debemos seguir. También hemos resaltado el uso de diferentes tipos de eventos
como mecanismos necesarios para interactuar con la interfaz.
TEMA 3. GENERACIÓN DE INTERFACES A PARTIR DE DOCUMENTOS XML
Desarrollo de interfaces / 18
Una vez hemos tenido claros esos conceptos, hemos profundizado mediante ejemplos prácticos en los principales
lenguajes basados en XML: XHTML, GML, MathML, RSS, XSLT y SVG. Por último, se ha realizado una comparativa
de los mejores editores que existen en la actualidad para crear interfaces basadas en XML: Atom, Notepad++,
Dreamweaver y Visual Studio Code.
Basándonos en lo visto en este tema, el diseño que necesita la empresa radiofónica puede basarse en las áreas de sus
contenidos (economía, corazón, mindfulness y naturaleza) y utilizar el código de amarillo, rosa, azul y verde para
identificar cada una de ellas, respectivamente.
Como lenguaje de desarrollo basado en XML, para este proyecto se puede utilizar XHTML para la parte de la
modelación de la interfaz que se basa en contenido generado en su página web. Para la parte de suscripciones al
podcast, podemos utilizar el lenguaje RSS, dado que nos permite difundir información a usuarios que se han suscrito
a una fuente de contenidos actualizada frecuentemente. Por último, se propone emplear SVG para realizar el diseño
vectorial de los elementos de la interfaz, tal y como se muestra en el primer caso práctico, para que puedan ser
reescalables y adaptables a cualquier plataforma.
Utilizando cualquiera de los editores descritos en este tema se puede realizar el desarrollo de una interfaz a partir
de un documento XML. En concreto, si queremos realizar el desarrollo de manera que podamos ver el diseño gráfico
mientras programamos, es decir, de manera WYSIWYG, sería recomendable utilizar los editores VisualStudio o
Dreamweaver.
/ 10. Bibliografía
Fernández, A., García-Miguel, B. y García-Miguel, D. (2020). Desarrollo de Interfaces. (1.a ed.). Madrid: Síntesis.
DESARROLLO DE INTERFACES
TÉCNICO EN DESARROLLO DE APLICACIONES
MULTIPLATAFORMA
Clases y
componentes
02
/ 1. Introducción y contextualización práctica 4
/ 4. JFrame y JPanel 7
/ 5. JDialog 8
/ 7. Componentes 10
7.1. JButton 10
7.2. JLabel 11
7.3. JTextField 11
7.4. JCheckBox 12
7.5. JRadioButton 12
7.6. JComboBox 13
© MEDAC 978-84-18983-19-1
Reservados todos los derechos. Queda rigurosamente prohibida, sin la autorización escrita de los titulares del copyright,
bajo las sanciones establecidas en las leyes, la reproducción, transmisión y distribución total o parcial de esta obra por
cualquier medio o procedimiento, incluidos la reprografía y el tratamiento informático.
/ 8. Layout manager 13
8.1. Flow Layout 13
8.2. Grid Layout 13
8.3. Border Layout 14
8.4. GridBag Layout 15
/ 12. Bibliografía 18
Crear una interfaz gráfica utilizando los asistentes de un editor visual.
Utilizar las funciones del editor para ubicar los componentes del interfaz.
Existen numerosos componentes, que son tipos de elementos que pueden ser incluidos en una interfaz simulando una
comunicación bidireccional, en la que la aplicación recibe diferentes entradas de datos, en función del componente
escogido. Por ejemplo, sería posible que el usuario introduzca texto en una caja, seleccione un valor en un menú
desplegable o se conecte a otras ventanas a través de la acción sobre un botón, entre otras.
En primer lugar, se crea la ventana utilizando la clase contenedora JFrame desde el menú File. Tras crearla, lo primero
que aparece es el contenido de la pestaña ‘Source’, es decir, el código en Java del JFrame creado. Para acceder a la
vista de diseño solo hay que pulsar en la pestaña Design. Recordemos que las partes principales de la vista de diseño
son:
• Palette: aquí se encuentran todos los elementos utilizados para la implementación de la interfaz, que son
colocados sobre la ventana de la zona de diseño. Cada vez que tomamos uno de estos elementos y lo
colocamos en la pestaña ‘Source’, aparece su código de programación.
• Components: mapa de navegación que muestra un resumen de todos los elementos insertados en la zona de
diseño.
• Propiedades: si se selecciona cualquier componente en esta ventana, se muestran todas las propiedades del
elemento que permiten definir su apariencia, entre otras. En cambio, si no se pulsa sobre ningún elemento
aparece en blanco.
Para llevar a cabo la instanciación de una clase y así crear un nuevo objeto, se utiliza el nombre de la clase seguido de
un par de paréntesis. Un constructor es sintácticamente muy semejante a un método. El constructor puede recibir
argumentos; de esta forma, podrá crearse más de un constructor en función de los argumentos que se indiquen en
su definición. Aunque el constructor no haya sido definido explícitamente, en Java siempre existe un constructor por
defecto que presenta el nombre de la clase y no recibe ningún argumento.
3.2. Métodos
Los métodos definen el comportamiento de un objeto, esto quiere decir que toda aquella acción que se quiera
realizar sobre la clase tiene que estar previamente definido en un método.
Los métodos pueden recibir argumentos o no; además, en función de su definición, devolverán un valor o realizarán
alguna modificación sobre los atributos de la clase.
Los atributos definen las características del objeto. Por ejemplo, si se tiene una clase círculo, sus atributos podrían
ser el radio y el color. Estos constituyen la estructura del objeto, que posteriormente podrá ser modelada a través
de los métodos oportunos.
La estructura de una clase en Java quedaría formada por los siguientes bloques, de manera general: atributos,
constructor y métodos.
/ 4. JFrame y JPanel
Como se vio en el tema anterior, una de las clases principales es la clase JFrame, destinada a la creación de la
ventana para la interfaz. Es aconsejable utilizar el proceso de creación descrito para poder acceder a la vista de
diseño (Design). Esta clase se utiliza, sobre todo, para definir la pantalla principal de una aplicación. Para generar las
pantallas secundarias es común utilizar JDialog, con unas prestaciones prácticamente idénticas.
Al igual que ocurre con todas las clases en Java, es necesario utilizar un constructor para crear una instancia del
objeto, en el caso de Jframe encontramos varios, como Jframe() o Jframe (String nombreVentana), entre otros.
Otros métodos importantes en Jframe son aquellos que permiten establecer las dimensiones exactas de la ventana,
la acción de cierre y habilitar su visibilidad.
Complementando a JFrame, tenemos un panel o lienzo denominado JPanel. Este es un bloque «invisible» que se sitúa
sobre una ventana. Consiste en un contenedor de componentes sobre el que vamos a ubicar todos los elementos
necesarios, sin tener que colocarlos directamente sobre la ventana JFrame.
Para crear un panel, desde el menú File, New, pulsamos Other y se busca en la carpeta WindowBuilder el tipo JPanel.
Gracias a los paneles podemos tener más organizada la interfaz gráfica. La distribución de estos paneles constituye
un sistema de capas o Layout que se verá más adelante.
El resto de los componentes se colocan dentro del lienzo creado de la forma descrita en el apartado 2.1. Por ejemplo,
si se crea un nuevo JPanel dentro del cual se coloca una etiqueta de texto, el código implementado sería de la forma:
//Crea un JPanel
JPanel panelSecundario = new JPanel();
//Se coloca dentro de otro JPanel principal
panel.add(panelPpal);
//Crea una etiqueta
JLabel jlabel1 = new JLabel(“hola”);
//La coloca dentro del JPanel secundario
panelSecundario.add(jlabel1);
/ 5. JDialog
Las aplicaciones que solo utilicen una pantalla implementarán su interfaz solo con un elemento JFrame; pero cuando
la aplicación que se está desarrollando presenta más de una ventana, las de tipo secundario se crearán utilizando
JDialog, puesto que esta sí permite tener un elemento padre, es decir, un elemento principal a partir del cual se
accede a la venta secundaria.
Las ventanas tipo JDialog siempre quedarán situadas por encima de sus padres, ya sean de tipo JDialog o JFrame.
La creación de este tipo de ventanas se realiza de forma similar a la de tipo JFrame: desde el menú File y New,
seleccionamos Other y, a continuación, dentro de la carpeta WindowBuilder, pulsamos sobre JDialog.
En la figura anterior se muestra el código por defecto que se genera al crear un JDialog de la forma descrita. En este
primer diseño aparecen dos botones, Ok y Cancel.
Los diálogos modales son aquellos que no permiten que otras ventanas de diálogo se abran hasta que la que se
encuentra abierta se haya cerrado, por ejemplo, un programa que queda a la espera de la selección de una opción
para poder continuar, como la selección del número de asiento en una aplicación para la compra de billetes de tren.
Por lo tanto, los diálogos de tipo no modal sí permitirán que haya tantos JDialog abiertos como se desee. Para indicar
a cuál de estos tipos pertenecen, utilizamos el flag de modal del constructor de JDialog, indicando a true para modal,
y false para no modal.
Tras la creación de las ventanas se sitúan los botones de conexión y se modifican sus propiedades de apariencia. Este
elemento puede situarse dentro de un layout o de un JPanel. Para crear el evento escuchador asociado a este botón,
basta con hacer doble clic sobre él y, de forma automática, se generará el siguiente código en la clase de la ventana
de la interfaz donde estamos implementando el botón conector.
Es importante tener en cuenta que, siempre que se utilicen nuevas ventanas, hay que ponerlas visibles utilizando
el método setVisible(boolean visibilidad), donde el valor que recibe por parámetro será true en el caso de hacerla
visible y false en el caso contrario.
En el siguiente ejemplo, al pulsar el botón Jugar desde la ventana principal implementada con una clase JFrame, nos
lleva a una segunda ventana también de tipo JFrame, la cual muestra un mensaje en una etiqueta de texto.
Cuando se detecta la pulsación del botón como evento, desde la clase principal se crea una nueva instancia del
objeto Juego, también de tipo JFrame y se específica como visible. Finalmente, en este ejemplo, se utiliza el método
dispose(), el cual cierra la ventana principal y solo mantiene abierta la segunda.
TEMA 2. CLASES Y COMPONENTES
Desarrollo de interfaces / 10
/ 7. Componentes
Existe un amplio abanico de componentes. En este apartado se verán los que constituyen la gran parte de la interfaz.
Los componentes son los elementos que se sitúan en la ventana, directamente sobre el JFrame y JDialog o sobre
un JPanel. Hay que prestar especial atención a aquellas propiedades que tienen un mismo nombre, puesto que no
realizan la misma acción en todos los elementos.
7.1. JButton
Permite crear un objeto de tipo botón dentro de una interfaz gráfica en Java. Las propiedades de este elemento son:
7.2. JLabel
Este elemento es uno de los más sencillos de aplicar y que, al mismo tiempo, más utilidad reporta. No solo se trata
de un elemento de texto, sino que este contenedor puede llegar a albergar también imágenes, iconos o texto. Sus
propiedades características son:
Hay que prestar especial atención a los valores background y foreground, ambos definen el color del texto: el
primero cuando está habilitado y el segundo cuando no lo está.
7.3. JTextField
El elemento JTextField, se utiliza como contenedor de una línea de texto, el tamaño queda definido por el valor del
atributo ‘columns’. No se trata de un valor exacto en cuanto a número de caracteres, sino que está definiendo su
ancho, por lo tanto, en función del carácter que se escriba, la capacidad variará.
7.4. JCheckBox
Los elementos de tipo casilla o CheckBox son elementos que se presentan junto a una pequeña caja cuadrada y que
pueden ser marcados por el usuario. Presenta unas propiedades similares a los casos anteriores, añadiendo algunos
nuevos atributos como ‘selected’, el cuál puede ser de valor true o false. El primero indicará que la casilla se muestre
marcada por defecto y, si es false, aparecerá sin marcar.
7.5. JRadioButton
Los elementos de tipo JRadioButton se utilizan habitualmente en el
desarrollo de interfaces para indicar varias opciones, de las que solo se
podrá escoger una, es decir, que resultarán excluyentes. Las propiedades
que presenta son iguales a la del elemento ‘JCheckBox’.
En el siguiente ejemplo se han creado tres elementos y se han asociado en un un ButtonGroup llamado bg.
public holaMundo() {
//Se define el comportamiento de la ventana
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
//Creación de JRadioButton y se ubican
JRadioButton r1 = new JRadioButton(“Opción 1”);
getContentPane().add(r1, BorderLayout.NORTH);
JRadioButton r2 = new JRadioButton(“Opción 2”);
getContentPane().add(r2, BorderLayout.WEST);
JRadioButton r3 = new JRadioButton(“Opción 3”);
getContentPane().add(r3, BorderLayout.SOUTH);
//Se agrupan los JRadioButton creados
ButtonGroup bg=new ButtonGroup();
bg.add(r1);
bg.add(r2);
bg.add(r3);
}
7.6. JComboBox
Finalmente, otro elemento común en la creación de interfaces son los menús desplegables, que se crean a través del
componente JComboBox. Presenta unas propiedades muy parecidas al resto de componentes descritos.
Para insertar los valores que se mostrarán en el combo utilizando la vista de diseño, desde propiedades,
seleccionamos ‘model’ y se abrirá una nueva ventana en la que se escriben en líneas separadas los valores del combo.
El valor máximo de elementos mostrados en el combo queda establecido en la propiedad maximumRowCount. La
propiedad selectedIndex permite al desarrollador indicar cuál es el valor que mostraría por defecto de entre todos
los recogidos, siendo 0 la primera posición.
/ 8. Layout manager
Un layout manager (manejador de composición) permite adaptar la distribución de los componentes sobre un
contenedor, es decir, son los encargados de colocar los componentes de una interfaz de usuario en el punto deseado
y con el tamaño preciso. Sin los layout, los elementos se colocan por defecto y ocupan todo el contenedor. El uso de
los layout nos permite modificar el tamaño de los componentes y su posición de forma automática.
Para la creación de este sistema de rejilla, se utiliza un constructor que necesita recibir el valor exacto de filas y
columnas que tendría la interfaz, GridLayout(int numFilas, int numCol).
Cualquiera de los elementos ‘Layout’ presentan como propiedad común el valor de vgap y hgap, que definen la
distancia entre elementos que se crea tanto en vertical como en horizontal.
Ahora bien, desde el código se sitúan atendiendo a su situación (NORTH, SOUTH, EAST, WEST, CENTER).
public interfazBorderLayout() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
getContentPane().setLayout(new BorderLayout(10, 5));
Tras la inserción de este layout, será posible ubicar el elemento de una forma mucho más precisa, seleccionado la
posición exacta de la rejilla. Por ejemplo, en este caso, se situará en la columna 2 y fila 2.
El botón ‘Inicio’ tendrá implementada la función del evento escuchador, para que, al hacer clic, se compruebe si los
datos son correctos y así abrir la ventana de ‘Bienvenida’.
Nudo: Para implementar un evento escuchador asociado al botón Inicio, será necesario:
• Comprobar si son correctos y si, en este caso, corresponden con ‘admin’ y ‘1234’.
• Si es correcto, se crea una segunda ventana llamada ‘acceso’ de la clase Inicio.java y se hace visible.
• Si no es correcto, se muestra un mensaje de tipo ‘Dialog’ indicando que el usuario o contraseña no es correcto.
Desenlace:
El código completo de las clases Principal.java e Inicio.java se encuentran en el Anexo 1 del tema.
Nudo: Utilizando la composición de tipo GridLayout, se va a diseñar la interfaz de un reproductor de música. Para
ello, será necesario:
• Implementar el JPanel con la disposición ‘GridLayout’, estableciendo el número apropiado de columnas y filas
mediante GridLayout(int numFilas, int numCol).
TÉCNICO EN DESARROLLO DE APLICACIONES MULTIPLATAFORMA
/ 17 MEDAC · Instituto Oficial de Formación Profesional
import java.awt.BorderLayout;
import java.awt.GridLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class reproductor {
public static void main(String[] args) {
JFrame frame=new JFrame(“reproductor”);
JPanel p1=new JPanel(new GridLayout(3,3));
JButton button = new JButton(“ON/OFF”);
p1.add(button);
button = new JButton(“PLAY”);
p1.add(button);
button = new JButton(“RECORD”);
p1.add(button);
button = new JButton(“PISTA ANTERIOR”);
p1.add(button);
button = new JButton(“PAUSE”);
p1.add(button);
button = new JButton(“PISTA POSTERIOR”);
p1.add(button);
button = new JButton(“REBOBINAR ATRÁS”);
p1.add(button);
button = new JButton(“STOP”);
p1.add(button);
button = new JButton(“REBOBINAR DELANTE”);
p1.add(button);
frame.add(p1, BorderLayout.CENTER);
frame.pack();
frame.setVisible(true);
}
}
Desenlace: El resultado final de implementar el código anterior es una interfaz como la que se muestra en la imagen,
compuesta por una matriz de seis botones dispuestos en tres filas y tres columnas.
TEMA 2. CLASES Y COMPONENTES
Desarrollo de interfaces / 18
Aunque el número de elementos que se incorporan en la paleta (Palette) es muy amplio, en este tema se han
descrito algunos de los más usuales, analizando sus principales propiedades. El abanico de elementos permite crear
infinitas combinaciones que se adecuarán en cada caso a las especificaciones finales de la aplicación. Algunos de los
elementos más importantes son JButton, JRadioButton, JCheckBox, JLabel o JComboBox.
Por lo otro lado, hemos visto que tener presentes las diferencias existentes entre JFrame y JDialog es fundamental,
no en cuanto a su implementación, sino al uso que se les va a dar.
En próximos temas se verá más en detalle el análisis de eventos, pero ya hemos adelantado el código necesario sobre
el que se establecerá la acción asociada ante la pulsación de un botón, por ejemplo, crear la conexión necesaria entre
dos ventanas, ya sean de tipo JFrame o JDialog a vista de diseño o desde el código utilizando los métodos adecuados.
Finalmente, hemos comprobado que la elección de una buena combinación de elementos y el diseño de su
distribución en el lienzo de la interfaz utilizando los elementos de tipo Layout determinará la usabilidad del diseño
de una aplicación.
Con los conocimientos adquiridos a lo largo del tema, podemos responder a las preguntas de diseño sobre la interfaz
de compra de entradas de teatro que se proponía al principio del tema.
En cuanto a la mejor opción para distribuir los distintos tipos de entradas, a través del uso de BorderLayout será
posible colocar los elementos en los extremos y en el centro del panel contenedor, de forma que la platea esté en
la disposición NORTH, el anfiteatro en SOUTH, el palco 1 en EAST, el palco 2 en WEST y el entresuelo en CENTER.
Por otro lado, para simular la colocación de las butacas, los componentes que representan estos elementos se
dispondrán utilizando GridBagLayout, que nos permite ubicar los elementos de una forma precisa, seleccionando la
posición exacta, como si se tratase de una rejilla completa por filas y columnas.
Finalmente, en el último paso de confirmación de compra, es recomendable utilizar una ventana con diálogo modal,
es decir, que no permita que otras ventanas se abran hasta que la que se encuentra abierta no se haya cerrado.
/ 12. Bibliografía
Fernández, A., García-Miguel, B. y García-Miguel, D. (2020). Desarrollo de Interfaces. (1.a ed.). Madrid: Síntesis.
DESARROLLO DE INTERFACES
TÉCNICO EN DESARROLLO DE APLICACIONES
MULTIPLATAFORMA
Introducción a
la confección de
interfaces
01
/ 1. Introducción y contextualización práctica 3
/ 2. Paradigmas de programación 4
/ 12. Bibliografía 16
© MEDAC 978-84-18983-19-1
Reservados todos los derechos. Queda rigurosamente prohibida, sin la autorización escrita de los titulares del copyright,
bajo las sanciones establecidas en las leyes, la reproducción, transmisión y distribución total o parcial de esta obra por
cualquier medio o procedimiento, incluidos la reprografía y el tratamiento informático.
Crear una interfaz gráfica utilizando los asistentes de un editor visual.
Utilizar las funciones del editor para ubicar los componentes de la interfaz.
De manera tradicional, se ha establecido una clasificación entre lenguajes de bajo y alto nivel. Los primeros se
encuentran más cerca de lo que es capaz de entender un ordenador, ejercen un control directo sobre el hardware y
están más alejados de la lógica humana (lenguaje máquina con 0 y 1 o lenguaje ensamblador).
Los anteriores resultan muy difíciles de entender por una persona. Por esa razón, aparecen los lenguajes de alto
nivel, los cuales pueden ser descritos utilizando reglas comprensibles por el programador, con un lenguaje más
cercano al natural. Será durante el proceso de compilación del código fuente de los programas, cuando estos se
traduzcan a un lenguaje de bajo nivel, capaz de ser entendido por una máquina.
/ 2. Paradigmas de programación
Un paradigma de programación define un estilo de programación. Los paradigmas describen la estructura del
programa que va a dar solución a los problemas computacionales.
En primer lugar, encontramos el modelo imperativo, que consiste en un conjunto de instrucciones ordenadas de
forma secuencial y claramente definidas para su ejecución en una máquina, es decir, definen un paso a paso. Este
modelo se divide en otros tipos:
• Programación estructurada: Incluye estructuras de control que permiten evaluar los casos para decidir entre
un camino de instrucciones u otro. También se incorporan estructuras iterativas.
• Programación modular: Finalmente, este tipo de programación permite desarrollar cada programa de forma
completamente independiente al resto del código, lo que agiliza las tareas de implementación y prueba. Será
en la parte final del proceso cuando se combinen todos los módulos, creando el software definitivo.
Algunos lenguajes conocidos que utilizan la programación imperativa son: Java, C, C#, Python o Ruby
En el modelo imperativo se indica la secuencia de pasos exacta que se ha de seguir para resolver un problema.
Por el contrario, en el caso del modelo declarativo, no se describen los pasos, sino el problema que se plantea.
Algunos ejemplos de lenguajes descriptivos son HTML, CSS y SQL.
La combinación de estos tres tipos resulta clave para el desarrollo de interfaces que veremos en este módulo.
TÉCNICO EN DESARROLLO DE APLICACIONES MULTIPLATAFORMA
/5 MEDAC · Instituto Oficial de Formación Profesional
LENGUAJES
NOMBRE LICENCIA ENLACE
SOPORTADOS
Visual
Propietaria C#, HTML, https://visualstudio.
Studio
*Libre Javascript, XML microsoft.com/es/
*Community
Mono https://www.
Libre C#, Java, .NET, Python
Develop monodevelop.com
https://glade.
Glade Libre C++, C#, Java, Pytho
gnome.org
Java, HTML,
NetBeans Libre https://netbeans.org
PHP, Python
https://www.
Eclipse Libre Java, C++, PHP
eclipse.org
Además, este entorno de desarrollo incorpora la funcionalidad de autocompletado de código mientras estamos
programando, por lo que es fácil detectar los problemas en tiempo real, ya que nos recuerdan que es posible que
se esté cometiendo algún fallo a través de líneas rojas y onduladas que se muestran en el editor bajo una línea o
fragmento de código. A la hora de depurar el código, permite ir paso a paso, estableciendo puntos de interrupción,
por procedimientos y por instrucciones.
Por último, cabe destacar que permite administrar el código en los repositorios más utilizados en la actualidad
como son GIT, GitHub y Azure DevOps. De esta forma, es posible controlar las modificaciones entre las diferentes
versiones de nuestros proyectos y poder realizar copias de seguridad de los archivos durante el desarrollo del mismo.
4.2. MonoDevelop
Este IDE libre y gratuito proporciona las funcionalidades propias de un editor de texto, además de las propias de un
entorno para depurar y gestionar proyectos.
Entre sus principales ventajas encontramos que permite trabajar con algunos de los lenguajes más demandados
en la actualidad, como son C#, Java, .NET y Python. Pertenece a Unity, motor de videojuegos multiplataforma por
excelencia. Esta plataforma es muy interesante porque permite desarrollar tanto para Windows, Mac Os X y Linux.
4.3. Glade
Este programa ayuda a la creación de interfaces gráficas de usuario y es muy utilizada en entornos XML. También
permite el desarrollo de interfaces gráficas basadas en lenguaje C, C++, C#, Java, Python…
Dado que la interfaz es bastante intuitiva, se puede aprender rápido y obtener un dominio de la herramienta
invirtiendo poco tiempo. La principal diferencia respecto a las demás propuestas es que está diseñada pensando
especialmente en GNU/Linux.
4.4. NetBeans
NetBeans es una herramienta gratuita y de código abierto. Al igual que Eclipse, que veremos en el siguiente
apartado, es uno de los entornos de desarrollo más utilizados para el desarrollo de interfaces a través lenguaje Java,
aunque también permite utilizar otros lenguajes como PHP o Python.
Este IDE permite extender el entorno con un gran número de módulos que agrupan clases de Java y que permiten
interactuar con las APIs de NetBeans.
4.5. Eclipse
Este IDE es de código abierto y multiplataforma. Dispone de la funcionalidad Graphical Layout, que nos permite
visualizar el contenido en vista de diseño y desarrollar componentes visuales de una forma rápida e intuitiva. Cabe
destacar su componente ‘Palette’, un panel que permite crear botones, cuadros de texto, cuadrículas, insertar
imágenes, etc.
Para completar esta asignatura vamos a utilizar el entorno de desarrollo Eclipse, puesto que, en la actualidad, su uso
es cada vez más frecuente en lo que respecta al desarrollo de interfaces de forma profesional.
Para poder obtenerlo, desde el sitio web de Eclipse (https://www.eclipse.org) primero se selecciona la versión que
corresponda con el equipo con el que estemos trabajando, se descarga y, a continuación, se instala a través de unos
sencillos pasos. Este proceso ocupa pocos minutos. Ahora bien, también se debe tener instalado Java Development
Kit (JDK) correspondiente al sistema operativo del equipo, cuya descarga puede realizarse desde la página web de
Oracle.
Una vez completado este proceso, ya tendríamos instalado todo el entorno básico para el desarrollo de interfaces
posterior. Para ejecutar Eclipse basta con pulsar sobre el icono de la aplicación, normalmente con el nombre de Eclipse
Installer. Finalmente, selecciona ‘Eclipse IDE for Enterprise Java Developers’, luego pulsa ‘Install’ y posteriormente
‘Launch’.
TEMA 1. INTRODUCCIÓN A LA CONFECCIÓN DE INTERFACES
Desarrollo de interfaces /8
Para poder utilizar los métodos y atributos de estas clases, es necesario importar las librerías en Java. Para ello, se
utiliza la palabra clave import, seguida del nombre de la librería requerida, en concreto, de la ruta del paquete que se
va a agregar. Esta importación se realiza justo después de la declaración del paquete, si esta existe.
import javax.swing.*;
import java.awt.*;
AWT (Abstract Window Toolkit) se desarrolló en primer lugar. Esta librería permite la creación de interfaces
gráficas a través de la importación del paquete java.awt. Dos de sus funcionalidades más importantes son el uso
de la clase ‘Component’ y el de la clase ‘Container’. La primera define los controles principales que se sitúan dentro
del elemento container o contenedor (este último hace referencia a la pantalla en la que se muestra la interfaz de
aplicación a desarrollar).
En la actualidad, la librería Swing supone la evolución de la anterior, eliminando algunas limitaciones que presentaba
AWT (como el uso de barras de desplazamiento). Swing incorpora múltiples herramientas, métodos y componentes
que permiten diseñar cualquier tipo de interfaz. A través de un entorno gráfico, permite crear un diseño desde cero
arrastrando los componentes hasta la paleta de diseño, mientras que al mismo tiempo se va generando el código
asociado. Conocer el funcionamiento de ambas vistas, diseño y código, permite adaptar el funcionamiento a las
especificaciones de aplicación buscadas.
TÉCNICO EN DESARROLLO DE APLICACIONES MULTIPLATAFORMA
/9 MEDAC · Instituto Oficial de Formación Profesional
A diferencia de la librería AWT, Swing proporciona una apariencia que puede emular varias plataformas y utilizar
componentes visuales más avanzados. El proceso de instalación y configuración de esta librería en el entorno de
desarrollo de Eclipse se describe a continuación:
• En el menú desplegable de la parte superior de la nueva pantalla se selecciona la versión del entorno que
estemos utilizando.
En ese momento aparecerán todos los paquetes disponibles para esa versión y seleccionaremos todos los paquetes
que comienzan por SWT y WindowBuilder. Recuerda que se encuentran dentro de la carpeta General Purpose
Tools. Después, pulsamos continuar.
Una de las clases más importantes del paquete Swing es JFrame, puesto que se encarga de crear las ventanas sobre
las que se añaden el resto de elementos. La llamada a esta clase conllevará la aparición de la vista de diseño (Design).
En algunas ocasiones, se puede confundir la clase JFrame con la clase JPanel, pero mientras que la primera define una
ventana completa, la segunda es solo un contenedor de componentes, por lo que dentro de un Jframe podríamos
encontrar múltiples JPanel.
Se puede crear una clase Jframe de la manera habitual, creando una clase en Java y, a continuación, importando
manualmente el paquete Swing y codificando los métodos relativos a JFrame y el resto de componentes. El resultado
sería exactamente el mismo, pero se recomienda realizarlo usando la creación de clase con JFrame que se describe a
continuación, puesto que, de lo contrario, no se tendría acceso a la vista de diseño que se verá en el apartado 9. La
creación de nuestra primera clase JFrame se realiza en dos sencillos pasos:
• La clase JFrame se encuentra dentro de las carpetas WindowBuilder y Swing Designer. Seleccionamos JFrame
y pulsamos Next. Finalmente, se solicita el nombre y se pulsa Finish.
La vista de diseño nos permite insertar cualquier tipo de elemento en la interfaz sin necesidad de escribir el código,
ya que este se genera automáticamente y se puede consultar desde la pestaña ‘Source’. Es decir, desde ‘Design’ es
posible añadir todos los elementos que se quieran incluir en la aplicación. Así definiremos la parte visual y, desde el
apartado dedicado al código, se cargarán los métodos relativos a cada uno de los objetos insertados, sobre los cuales
podremos incluir el resto del código necesario para definir su comportamiento exacto.
A continuación, se describen los diferentes grupos de herramientas que podemos encontrar en Eclipse, tanto los
de tipo general, necesarios para la programación de cualquier aplicación con Java, como los específicos del área de
diseño.
8.1. Toolbar
En la barra de herramientas o ‘Toolbar’ de Eclipse se encuentran los iconos relativos a las acciones genéricas de
programación, como la creación de paquetes, clases… Uno de los botones más importantes es el encargado de la
ejecución del programa. Al hacer clic sobre la flecha que se encuentra a su derecha, se podrá seleccionar cuál de
entre las clases Java del proyecto actual se quiere ejecutar. En el desplegable que aparece como Run As se podrá
seleccionar el tipo de ejecución como Aplicación de Java.
Para insertarlos en la zona de diseño basta con hacer clic sobre el componente y arrastrarlo hasta la zona del
contenedor exacta en la que se va a ubicar.
En el caso de los botones, otras de las propiedades de aspecto que aparecen y que permiten definir la apariencia
son: ‘background’, para seleccionar el color de fondo del botón; ‘enabled,’ que permite habilitar o deshabilitar su
funcionalidad; ‘font’ y ‘foreground’, que definen el tipo de letra, el tamaño y el color, entre otras.
Indicar su tamaño.
Implementa una ventana desde cero utilizando solo el código de programación, es decir, sin utilizar la creación de
JFrame desde el menú File. Tras realizar este desarrollo, ¿cuál es una de las grandes diferencias que puedes observar
entre las dos creaciones descritas?
Nudo: En el siguiente código se muestran cada uno de los pasos descritos en el planteamiento mediante el uso de
los métodos setSize, setVisible y setDefaultCloseOperation, y se definen todos los parámetros de diseño necesarios
para generar una ventana desde cero.
import javax.swing.*;
public class MiPrimeraVentana {
public static void main(String[] args) {
JFrame f = new JFrame(“Mi primera ventana”);
f.setSize(400, 400);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
}
}
Desenlace: El resultado del código anterior es una ventana como la que se muestra en la siguiente imagen, en la que
se puede apreciar las dimensiones establecidas de 400 x 400 píxeles de ancho por y alto y el nombre de la ventana.
Es importante destacar que unas de las principales diferencias a la hora de crear un JFrame directamente con el
código es que no estará habilitado el modo Design.
Nudo: Para crear un JFrame seleccionamos en el menú File -> New -> Other -> JFrame. Como podemos ver, esta clase
crea el siguiente código implementado en la vista ‘Source’. Además, por defecto, se importa la librería AWT:
• Añadir dos objetos de tipo JButton. Desde la vista Design añadimos un componente JButton y modificamos su
propiedad ‘text’ con el contenido «Aceptar». Repetimos el proceso para el botón «Cancelar» y lo colocamos
en otro de los ‘containers’.
Desenlace: La interfaz final que obtendremos corresponderá con un resultado similar al que se muestra en la imagen.
Para lograr una interfaz básica, será necesario hacer uso de al menos un componente de clase JFrame para crear la
ventana y poder añadirle objetos que sirvan para interactuar entre el usuario y la aplicación.
Hemos comprobado también que, durante el desarrollo de una interfaz, podemos servirnos de dos modos de diseño.
Finalmente, hemos profundizado sobre el modo Design, que permite trabajar con una zona de diseño que contiene
una previsualización del resultado final de la interfaz y que además está compuesto por todos los elementos que se
le pueden añadir a esta, así como los contenedores dónde se colocaran dichos elementos.
TEMA 1. INTRODUCCIÓN A LA CONFECCIÓN DE INTERFACES
Desarrollo de interfaces / 16
Como se ha visto a lo largo del tema, el proceso de implementación no solo es importante para el desarrollo de
interfaces, sino también para tomar una serie de decisiones previas. Para el caso inicial del desarrollo de una interfaz
de una calculadora:
• ¿Qué tipo de componentes gráficos será necesarios implementar en la interfaz?: dadas las características
de la interfaz, sería necesario utilizar botones para los números y operaciones. Para mostrar el resultado
simulando un visor, se puede utilizar una etiqueta.
• ¿Cuál crees que sería el lenguaje más apropiado para desarrollar esta interfaz?: tal y como se ha visto a lo
largo del tema, para el desarrollo de una interfaz debemos utilizar lenguajes de alto nivel. En este caso se opta
por el lenguaje Java.
• ¿Qué entorno de desarrollo elegirías?: Dependiendo del lenguaje de programación que se vaya a utilizar y
del tipo de interfaz, habrá que elegir un IDE u otro. En este caso, si se usa el lenguaje Java, uno de los IDE
recomendados es Eclipse.
• ¿Conoces alguna librería específica para el desarrollo gráfico de interfaces?: para la implementación de
interfaces gráficas se requiere del uso de librerías que permiten el desarrollo de interfaces. En Java podemos
utilizar de la librería AWT y de Swing.
El prototipo de diseño de interfaz que se propone para el caso práctico inicial podría ser como el que se muestra en
la imagen.
/ 12. Bibliografía
Fernández, A., García-Miguel, B. y García-Miguel, D. (2020). Desarrollo de Interfaces. (1.a ed.). Madrid: Síntesis.