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:

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:

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:


<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