Para crear una aplicación con GUI “ventanas” usando JAVA: Elegir entre AWT, SWING, o SWT:

La descripción de cada una:

* AWT (Abstract Windowing Toolkit) fue el primer acercamiento de Java al desarrollo de interfaces gráficas (GUI). Permite mostrar ventanas con controles variados como cajas de texto y botones. Las GUIs con AWT son fáciles de desarrollar, y usan los controles propios del sistema operativo en el que se programa, por ejemplo, en windows aparecerá una ventana de texto típica de windows, en Mac, una ventana con sus respectivas características, etc. Pero algunos sistema operativos difieren de otros en el conjunto de controles, por lo que Sun solo implementó los controles comunes a los sistemas operativos a los que se dirige Java, que por lo general, es un conjunto reducido y simple respecto de los realmente disponibles.

* Swing fue introducido posteriormente motivado por la creciente demanda de los desarrolladores de tener una implementación no nativa, esto es, independiente de la plataforma, de controles de más alto nivel como árboles, tablas y texto. Con esto se gana en funcionalidad, pero con el inconveniente de hacer las aplicaciones Java con Swing demasiado específicas de Java. Sun añadió una emulación look and feel para aproximar el aspecto de las aplicaciones swing al sistema operativo sobre las que se ejecuta, pero no abarca las nuevas versiones de los sistemas operativos (Windows Me, 2000 en adelante, por ejemplo). Además, al estar implementado sobre Java y no de forma nativa en el sistema operativo, los tiempos de respuesta de las interfaces Swing son sensiblemente más lentas que las nativas.

El Standard Widget Toolkit (SWT) ha sido creado por IBM como reemplazo de la Java Abstract Windowing Toolkit (AWT) y Swing. De manera más precisa, el SWT es un conjunto de widgets para desarrolladores Java que ofrece una API portable y una integración muy ligada con la interfaz gráfica de usuario nativa al sistema operativo de cada plataforma. Así, cada plataforma debe adaptar el SWT para los gráficos nativos suyos. Esto parece que entra en contradicción con la filosofía de Java de ser independiente de la plataforma, pero ofrece ventajas en la unicidad del aspecto del GUI diseñado sea cual sea la plataforma sobre la que se ejecute. Hasta el momento los entornos a los que se ha portado SWT son Windows, Linux GTK, Linux Motif, Solaris Motif, AIX Motif, HPUX Motif, Photon QNX, y Mac OS X. Los gráficos en Java han tenido una larga y exitosa evolución: empezó con el básico AWT, viéndose ampliado por el potente paquete Swing. Actualmente se está empezando a imponer SWT. Describamos brevemente la evolución de cada uno de ellos:

* SWT (Standard Widget Toolkit) ofrece un conjunto de elementos que hacen uso directo de los controles nativos a través de la Interfaz Nativa de Java (JNI). Si los controles no están ofrecidos por el sistema operativo, SWT crea los suyos propios según las necesidades. Esto significa que se necesita código nativo para poder funcionar en cada sistema operativo, pero IBM ha sido capaz de adaptar SWT a un buen número de sistemas. Es muy destacable la importancia de SWT porque es el entorno gráfico de desarrollo que viene con Eclipse y debe ser utilizado en los plug-ins desarrollados para el mismo. Eclipse es una herramienta de desarrollo altamente potente, libre distribución, código abierto y adaptable a cualquier lenguaje de programación. Para saber más sobre Eclipse visítese su página http://www.eclipse.org.

SWT se compone esencialmente de tres elementos:

  • 1. En el nivel inferior se encuentra una librería nativa que interacciona directamente con el sistema operativo. Es la denominada JNI, la Java Native Interface. Al ser la parte más dependiente de la plataforma, debe ser portada en función de la misma.
  • 2. Por encima de la anterior capa está la clase Display, la interfaz por la que el SWT se comunica con la interfaz gráfica.
  • 3. El nivel superior lo forma la clase Shell, representa el tipo de ventana de más alto nivel y que es donde se alojan los widgets, controles o componentes. El shell es la parte de la interfaz que está directamente controlada por el sistema de ventanas del sistema operativo. La clase Shell es hija de la clase Display, en cuyo caso es la ventana o marco principal a partir de la cual se construye el resto de la interfaz, o bien hija de otro shell, siendo el ejemplo más común las ventanas de diálogo.

Para mostrar lo anterior, estudiemos el siguiente ejemplo “Hola mundo”:

HolaMundo.java

 import org.eclipse.swt.widgets.*;
public class HolaMundo { public static void main(String[] args) {
 Display display = new Display();
 Shell shell = new Shell(display);
 shell.setText("Hola Mundo");
 shell.setSize(200, 100);
 shell.open();
 while (!shell.isDisposed()) {
 if (!display.readAndDispatch())
display.sleep();
 }
 display.dispose();
}
}

Conforme a lo explicado anteriormente, identificamos en el código las siguientes partes: Display display = new Display(); Representa la pantalla y su conexión con el sistema gestor de ventanas del sistema operativo en el que nos encontramos.

El objeto display contendrá a su vez una lista de objetos shell. Shell shell = new Shell(display); shell.open();

El shell equivale a una ventana abierta sobre la pantalla. Es la clase raíz de los componentes y controles.

Prestemos atención al siguiente fragmento:

while (!shell.isDisposed()) { if (!display.readAndDispatch()) display.sleep(); }

Es el denominado bucle de eventos. Ha de ser programado explícitamente y su función es detectar y ejecutar eventos. Es la forma en que liberamos la CPU para otros menesteres ajenos a la interfaz gráfica cuando no se han producido eventos a los que dedicar ciclos de proceso para atender.

Por último observamos que los recursos del sistema han de ser liberados por el programador: display.dispose(); La liberación del objeto display conlleva la finalización de todos los shells hijos contenidos.

Este artículo sólo pretende ser una breve introducción a los fundamentos de SWT. Para conseguir las librerías SWT y más información el mejor lugar de inicio es http://www.eclipse.org/swt.

Este artículo fue republicado desde su original: http://www.gui.uva.es/~laertes/ Ahora mi ejemplo de HolaMundo.java

import org.eclipse.swt.*;
import org.eclipse.swt.widgets.*;
import org.eclipse.swt.layout.*;
public class HolaMundo {
public static void main(String[] args) {
Display display = new Display();
Shell shell = new Shell(display);
shell.setText("HelloWorld");
FillLayout layout = new FillLayout();
layout.type = SWT.VERTICAL; shell.setLayout(layout);
Label label1 = new Label(shell, SWT.CENTER);
Label label2 = new Label(shell, SWT.LEFT);
label1.setText("Hola es mi programa jejje...");
label2.setText("mi ventana esta aquí");
shell.open(); while (!shell.isDisposed()) if (!display.readAndDispatch()) display.sleep(); }
}

Referencias: