Applets Swing
Ramiro Lago (Octubre 2005)
Introducción
AWT fue la herramienta de las versiones 1.0 y 1.1 para crear un GUI. Pero el
apresuramiento y su arquitectura de pares hace que no sea muy robusto y fiable. La arquitectura en
pares significa que cada componente gráfico (lista, botón, etc) tenía que llamar a su componente
par, es decir, a su componente nativo que interactua con el sistema operativo. El manejo de los
pares esta oculto al programador dentro de la clase Component. Por el contrario cada
componente de Swing (libreria disponible a partir de la versión 1.2) está desparejado o la relación
con su par es muy ligera. En Swing cada componente está escrito en Java puro, no hay casi
interacciones con el sistema.
Diferencias fundamentales con AWT
La primera diferencia es que la clase del applet Swing se llama JApplet,
que hereda de Applet.
Otra diferencia importante es que en los JApplet hay que añadir los componentes gráficos
(JComponent) al Panel raíz (JRootPane). En AWT el componente se podía añadír al
propio applet:
- En AWT (this es el propio Applet): this.add( mi_boton )
- En Swing (this es el JApplet):
this.getContentPane().add( mi_boton )
La misma idea se aplica a los administradores de diseño, paneles, componentes, etc. Cuando se
tienen que añadir o cambiar se mandan mensajes al panel raíz, no al applet:
Container contenedor = getContentPane();
contenedor.setLayout( new FlowLayout() );
contenedor.add(etiqueta_titulo);
A continuación puede ver un diagrama de clases. No está completo (por ejemplo, de JComponent
heredan bastantes clases más):
Solucionar problemas de despliegue de applets Swing
Para los applets Swing hay un inconveniente:
las últimas versiones del navegador Explorer no dan soporte a versiones de Java superiores a la 1.1.
¿Cómo se soluciona? Hay dos posibilidades:
- Ir al sitio de SUN para descargar
una versión actualiza del plug-in de JRE (Java Run Time Edition)
- Hacer que la página que invoca al Applet detecte si el navegador del usuario
admite la versión necesaria y si no la admite se descarga dicha versión del JRE. Todo el
proceso es automático.
Este segundo caso tiene la dificultad aparente de crear una página que detecte la
versión y haga la descarga automática. Decimos "aparente" porque el asunto es mucho más
fácil de lo que parece. Lo más cómodo es realizar dos pasos:
- Crear la página clásica, como si estuviéramos utilizando un Applet de la versión 1.1, con
las palabras básicas CODEBASE, etc (este primer paso lo puede realizar el IDE automáticamente,
por ejemplo JBuilder)
- Llamar a HtmlConverter.exe (viene normalmente en la carpeta bin del JDK) para
que convierta la página clásica en una página que hace el trabajo de "detectar JRE y descargar"
el JRE adecuado. HTMLConverter convierte la página clásica en una nueva página que tendrá
la etiqueta OBJECT (la página clásica se guarda en otro directorio, no se elimina):
<OBJECT
classid = "clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"
codebase = "http://java.sun.com/products/plugin/autodl/jinstall-1_4-windows-i586.cab#Version=1,4,0,0"
WIDTH = "400" HEIGHT = "300" NAME = "TestApplet" ALIGN = "middle" VSPACE = "0" HSPACE = "0" >
....
Algunos ejemplos
Un sencillo applet de ejemplo. Tiene botones,
listas y un área de edición. En el caso de la lista (JList) se puede ver el uso
sencillo del patrón modelo-vista. Tanto la lista como el área de edición
utilizan scrolls.
Un applet que usa un JTable (grid). Un ejemplo interesante del patrón
modelo-vista. Hemos creado una clase especial para el modelo de datos.
Visualizando imágenes.El applet tiene un combo donde aparecen
los nombres de las imágenes que se pueden seleccionar. Las imágenes se descargan desde un archivo JAR
y se registran en un vector. La imagen seleccionada aparece en un JLabel.
Acceso a base de datos con JDBC. El applet accede
mediante SELECT a una tabla de una base de datos (local o remota) y muestra el resultado en un JTable.
El modelo de datos de la JTable utiliza un cursor (ResultSet). La vista utiliza un JTabbedPane.
Un layout de Swing: BoxLayout
Panel que genera de forma automática formularios. Si el lector se ha
cansado de realizar formularios para aplicaciones o applets, si se ha hartado del trabajo repetitivo
que esto implica, entonces puede estar interesado por un panel que recibe de forma parametrizada los
componentes del formulario. Del trabajo sucio se encarga el panel.
Las restricciones de seguridad de un applet.
Los applets tienen fuertes restricciones de seguridad. No pueden acceder fuera de SU espacio
de almacenamiento; por ejemplo, los applets normalmente se almacenan en un servidor remoto y
se ejecutan en el puesto cliente, en este caso no podrán acceder al espacio de
almacenamiento (disco) del cliente. Por lo misma razón un applet local no puede acceder a una
base de datos remota. En este capítulo se explicarán dichas restricciones en general, referidas
a cualquier applet cuando trabaja contra recursos locales. La solución es sencilla (¡y no
hay ninguna necesidad de programar!).
Volver al índice