Algunos ejemplos de Conversión

Esta sección proporciona las versiones AWT y Swing de varios programas de ejemplo y habla sobre aspectos interesantes de la conversión:

Convertir ButtonDemoApplet

El primer ejemplo de conversión AWT a Swing es un simple applet que contiene tres botones. Si has leído las sección de los componentes AWT o Swing, el programa te será familiar.

Aquí tenemos dos imágenes. La primera muestra la versión AWT del applet ejecutándose y la segunda la versión Swing.

Versión AWT

Versión Swing

Habrás observado que los programas tienen un aspecto diferente.

  1. Los tres botones tienen un borde diferente.
  2. El Applet usa diferentes fuentes para el Texto.
  3. Los botones en el applet Swing tienen iconos y texto.
  4. Los botones en el applet Swing muestran el mnemónico de teclado.
  5. El applet Swing es más grande.

Las primeras dos diferencias existen simplemente por que el AWT y el aspecto y comportamiento Java usado en el programa swing dibujan los botones de forma diferente y tienen diferente fuente por defecto. El aspecto y comportamiento Java es el aspecto y comportamiento que los programas Swing usan a menos que el usuario o el programador especifiquen uno diferente.

Las diferencias 3 y 4 son poeque cuando se convirtió el código nosotros elegimos aprovecharnos de la característica de los botones Swing no soportadas por los botones AWT: imágenes y mnemónicos.

La diferencia final es un efecto colateral de las otras cuatro. Si nuestro programa es una pplet, debemos recordad modificar la etiqueta <APPLET> para ajustar cualquier cambio de tamaño en nuestro programa.

Aunque el aspecto de los programas pueda ser diferente, el comportamiento es el mismo. Cuando el usuario pulsa el botón izquierdo, se desactiva el botón central y el propio botón izquierdo, y activa el botón derecho. Cuando el usuario pulsa el botón derecho, se desactiva a sí mismo y activa los botones central e izquierdo.

La siguiente tabla enlaze el código fuente completo y un fichero HTML que contiene una etiqueta <APPLET> de ejemplo, para cada versión del progra,a. Compara el código de la etiqueta <APPLET> para ver las diferencias entre los dos programas

  Código fuente Etiqueta <APPLET>*
AWT ButtonDemoApplet.java ButtonDemoApplet.html
Swing ButtonDemoApplet.java
left.gif
middle.gif
LEFT.gif
ButtonDemoApplet.html
* Observa que si tu navegador no está configurado para ejecutar programas 1.1 o swing, visitar los ficheros .html listados en la tabla producirá errores. Nosotros proporcionamos los ficheros para que puedas ver las etiquetas de los applet. Puedes usar shift-click para descargar los ficheros

Convertir AnimatorApplication

AnimatorApplication es una plantilla para programas de animación. Esta implementación particular "anima" una cadena cambiándola periódicamente. El programa puede ser fácilmente modificado para animar imágenes de la misma manera.

Esta sección discute dos soluciones diferentes para convertir el programa de animación. La primera solución utiliza una aproximación minimalista -- el código se cambia sólo lo necesario para que el programa funcione con Swing. La segunda solución es más completa -- cambia el código para ajustar las diferencias de la forma en que dibujan los programas AWT y Swing y se aprovecha de las nuevas clases Swing.

La clase AnimatorApplication del AWT desciende de Frame. El método paint de frame usa drawString para dibujar una cadena en el frame. Un thread periódicamente se despierta, cambia la cadena al siguiente valor, y redibuja el frame.

Ambas versiones Swing de la clase AnimatorApplication descienden de JFrame.

La versión minimalista del programa dibuja de la misma dorma que los hacía la versión del AWT -- llamando al método drawString. Sin embargo, en Swing, el código de dibujo pertenece a un método llamado paintComponent. Además, como JFrame tiene un panel de contenido, el dibujo echo en su método paintComponent no tiene efecto ( el panel de contenido se dibujará sobre el). Por eso el código de dibujo tiene que moverse fuera de JFrame. En su lugar, el programa define una subclase de JPanel, AnimappPanel, para hacer el dibujado, y sa un ejemplar de AnimappPanel como el panel de contenido del JFrame.

La segunda solución es más completa. En lugar de crear una subclase de JPanel para dibujar la cadena, esta solución usa un JLabel, que está especialmente diseñado para dibujar cadenas. Además, la segunda solución usa la clase Timer de Swing en lugar de usar un Thread que duerme periódicamente.

Aquí están las tres versiones diferentes para compararlas:

  Código fuente
AWT AnimatorApplication.java
Versión Swing Minimalista AnimatorApplication.java
Versión completa de Swing AnimatorApplicationTimer.java


Ozito