3.2. Swing

 

3.2.1. Introducción a Swing

Anteriormente se ha visto una descripción de los controles AWT para construir aplicaciones visuales. En cuanto a estructura, no hay mucha diferencia entre los controles proporcionados por AWT y los proporcionados por Swing: éstos se llaman, en general, igual que aquéllos, salvo que tienen una "J" delante; así, por ejemplo, la clase Button de AWT pasa a llamarse JButton en Swing , y en general la estructura del paquete javax.swing es la misma que la que tiene java.awt.

Pero yendo más allá de la estructura, existen importantes diferencias entre los componentes Swing y los componentes AWT:

 

3.2.2. Características específicas de Swing

Resumen de controles

Los controles en Swing tienen en general el mismo nombre que los de AWT, con una "J" delante. Así, el botón en Swing es JButton , la etiqueta es JLabel , etc. Hay algunas diferencias, como por ejemplo JComboBox (el equivalente a Choice de AWT), y controles nuevos. Vemos aquí un listado de algunos controles:

JComponent La clase padre para los componentes Swing es JComponent , paralela al Component de AWT. 
Botones
Se tienen botones normales (JButton), de verificación (JCheckBox), de radio (JRadioButton), etc, similares a los Button, Checkbox de AWT, pero con más posibilidades (se pueden añadir imágenes, etc). 
Etiquetas
Las etiquetas son JLabel, paralelas a las Label de AWT pero con más características propias (iconos, etc). 
Cuadros de texto
Las clases JTextField y JTextArea representan los cuadros de texto en Swing, de forma parecida a los TextField y TextArea de AWT.
Listas

Las clases JComboBox y JList se emplean para lo mismo que Choice y List en AWT. 
Diálogos y ventanas
Las clases JDialog (y sus derivadas) y JFrame se emplean para definir diálogos y ventanas. Se tienen algunos cuadros de diálogo específicos, para elegir ficheros (JFileChooser ), para elegir colores (JColorChooser), etc. 
Menús
Con JMenu, JMenuBar, JMenuItem, se construyen los menús que se construian en AWT con Menu, MenuBar y MenuItem.

 

Gestores de disposición y modelo de eventos

Los gestores de disposición de Swing son los mismos que los vistos en AWT.
El modelo de eventos también es  el mismo que el visto en AWT.

Otras características

Swing ofrece otras posibilidades, que se comentan brevemente:


Ejemplo: Vemos el aspecto de algunos componentes de Swing, paralelo al visto en el tema de AWT:


Código

 

Ejemplo: Vemos un ejemplo de uso de iconos y temporizadores (como icono se emplea esta imagen): Código

 

3.2.3. Un ejemplo con Forte

Vamos a construir con Forte el ejemplo visto en el tema de AWT:

Figura 1. Ejemplo de aplicación

Para crear el formulario pinchamos en File - New - GUI Forms - JFrame . Luego le damos un nombre (EjemploForte, por ejemplo), e ignoramos el resto del proceso (luego pide elegir campos, métodos a sobreescribir, etc).

En la pestaña GUI Editing podemos modificar el formulario, mediante la ventana Form Editor. En ella aparecen:

Figura 2. Editor de formularios en Forte

Seguimos los pasos:

Figura 3. Paso 1 de la construcción del ejemplo con Forte

Figura 4. Paso 2 de la construcción del ejemplo con Forte

 

3.3. Applets

Los ejemplos vistos hasta ahora son aplicaciones, puesto que son instancias de la clase Frame o JFrame, y por tanto son ventanas que pueden ejecutarse independientemente.

Un applet es una aplicación normalmente corta (aunque no hay límite de tamaño), cuya principal funcionalidad es ser accesible a un servidor Internet (una aplicación que pueda visualizarse desde un navegador).

La forma de definir un applet es muy similar a la definición de una aplicación, salvo por algunas diferencias:

El appletviewer es un navegador mínimo distribuido con Java, que espera como argumento un fichero HTML, que contendrá una marca indicando el código que cargará el appletviewer :
appletviewer <fichero HTML>
El código necesario para poder cargar un applet en una página HTML es:
<HTML>
  <BODY>
  ...
  <APPLET CODE = nombre_prog.class WIDTH = 300 HEIGHT = 100>
  </APPLET>
  ...
  </BODY>
</HTML>
Donde se indican el fichero .class compilado del applet, la anchura y altura. Este código se coloca en un fichero HTML y puede verse desde cualquier navegador que soporte Java, o con el programa appletviewer .

La clase Applet tiene unos métodos predefinidos para controlar los applets:

También se deben tener en cuenta los métodos:
Por ejemplo, si queremos dibujar una línea en el área del applet, ponemos en su método paint:
public void paint (Graphics g)
{
    g.drawLine(...);
}
Más adelante veremos con más detalle cómo dibujar con Java.

3.3.1. Applets Swing

La única diferencia entre los applets construidos en AWT y los construidos con Swing es que éstos heredan de la clase JApplet en lugar de la clase Applet. Pero se tiene el inconveniente de que actualmente sólo la utilidad appletviewer está preparada para ejecutar applets de Swing con Java 1.2 o posteriores. Para el resto de navegadores deberemos contar con el Java Plug-in 1.1.1, que contiene la versión 1.0.3 de Swing . El resto de la estructura de los applets es la misma que para AWT.

Ejemplo: Vemos el ejemplo anterior convertido en applet. Puede verse aquí el código y aquí la página HTML con el applet.