3.- INTERFAZ GRAFICA DE USUARIO

Anuncio
3.- INTERFAZ GRAFICA DE USUARIO
3.1. Introducción.
Interfaz gráfica de usuario (En inglés Graphic User Interface, también conocido con su
acrónimo GUI) es un método para facilitar la interacción del usuario con el ordenador o la
computadora a través de la utilización de un conjunto de imágenes y objetos pictóricos
(iconos, ventanas..) además de texto. Surge como evolución de la línea de comandos de los
primeros sistemas operativos y es pieza fundamental en un entorno gráfico.
GUI es un acrónimo del vocablo inglés Graphical User Interface. Douglas Engelbart,
además de inventor del ratón de ordenador, desarrolló la primera interfaz gráfica en los
años 1960 en EE.UU. en los laboratorios de XEROX. Fue introducida posteriormente al
público en las computadoras Apple Macintosh en 1984, y a las masas hasta 1993 con la
primera versión popular del sistema operativo Windows 3.0.
Los GUIs que no son PUIs son encontrados en juegos de computadora, y los GUIs
avanzados basados en realidad virtual ahora son usados con más frecuencia en las
investigaciones. Muchos grupos de investigación en Norteamérica y Europa están
trabajando actualmente en el interfaz de enfoque del usuario o ZUI (Zooming User
Interface), que es un adelanto lógico en los GUI, mezclando 3D con 2.o o "2D y medio
objetos vectoriales de una D".
3.1.1. Reseña histórica.
La historia reciente de la informática está indisolublemente unida a las interfaces
gráficas, puesto que los sistemas operativos gráficos han ocasionado grandes
consecuencias en la industria del software y del hardware. Los principales pasos se
detallan a continuación.
La empresa que introdujo el ratón y el GUI por primera vez con el Lisa (Apple)
consiguió hacerse con una parte importantísima del mercado del ordenador personal.
A principios de los años ochenta (en 1981) Apple, que había comenzado como una
microempresa formada por dos empleados (Steve Jobs y Steve Wozniak) había crecido
hasta convertirse en una empresa de 300 millones de dólares.
16
En el año 1983 Apple ya se había convertido en una empresa de 1000 millones de
dólares, el mismo valor que IBM.
En 1987 IBM se vio obligada a entrar en el mercado de los ordenadores personales con
entorno gráfico con su modelo PS/2, aliándose con Bill Gates (Microsoft), que había
desarrollado el OS/2. La interfaz gráfica de este sistema operativo era muy similar a la de
Apple.
Pero el OS/2 no se convirtió en el nuevo estándar del sector, debido fundamentalmente
al conflicto de intereses entre IBM y Microsoft.
Microsoft crea el Windows 1.0, sistema operativo gráfico para ordenadores PC IBM
compatibles, con un parecido asombroso al Mac OS.
La respuesta de Apple a la introducción del sistema operativo Windows fue la
interposición de una demanda de varios miles de millones de dólares contra Microsoft, por
violación de copyright.
La aparición de ordenadores IBM clónicos hizo que el sistema Windows se
popularizara, lo que restó mercado a Apple. Ésta se recuperó a finales de 1990 lanzando
nuevos productos.
Una señal inequívoca del éxito de Apple fue la aparición de productos similares: una
pequeña compañía llamada Nutek Computers Inc. anunció que estaba desarrollando un
ordenador compatible con el Macintosh.
En 1991, John Sculley, director de Apple, reveló que la compañía estaba considerando
competir contra Microsoft en el campo del software vendiendo su sistema operativo a
terceros.
Apple reveló que estaba manteniendo conversaciones con su antiguo rival, IBM,
destinadas a compartir tecnologías. Decidieron crear una joint venture para desarrollar un
sistema operativo avanzado que ambas utilizarían en sus nuevas máquinas y licenciarían a
terceros. Este plan presentaba un desafío directo a Microsoft.
Microsoft consigue convertir a Windows en el sistema operativo más utilizado en el
mundo. Dejando a Apple en un segundo lugar.
Algúnos GUIs son diseñados para cumplir con los rigurosos requisitos de mercados
verticales. Éstos se conocen como "GUIs específico de uso." Un ejemplo de un GUI tan
específico de uso es el ahora familiar touchscreen (pantalla que al ser tocada efectúa los
comandos del ratón del software de venta encontrado en muchos restaurantes alrededor del
mundo y en comprobaciones en tiendas del autoservicio. Primero iniciado por Gene
17
Mosher en la computadora del ST de Atari en 1986, el uso que el GUI específico del
touchscreen ha encabezado una revolución mundial en el uso de computadoras a través de
la industria del alimento y de las bebidas y en venta al por menor general.
Otros ejemplos del touchscreen específico GUIs del uso incluyen las máquinas de caja
automática más recientes, uno mismo-marcar de la línea aérea, quioscos de la información
y las pantallas de monitor /control en los usos industriales encajados que emplean un
sistema operativo en tiempo real (RTOS). Los teléfonos móviles y los sistemas o consolas
de juego también emplean el touchscreen, además de no entenderse la domótica sin un
buen interfaz de usuario o GUI.
Se puede resumir en una definiendo básicamente las interfaces de usuario de un
programa como un conjunto de elementos hardware y software de una computadora que
presentan información al usuario y le permiten interactuar con la información y con la
computadora.
3.2.Principios para el diseño de interfaces gráficos.
Existen principios relevantes para el diseño e implementación de Interfaces de usuario
(IU) ya sean para IU graficas como para la web.
Autonomía
La computadora, la IU y el entorno de trabajo deben estar a disposición del usuario. Se
debe dar al usuario el ambiente flexible para que pueda aprender rápidamente a usar la
aplicación.
Percepción del Color
Aunque se utilicen convenciones de color en la IU, se deberían usar otros mecanismos
secundarios para proveer la información a aquellos usuarios con problemas en la
visualización de colores.
Legibilidad
18
Para que la IU favorezca la usabilidad del sistema de software, la información que se
exhiba en ella debe ser fácil de ubicar y leer. Es importante hacer clara la presentación
visual (colocación /agrupación de objetos, evitar la presentación de excesiva información.
3.3. Herramientas y lenguajes para el desarrollo de interfaces
de usuario.
3.3.1. GLADE
Glade es un desarrollador de interfaces Permite construir de forma gráfica e interactiva
interfaces de usuario gráficos para Gnome/Gtk, publicado bajo la licencia GNU GPL.
Glade también permite definir los nombres de los handler (funciones) que se asociarán a
cada uno de los eventos del interfaz.
La Librería libGlade
Una vez hemos creado visualmente el interfaz deberemos usarlo en nuestros
programas, para esto glade nos brinda dos opciones:
La primera forma es que el propio Glade genere el código en C que crea el interfaz,
código en el que posteriormente uniremos con nuestro rograma, esta opción suele ser poco
recomendable porque es un poco engorrosa.
La segunda manera de hacerlo es usar Glade para que genere un fichero en el cual se
describe con XML el interfaz. Este fichero nos servirá para especificárselo a la librería
libglade, la cual, mediante un par de llamadas ejecutara el código necesario para usar el
interfaz en nuestro programa.
3.3.2. GTK
GTK(GIMP Toolkit) es una biblioteca para crear interfaces graficas de usuario.
Su licencia es la LGPL, así que mediante GTK podría desarrollar programas con
licencias abiertas, gratuitas, libres y hasta licencias comerciales no libres sin mayores
problemas.
GTK está construido encima de GDK (GIMP Drawing Kit) que básicamente es un
recubrimiento de las funciones de bajo nivel que deben haber para acceder al sistema de
ventanas sobre el que se programe. Se llama el UIMP toolkit porque fue escrito para el
19
desarrollo del General Image Manipulation Program (GIMP), pero ahora GTK se utiliza en
un gran número de proyectos de programación, incluyendo el proyecto GNU Network
Object Model Environment (GNOME).
GTK es esencialmente una interfaz para la programación de aplicaciones
orientadas a objetos (API). Aunque esta completamente escrito en C, esta
implementado haciendo uso de la idea de clases y de funciones respuesta o de
callback(punteros o funciones).
3.3.3. TCL/TK
TCL(Tool Command Languaje) es un lenguaje de programación interpretado y
multiplataforma. Es distribuido de forma totalmente gratuita, aunque su uso sea para
aplicaciones comerciales, a través de Internet.
Una de sus principales características es su gran facilidad con la que se pueden
implementar funciones en C/C++ que pasan a ser nuevas instrucciones del intérprete. La
extensión más conocida, y que es distribuida junto con el propio TCL, es TK(Tool Kit).
TK añade a los comandos de TCL, comandos capaces de crear interfaces gráficos de
usuario.
Ventajas de TCL/TK
Sencillez de programación
Rapidez en el desarrollo de las aplicaciones (Tecnología RAD)
Gran velocidad comparado con otros lenguajes interpretados
Facilidad de modificación de las aplicaciones
Multiplataforma
Gran número de extensiones gratuitas
Posibilidad de incorporar nuevos comandos en lenguaje C/C++
Inconvenientes de TCL/TK
Excesivamente lento comparado con los lenguajes compilados
Necesidad del intérprete para ejecutar una aplicación
Difícil de depurar
3.3.4. QTK
Es una herramienta construida a partir de TCL/TK, que permite a los diseñadores de
interfaces de usuarios adoptar un enfoque basado en modelos rentables para el diseño de
interfaces de usuario ejecutables.
20
En esta herramienta los widgets pueden ser manejados y controlados dinámicamente y
así facilita el desarrollo de las aplicaciones de las interfaces de usuario. El modulo QTK
esta basado en el uso de descripciones de usuario.
El enfoque de la descripción es particularmente útil en un lenguaje simbólico
como OZ, que permite la creación fácil y concisa de estructuras de datos.
Ventajas de QTK
Unicidad de Lenguaje
Reduce los costos de desarrollo
Integración ligada de herramientas
3.3.5. WXWINDOWS
Es una biblioteca de clases para C++ y python, que permite el desarrollo de
aplicaciones con interfaces graficas de usuario de una manera rápida y sencilla. Su
principal característica es que es multiplataforma.
wxWindows se distribuye bajo licencia wxWindows Library License, que es similar a
la GNU Library General Public License pero que además permite usar la biblioteca para
desarrollos comerciales(ya sean aplicaciones o modificaciones de la propia biblioteca),
siempre y cuando estos desarrollos comerciales no usen ningún código distribuido bajo
alguna licencia GNU.
3.3.6. Visual Basic
Es un lenguaje de programación desarrollado por Microsoft. Visual Basic es un
lenguaje visual que desciende del lenguaje de programación BASIC. Su primera versión
fue presentada en 1991 con la intención de simplificar la programación utilizando un
ambiente de desarrollo completamente gráfico que facilitara la creación de interfaces
gráficas y en cierta medida también la programación misma.
Características generales
Es un lenguaje simple pensado para programadores inexpertos, guiado por eventos, y
centrado en un motor de formularios poderoso que facilita el rápido desarrollo de
aplicaciones gráficas. Su sintaxis, derivada del antiguo BASIC, ha sido ampliada con el
tiempo al agregarse las características típicas de los lenguajes estructurados modernos. No
21
requiere de manejo de punteros. Posee varias bibliotecas para manejo de bases de datos,
destacando ADO.
Es utilizado principalmente para aplicaciones de gestión de empresas, debido a la
rapidez con la que puede hacerse un programa que utilice una base de datos sencilla,
además de la abundancia de programadores en este lenguaje.
El compilador de Microsoft genera ejecutables que requieren una DLL para que sus
ejecutables funcionen, en algunos casos llamada MSVBVMxy.DLL (acrónimo de
"MicroSoft Visual Basic Virtual Machine x.y", siendo x.y la versión) y en otros
VBRUNXXX.DLL ("Visual Basic Runtime X.XX"), que provee todas las funciones
implementadas en el lenguaje. Además existen un gran número de bibliotecas (DLL) que
facilitan el acceso a muchas funciones del sistema operativo y la integración con otras
aplicaciones.
Derivados
•
Su derivado VBScript es el lenguaje predeterminado para Active Server Pages
(ASP).
•
Además, una extensión propia del lenguaje llamada Visual Basic for
Applications (VBA) permite codificar módulos (a veces llamados macros) para las
aplicaciones de Microsoft Office.
•
Especialmente a partir de la versión 6 del lenguaje, se permite la interacción y
generación de objetos remotos que puedan ser invocados desde páginas de scripts
(concretamente las ASP, aunque no es imposible hacer un enlace empleando JSP),
alojándolos en servidores de web.
•
Visual Basic .NET, parte de .NET, es un lenguaje prácticamente equivalente en
funcionalidades a C# (por ejemplo, no admite pseudo-punteros), añadiendo la capacidad de
POO que sus anteriores versiones (como Visual Basic 6) no poseían: Herencia,
polimorfismo...
Ventajas e inconvenientes
Ventajas
•
Visual Basic es un lenguaje simple y por tanto fácil de aprender.
22
•
Su mayor facilidad radica en el dibujado de formularios, mediante el arrastre de
controles.
•
La sintaxis está cercana al lenguaje humano.
•
Las ramas de Visual Basic X ha muerto. Microsoft ha comenzado con su
versión .NET, completamente diferente del Visual Basic original. Visual Basic .NET
compila hacia el mismo código final que C#. Visual Basic .NET es mucho más potente y
alberga muchas más funcionalidades que ésta versión.
•
Es un lenguaje RAD, centrado en conseguir en el menor tiempo posible los
resultados deseados, por eso mismo su mayor uso está en las pequeñas aplicaciones, como
gestión de bares, empresas, restaurantes...
•
Tiene una ligera implementación de POO
•
Permite el tratamiento de mensajes de Windows.
•
Gran parte del trabajo en el diseño de formularios está realizado, gracias a la
gran gama de controles incorporados junto al lenguaje que ahorran costes de tiempo de
desarrollo.
•
Permite crear controles personalizados fácilmente del mismo modo que el
diseño de formularios.
Inconvenientes
•
Es propietario de Microsoft, por tanto nadie que no sea del equipo de desarrollo
de esta compañía decide la evolución del lenguaje.
•
Sólo existe un compilador & IDE, llamado igual que el lenguaje.
•
Sólo genera ejecutables para Windows.
•
La sintaxis es bastante inflexible.
•
Los ejecutables generados son relativamente lentos.
•
NO es adecuado para aplicaciones grandes, multimedia, de oficina,
videojuegos, editores gráficos...
•
NO permite características de programación avanzada.
•
NO permite generar librerías dinámicas (DLL).
•
Sólo permite el uso de funciones de librerías dinámicas (DLL) stdcall.
•
Para que los ejecutables que genera funcionen necesita una DLL llamada
MSVBVMxy.DLL: MicroSoft Visual Basic Virtual Machine x.y (versión). Provee todas
las funciones y características implementadas en el lenguaje.
23
•
Algunas funcionalidades están indocumentadas.
•
La ligera implementación de POO no permite sacar el máximo provecho de este
modelo de programación.
•
NO soporta tratamiento de procesos como parte del lenguaje.
•
NO tiene manejo de excepciones.
•
NO incluye operadores a nivel de bits.
•
NO permite el manejo de memoria dinámica, punteros, arrays, etc. como parte
del lenguaje.
•
NO avisa de ciertos errores o advertencias, como la conversión de tipos
inadecuada.
•
El tratamiento de mensajes de Windows es básico e indirecto.
•
La gran gama de controles incorporados son, sin embargo, muy generales, lo
que lleva a tener que reprogramar nuevos controles para una necesidad concreta de la
aplicación.
•
Los controles personalizados no mejoran la potencia de la API de Windows, y
en determinados casos acudir a ésta será el único modo de conseguir el control
personalizado deseado.
•
La forma de programación que plantea Visual Basic ha ocasionado que muchos
programadores de Visual Basic practiquen malas costumbres, entre las más comunes:
o
Arrays empezados en 1
o
Variables globales
o
Variables sin declarar
o
Variables de tipo indefinido (Variant)
o
Variables con nombres inexpresivos
o
Código innecesario
o
Código ilegible
o
Código repetido - Falta de funciones y procedimientos
o
Uso incorrecto de la API de Windows
o
Uso de goto y etiquetas
o
Uso de controles como simples contenedores de datos
o
Dependencia de los controles a la hora de programar
24
3.3.7. JAVA.
3.3.7.1. Características.
LENGUAJE FAMILIAR:
Java no supuso de inicio una transformación total, partiendo del punto que se ha
utilizado C y luego nos hemos movido algo en C++ iniciándonos ya en la programación
orientada a objetos.
LENGUAJE ORIENTADO A OBJETOS:
Para que un lenguaje pueda considerarse orientado a objetos debe soportar como
mínimo las características de:
-encapsulación
-herencia
-polimorfismo
-enlace dinámico.
LENGUAJE ROBUSTO:
Uno de los problemas más comunes en los lenguajes de programación es la posibilidad
de escribir programas que pueden bloquear el sistema. Algunas veces este bloqueo puede
ser inmediato, pero en otras ocasiones llega a aparecer inesperadamente porque, por
ejemplo, la aplicación accede a zonas de memoria que no estaban siendo ocupadas por
otros programas hasta ese momento. Un ejemplo claro de lenguaje no robusto es C. Al
escribir código en C o C++ el programador debe hacerse cargo de la gestión de memoria
de una forma explícita, solicitando la asignación de bloques a punteros y liberándolos
cuando ya no son necesarios.
En Java, los punteros, la aritmética de punteros y las funciones de asignación y
liberación de memoria (malloc( ) y free( ) ) no existen. En lugar de los punteros se
emplean referencias a objetos, los cuales son identificadores simbólicos. El gestor de
memoria de Java lleva una contabilidad de las referencias a los objetos. Cuando ya no
existe una referencia a un objeto, éste se convierte en candidato para la recogida de basura
(garbage collection).
25
LENGUAJE DE ALTO RENDIMIENTO ( MÚLTIPLES THREADS ):
Una de las características del lenguaje es que soporta la concurrencia a través de
threads. En ocasiones puede interesarnos dividir una aplicación en varios flujos de control
independientes, cada uno de los cuales lleva a cabo sus funciones de manera concurrente.
Cuando los distintos flujos de control comparten un mismo espacio lógico de direcciones,
se denominan threads.
LENGUAJE PORTABLE:
El principal objetivo de los diseñadores de Java, y dado el gran crecimiento de las
redes en los últimos años, fue el de desarrollar un lenguaje cuyas aplicaciones una vez
compiladas pudiesen ser inmediatamente ejecutables en cualquier máquina y sobre
cualquier sistema operativo. Por ejemplo, un programa desarrollado en Java en una
estación de trabajo Sun que emplea el sistema operativo Solaris, debería poderse llevar a
un PC que utilice sistema operativo Windows NT.
LENGUAJE LO MÁS SIMPLE POSIBLE:
Los diseñadores de Java trataron de mantener las facilidades básicas del lenguaje en un
mínimo y proporcionar un gran número de extras con las librerías de clases.
LENGUAJE SEGURO:
Se pretendía construir un lenguaje de programación que fuese seguro, esto es, que no
pudiera acceder a los recursos del sistema de manera incontrolada. Por este motivo se
eliminó la posibilidad de manipular la memoria mediante el uso de punteros y la capacidad
de transformación de números en direcciones de memoria ( tal y como se hace en C )
evitando así todo acceso ilegal a la memoria. Esto se asegura porque el compilador Java
efectúa una verificación sistemática de conversiones.
3.3.7.2. LOS PAQUETES GRÁFICOS DE LAS JFC
3.3.7.2.1. Introducción
Las JFC (Java Foundation Classes) son parte de la API de Java compuesto por clases
que sirven para crear interfaces gráficas visuales para las aplicaciones y applets de Java.
26
Así como Sun presenta estas JFC, Microsoft ha desarrollado otro paquete propio con el
nombre de AFD (Application Foundation Classes).
Las JFC contienen dos paquetes gráficos: AWT y Swing.
•
AWT presenta componentes pesados, que en cada plataforma sólo pueden tener
una representación determinada. Está disponible desde la versión 1.1 del JDK como
java.awt.
•
Swing presenta componentes ligeros, que pueden tomar diferente aspecto y
comportamiento pues lo toman de una biblioteca de clases. Está disponible desde la
versión 1.2 del JDK como javax.swing aunque antes se podían encontrar versiones previas
como com.sun.java. o como java.awt.swing.
B. Modelo de eventos
Tanto AWT como Swing tienen en común un sistema para gestionar los eventos que se
producen al interactuar con el usuario de la interfaz gráfica; su modelo de eventos.
El funcionamiento del modelo de eventos se basa en la gestión de excepciones.
Para cada objeto que represente una interfaz gráfica, se pueden definir objetos
"oyentes" (Listener), que esperen a que suceda un determinado evento sobre la interfaz.
Por ejemplo se puede crear un objeto oyente que esté a la espera de que el usuario pulse
sobre un botón de la interfaz, y si esto sucede, él es avisado, ejecutando determinada
acción.
La clase base para todos estos eventos que se pueden lanzar es la clase AWTEvent
(perteneciente al paquete java.awt). El modelo de eventos de AWT depende del paquete
java.awt.event, que en Swing se amplía con el paquete javax.swing.event.
Existen dos tipos básicos de eventos:
•
Físicos: Corresponden a un evento hardware claramente identificable. Ej: se ha
pulsado una tecla (KeyStrokeEvent).
•
Semánticos: Se componen de un conjunto de eventos físicos, que sucedidos en
un determinado orden tienen un significado más abstracto: El usuario ha elegido un
elemento de una lista desplegable (ItemEvent).
27
C. Subpaquetes de AWT
A continuación se enumeran los paquetes que componen las JFC, así como su
funcionalidad, ordenados por orden de antigüedad. Esto es importante, porque debe de
tenerse en cuenta si se va a utilizar para crear applets, ya que normalmente los
navegadores no soportan la última versión de la API de Java en su propia máquina virtual.
Si queremos que nuestra applet se vea igual en varios navegadores, deberemos de tener
en cuenta qué paquetes podemos utilizar y cuáles no, comprobando la versión de Java que
soportan los navegadores que nos interesen.
a.) Desde la versión 1.0
•
java.awt: Contiene todas las clases básicas de AWT para crear interfaces e
imprimir gráficos e imágenes, así como la clase base para los eventos en componentes:
AWTEvent.
•
java.awt.image: Para crear y modificar imágenes. Utiliza productores de
imágenes, filtros y "consumidores de imágenes". Permite renderizar una imagen mientras
está siendo generada.
b.) Desde la versión 1.1
•
java.awt.datatransfer: Transferencia de datos entre aplicaciones. Permite
definir clases "transferibles" entre aplicaciones, y da soporte al mecanismo del
portapapeles (copiar y pegar).
•
java.awt.event: Modelo de eventos de AWT. Contiene eventos, oyentes y
adaptadores a oyentes.
c.) Desde la versión 1.2
•
java.awt.color: Utilización de colores. Contiene la implementación de una
paleta de colores basada en la especificada por el ICC (Consorcio Internacional de Color).
•
java.awt.dnd: Operaciones de arrastrar y soltar.
•
java.awt.font: Todo lo referente a las fuentes de texto. Soporta fuentes del tipo
True Type, Type 1, Type 1 Multiple Master, y OpenType.
•
java.awt.geom: Aporta clases de Java 2D, para crear objetos en 2 dimensiones,
utilizando geometría plana (elipses, curvas, áreas...).
28
•
java.awt.im: Para utilizar símbolos Japoneses, Chinos o Coreanos.
•
java.awt.image.renderable: Para producir imágenes que sean independientes de
redering (animación).
•
java.awt.print: Para imprimir documentos. Incorpora capacidad para gestionar
diversos tipos de documentos, formatos de página e interactuar con el usuario para
controlar la impresión de trabajos.
D. Subpaquetes de Swing
A continuación se enumeran los paquetes que componen Swing, así como su
funcionalidad:
•
javax.swing: Tiene los componentes básicos para crear componentes ligeros
Swing.
•
javax.swing.border: Para dibujar bordes personalizados en los componentes
Swing.
•
javax.swing.colorchooser: Para utilizar el componente JColorChooser.
•
javax.swing.event: Eventos lanzados por componentes Swing, así como oyentes
para dichos eventos. Extiende los que se encuentran en el paquete AWT java.awt.event.
•
javax.swing.filechooser: Para utilizar el componente JFileChooser.
•
javax.swing.plaf: Permite a Swing utilizar múltiples representaciones. Se utiliza
por aquellos desarrolladores que no pueden crear un nuevo aspecto de interfaz, basado en
los que Swing ya incorpora (como Basic o Metal).
•
javax.swing.plaf.basic: Objetos que utilizan interfaces de aspecto "Basic". Este
aspecto es el que presentan por defecto los componentes Swing. En este paquete se
encuentran gestores de impresión, eventos, oyentes y adaptadores. Se puede crear un
aspecto personalizado de interfaz utilizando este paquete.
•
javax.swing.plaf.metal: Objetos que utilizan interfaces de aspecto "Metal".
•
javax.swing.plaf.multi: Permite a los usuarios combinar aspectos de interfaz,
entre auxiliares y los que existen por defecto.
•
javax.swing.text: Para manejar componentes de texto (modificables o no).
Soporta sintaxis resaltada, edición, estilos...
•
javax.swing.text.html: Contiene la clase HTMLEditorKit, basada en la versión
3.2 de la especificación HTML, y clases para crear editores de texto HTML
•
javax.swing.text.html.parser: Contiene analizadores de texto HTML.
29
•
javax.swing.text.rtf: Contiene la clase RTFEditorKit para crear editores de
documentos en formato RTF (Rich-Text-Format).
•
javax.swing.tree: Para personalizar la forma en que son utilizados los árboles
generados por la clase java.awt.swing.JTree.
•
javax.swing.undo: Permite realizar operaciones de deshacer/rehacer en las
aplicaciones que cree el usuario.
3.3.7.2.2. AWT (Abstract Windowing Toolkit)
A. Introducción
AWT es un conjunto de herramientas GUI (Interfaz Gráfica con el Usuario) diseñadas
para trabajar con múltiples plataformas.
Este paquete viene incluido en la API de Java como java.awt ya desde su primera
versión, con lo que las interfaces generadas con esta biblioteca funcionan en todos los
entornos Java disponibles (incluyendo navegadores, lo que les hace especialmente
eficientes para la creación de applets Java).
En el apartado "VI.3. Ejemplo de creación de una applet" se muestra un breve ejemplo
de cómo utilizar las clases del AWT para crear una applet y una aplicación de Java.
La siguiente figura muestra la jerarquía de clases para las principales clases de AWT:
30
Imagen 7: Jerarquía de las clases de AWT
En este apartado vamos a estudiar algunas de las clases más importantes del AWT, así
como su funcionalidad.
B. Component
Esta clase representa a cualquier objeto que puede ser parte de una interfaz gráfica de
usuario. Es la clase padre de muchas de las clases del AWT.
Su propósito principal es representar algo que tiene una posición y un tamaño, que
puede ser dibujado en la pantalla y que pueda recibir eventos de entrada (que responda a
las interacciones con el usuario).
La clase Component presenta diversos métodos, organizados para cubrir varios
propósitos.
A continuación se explican algunos de ellos.
a.) Tamaño y posición del componente
•
Dimension getSize(); Devuelve la anchura y altura del componente como un
objeto de la clase Dimension, que tiene como campos: width (anchura) y heigth (altura).
•
void setSize(int ancho, int largo); Establece la anchura y altura del componente.
•
Dimension getPreferredSize(); Devuelve el tamaño que este componente
debería tener.
•
void setPreferredSize(); Establece el tamaño que este componente debería
tener.
•
Dimension getMinimumSize(); Devuelve el tamaño mínimo que este
componente debería tener.
•
void setMinimumSize (int ancho, int largo); Establece el tamaño mínimo que
este componente debería tener.
•
Rectangle getBounds(); Devuelve las coordenadas de este componente como un
objeto de la clase Rectangle, que tiene como campos: x, y, width y heigth.
•
void setBounds(int x, int y, int ancho, int largo); Establece las coordenadas de
este componente.
31
b.) Acciones sobre el componente
•
boolean getEnabled(); Comprueba si el componente está o no activo.
•
void setEnabled(boolean); Establece el componente a activo o inactivo.
•
boolean getVisible(); Comprueba si el componente está o no visible.
•
void setVisible(boolean); Establece si el componente está visible o invisible.
•
void paint(Graphics g); Indica al AWT que ha de dibujar el componente g.
•
void repaint(); Indica al AWT que ha de volver a dibujar el componente.
•
void update(Graphics g); Es llamado por AWT cuando se invoca el método
repaint(). Por defecto llama a paint().
c.) Eventos de interacción con el usuario
A su vez hay tres tipos de métodos, para la gestión de eventos mediante el nuevo
modelo de eventos de AWT (desde la versión 1.1).
Hay tres tipos de métodos:
•
void add Tipo_Listener(_Tipo_Listener l); Añade un oyente a la espera de
algún tipo de eventos sobre este componente.
•
void remove_Tipo_Listener(_Tipo_Listener l); Elimina algún oyente que estaba
a la espera de algún tipo de eventos sobre este componente.
•
void
process_Tipo_Event(_Tipo_Event
e);
Procesa
eventos
del
tipo
_Tipo_Event enviándolos a cualquier objeto _Tipo_Listener que estuviera escuchando.
En estos métodos _Tipo_ puede ser cualquiera de los siguientes:
Component, Focus, InputMethod, Key, Mouse, MouseMotion.
C. Container
La clase Container sabe cómo mostrar componentes embebidos (que a su vez pueden
ser instancias de la clase Container).
Algunos de los métodos de la clase Container son:
•
Component add(Component c); Añade un componente al contenedor.
•
void print(Graphics g); Imprime el contenedor.
32
•
void printComponents(Graphics g); Imprime cada uno de los componentes de
este contenedor.
•
LayoutManager
getLayout();
Devuelve
el
gestor
de
impresión
(LayoutManager) asociado a este contenedor, que es el responsable de colocar los
componentes dentro del contenedor.
•
void setLayout(LayoutManager 1); Establece un gestor de impresión para este
componente.
Estos objetos Container tienen un LayoutManager asociado que define la manera en
que van a posicionarse los objetos componentes en su interior.
D. Gestores de impresión
LayoutManager y LayoutManager2 son dos interfaces encargadas de la representación
y posicionamiento en pantalla de componentes AWT.
De estas interfaces se proporcionan cinco implementaciones en AWT. Cada una de
ellas reparte los objetos de una forma particular:
•
BorderLayout: En cinco lugares: Norte, Sur, Este, Oeste y Centro (North,
South, East, West y Center).
•
CardLayout: Permite gestionar varios componentes de los que sólo uno se
visualiza a la vez, permaneciendo los demás invisibles debajo.
•
FlowLayout: De izquierda a derecha horizontalmente en cada línea. Cuando
sobrepasan una línea se comienza a la izquierda de la siguiente.
•
GridLayout: En una tabla en la que todas las casillas tienen el mismo tamaño.
•
GridBagLayout: En una tabla, pero las casillas no tienen que tener el mismo
tamaño.
E. Otras clases
Por supuesto AWT no se limita a estas clases. Dentro de esta biblioteca podemos
encontrar multitud de clases prefabricadas para facilitar el diseño gráfico.
A continuación explicamos algunas de ellas.
a.) Clases contenedoras (hijas de Container)
33
•
Panel: Permite hacer una presentación más avanzada que Container mediante la
combinación con subpaneles o subclases para crear contenedores personalizados. La clase
Applet que sirve para crear applets Java, hereda de esta clase Panel.
•
ScrollPane: Una barra de desplazamiento, horizontal o vertical.
•
Window: Una ventana sin borde.
•
Frame: Una ventana que no tiene borde. Puede tener asociado un objeto
Menubar (una barra de herramientas o barra de menú personalizada).
•
Dialog: Una ventana usada para crear diálogos. Tiene la capacidad de ser modal
con lo que sólo este contenedor recibiría entradas del usuario.
•
Filedialog: Un diálogo que usa el selector de archivos nativo del sistema
operativo.
b.) Clases componentes (hijas directas de Component)
•
Button: Un botón gráfico para el que se puede definir una acción que sucederá
cuando se presione el botón.
•
Canvas: Permite pintar o capturar eventos del usuario. Se puede usar para crear
gráficos o como clase base para crear una jerarquía de componentes personalizados.
•
Checkbox: Soporta dos estados: on y off. Se pueden asociar acciones que se
ejecuten (triggers) cuando el estado cambie.
•
Choice: Menú desplegable de opciones.
•
Label: Cadena de etiqueta en una localización dada.
•
List: Una lista desplegable de cadenas.
•
Scrollbar: Desplegable de objetos Canvas.
•
TextComponent: Cualquier componente que permita editar cadenas de
texto.Tiene dos clases hijas:
•
TextField: Componente de texto consistente en una línea que puede ser usada
para construir formularios.
•
TextArea: Componente para edición de texto de tamaño variable.
F. Eventos de AWT
AWT tiene sus propios eventos, que se explican a continuación.
a.) Eventos físicos
34
Son todos hijos del evento ComponentEvent, que indica algún cambio en un objeto
Component:
•
InputEvent: Se ha producido una entrada del usuario. Tiene como eventos hijos
KeyEvent (pulsación de una tecla) y MouseEvent (acción sobre el ratón).
•
FocusEvent: Avisa al programa de que el componente ha ganado o perdido la
atención (enfoque) del usuario. Esto se deduce de la actividad del usuario (ratón y
teclado).
•
WindowEvent: Avisa al programa de que el usuario ha utilizado uno de los
controles de ventana a nivel del sistema operativo, como los controles de minimizar o
cerrar.
•
ContainerEvent: Se envía cuando se añaden o eliminan componentes a un
contenedor.
•
PaintEvent: Evento especial que señala que el sistema operativo quiere dibujar
de nuevo una parte de la interfaz. Un componente debe sobreescribir el método paint() o el
método update() para gestionar este evento.
b.) Eventos semánticos
Son todos hijos del evento AWTEvent, que es el evento base de la jerarquía de eventos:
•
ActionEvent: Avisa al programa de acciones específicas de componentes como
las pulsaciones de botones.
•
AdjustmenteEvent: Comunica que una barra de desplazamiento ha sido ajustada.
•
ItemEvent: Avisa al programa cuando el usuario interacciona con una elección,
una lista o una casilla de verificación.
•
TextEvent: Avisa cuando un usuario cambia texto en un componente
TextComponent, TextArea o TextField.
•
InputMethodEvent: Avisa que un texto que está siendo creado utilizando un
método de entrada está cambiando (se ha escrito algo más...).
•
InvocationEvent: Este evento ejecuta el método run() en una clase Runnable
cuando es tratado por el thread del despachador (dispatcher) de AWT.
3.3.7.2.3. SWING
A. Introducción
35
El paquete Swing es el nuevo paquete gráfico que ha aparecido en la versión 1.2 de
Java. Está compuesto por un amplio conjunto de componentes de interfaces de usuario que
funcionen en el mayor número posible de plataformas.
Cada uno de los componentes de este paquete puede presentar diversos aspectos y
comportamientos en función de una biblioteca de clases. En la versión 1.0 de Swing, que
corresponde a la distribuida en la versión 1.2 de la API de Java se incluyen tres bibliotecas
de aspecto y comportamiento para Swing:
•
metal.jar: Aspecto y comportamiento independiente de la plataforma.
•
motif.jar: Basado en la interfaz Sun Motif.
•
windows.jar: Muy similar a las interfaces Microsoft Windows 95.
La siguiente imagen muestra una aplicación de ejemplo (adjunta al JDK 1.2) que
muestra las diferentes interfaces para una misma aplicación según se utilice una u otra
biblioteca:
Imagen 8: Diferentes aspectos de una interfaz Swing
Es la nueva clase denominada UiManager la que se encarga del aspecto y
comportamiento de una aplicación Swing en un entorno de ejecución.
En el apartado "VI.3. Ejemplo de creación de una applet" se muestra un breve ejemplo
de cómo utilizar las clases de Swing para crear una aplicación utilizando Swing.
B. Nuevas características
La arquitectura Swing presenta una serie de ventajas respecto a su antecedente AWT:
36
•
Amplia variedad de componentes: En general las clases que comiencen por "J"
son componentes que se pueden añadir a la aplicación. Por ejemplo: JButton.
•
Aspecto modificable (look and feel): Se puede personalizar el aspecto de las
interfaces o utilizar varios aspectos que existen por defecto (Metal Max, Basic Motif,
Window Win32).
•
Arquitectura Modelo-Vista-Controlador: Esta arquitectura da lugar a todo un
enfoque de desarrollo muy arraigado en los entornos gráficos de usuario realizados con
técnicas orientadas a objetos. Cada componente tiene asociado una clase de modelo de
datos y una interfaz que utiliza. Se puede crear un modelo de datos personalizado para
cada componente, con sólo heredar de la clase Model.
•
Gestión mejorada de la entrada del usuario: Se pueden gestionar combinaciones
de teclas en un objeto KeyStroke y registrarlo como componente. El evento se activará
cuando se pulse dicha combinación si está siendo utilizado el componente, la ventana en
que se encuentra o algún hijo del componente.
•
Objetos de acción (action objects): Estos objetos cuando están activados
(enabled) controlan las acciones de varios objetos componentes de la interfaz. Son hijos de
ActionListener.
•
Contenedores anidados: Cualquier componente puede estar anidado en otro. Por
ejemplo, un gráfico se puede anidar en una lista.
•
Escritorios virtuales: Se pueden crear escritorios virtuales o "interfaz de
múltiples documentos" mediante las clases JDesktopPane y JInternalFrame.
•
Bordes complejos: Los componentes pueden presentar nuevos tipos de bordes.
Además el usuario puede crear tipos de bordes personalizados.
•
Diálogos personalizados: Se pueden crear multitud de formas de mensajes y
opciones de diálogo con el usuario, mediante la clase JOptionPane.
•
Clases para diálogos habituales: Se puede utilizar JFileChooser para elegir un
fichero, y JColorChooser para elegir un color.
•
Componentes para tablas y árboles de datos: Mediante las clases JTable y
JTree.
•
Potentes manipuladores de texto: Además de campos y áreas de texto, se
presentan campos de sintaxis oculta JPassword, y texto con múltiples fuentes JTextPane.
Además hay paquetes para utilizar ficheros en formato HTML o RTF.
•
Capacidad para "deshacer": En gran variedad de situaciones se pueden deshacer
las modificaciones que se realizaron.
37
•
Soporte a la accesibilidad: Se facilita la generación de interfaces que ayuden a
la accesibilidad de discapacitados, por ejemplo en Braille.
C. Principales clases
Las clases de Swing se parecen mucho a las de AWT.
Todas las clases explicadas en el apartado "IV.2 AWT" de este tutorial tienen una nueva
versión en Swing con el prefijo J. Así la clase Panel de AWT tiene una clase JPanel en
Swing. Esto se cumple para todas las clases menos para Choice, Canvas, FileDialgog y
ScrollPane.
De hecho todas las clases componentes de Swing (clases hijas de JComponent), son
hijas de la clase Component de AWT.
•
ButtonGroup: Muestra una lista de elementos (JRadioButton) con solo uno
seleccionable. Cada elemento tiene un círculo, que en caso del elemento seleccionado
contendrá un "punto".
•
JToggleButton: Es como un botón normal, pero al ser pinchado por el usuario
queda activado.
•
JProgressBar: Representa una barra de estado de progreso, mediante la que
habitualmente se muestra el desarrollo de un proceso en desarrollo (ejemplo: la instalación
de una aplicación).
•
JTabbedPane: Es una ventana con solapas (la que utiliza Windows). Este
componente había sido muy solicitado.
•
JApplet: Aunque ya existía una clase Applet en AWT, esta nueva versión es
necesaria para crear applets Java que utilicen interfaces Swing.
Por supuesto Swing no se limita a estas clases, sino que posee muchas más con
diversas funcionalidades. Para estudiarlas consulte la documentación del JDK 1.2 de Java.
D. Nuevos gestores de impresión
Swing incorpora nuevos gestores de impresión, ampliando los cinco que AWT
incorporaba. Entre ellos conviene destacar los siguientes:
38
•
BoxLayout: Es similar al FlowLayout de AWT, con la diferencia de que con él
se pueden especificar los ejes (x o y). Viene incorporada en el componente Box, pero está
disponible como una opción en otros componentes.
•
OverlayLayout: Todos los componentes se añaden encima de cada componente
previo.
•
SpringLayout: El espacio se asigna en función de una serie de restricciones
asociadas con cada componente.
•
ScrollPaneLayout: Incorporado en el componente ScrollPane.
•
ViewportLayout: Incorporado en el componente Viewport.
E. JrootPane
La clase JRootPane permite colocar contenido de las applets creadas con la clase
JApplet en un determinado plano de impresión (capa).
Por orden de cercanía al usuario, estas capas son:
•
glassPane: Una capa que abarca toda la parte visible (por defecto no es visible).
•
layeredPane: Una subclase de JComponent diseñada para contener cuadros de
diálogo, menús emergentes y otros componentes que deben aparecer flotando entre el
usuario y el contenido.
•
menubar: Una capa opcional, que si aparece estará anclada en la parte superior.
•
contenPane: La capa en que se dibujará la mayor parte del contenido.
Así pues cada vez que se vayan a añadir componentes a una applet de clase JApplet,
debe añadirse a uno de estas capas. Por ejemplo:
laJApplet.getContentPane().add( unComponente );
F. Nuevos eventos de Swing
Swing incorpora su nuevo conjunto de eventos para sus componentes.
a.) Eventos físicos
Sólo aparecen dos nuevos eventos físicos, descendientes de InputEvent:
39
•
MenuKeyEvent: Un menú de árbol ha recibido un evento de KeyEvent (acción
sobre el ratón).
•
MenuDragMouseEvent: Un menú de árbol ha recibido un evento de
MouseEvent (pulsación de una tecla).
b.) Eventos semánticos
Son todos hijos del evento de AWT AWTEvent, que es el evento base de la jerarquía de
eventos:
•
AncestorEvent: Antecesor añadido desplazado o eliminado.
•
CaretEvent: El signo de intercalación del texto ha cambiado.
•
ChangeEvent: Un componente ha sufrido un cambio de estado.
•
DocumentEvent: Un documento ha sufrido un cambio de estado.
•
HyperlinkEvent: Algo relacionado con un vínculo hipermedia ha cambiado.
•
InternalFrameEvent: Un AWTEvent que añade soporte para objetos
JInternalFrame.
•
ListDataEvent: El contenido de una lista ha cambiado o se ha añadido o
eliminado un intervalo.
•
ListSelectionEvent: La selección de una lista ha cambiado.
•
MenuEvent: Un elemento de menú ha sido seleccionado o mostrado o bien no
seleccionado o cancelado.
•
PopupMenuEvent: Algo ha cambiado en JPopupMenu.
•
TableColumnModelEvent: El modelo para una columna de tabla ha cambiando.
•
TableModelEvent: El modelo de una tabla ha cambiado.
•
TreeExpansionEvent: El nodo de un árbol se ha extendido o se ha colapsado.
•
TreeModelEvent: El modelo de un árbol ha cambiado.
•
TreeSelectionEvent: La selección de un árbol ha cambiado de estado.
•
UndoableEditEvent: Ha ocurrido una operación que no se puede realizar.
G. El patrón de diseño Modelo-Vista-Controlador
Muchos de los componentes Swing están basados en un patrón de diseño denominado
"Modelo-Vista-Controlador".
El concepto de este patrón de diseño se basa en tres elementos:
40
•
Modelo: Almacena el estado interno en un conjunto de clases.
•
Vista: Muestra la información del modelo
•
Controlador: Cambia la información del modelo (delegado).
3.3.8. La elección para el programa.
La elección de JAVA para la realización del programa obedece a varios puntos que ya
hemos mencionado al hablar de sus características más importantes.
En primer lugar la familiaridad del lenguaje. Durante la carrera en la intensificación de
Telemática se estudia Java y se trabaja de forma directa en el lenguaje o indirecta para
otras prácticas mas orientadas a comunicación en red.
Personalmente he trabajado en una beca de prácticas en la que he podido practicar con
el lenguaje o más concretamente en una serie de paquetes orientados a dispositivos
móviles.
El otro punto importante para mi elección es su independencia de la plataforma. La
máquina virtual que podemos instalar en cualquier máquina nos permite trabajar sin
importar en que SO nos encontremos.
En cuanto a la elección de un paquete u otro dentro de los componentes gráficos, he
seguido una práctica bastante habitual a la hora de la realización de interfaces gráficos en
Java. Por una parte he empleado AWT para que se encargue de toda la gestión de eventos
y por otra SWING para añadir algunos componentes más sofisticados.
41
Descargar