Juego de herramientas de widgets estándar (SWT)

El juego de herramientas de widgets estándar (SWT) es un kit de utilidades de widgets para los desarrolladores de Java que proporciona una API transportable y una sólida integración con la plataforma de la GUI del SO nativo subyacente.

Muchas de las tareas de programación de bajo nivel de la UI se manejan en capas superiores de la plataforma Eclipse. Por ejemplo, los códigos XML del archivo plugin.xml de las contribuciones de la UI especifican el contenido de los menús y de la barra de herramientas sin que haga falta ninguna programación de SWT. Además, los visores y las acciones de JFace proporcionan implementaciones para las interacciones comunes entre las aplicaciones y los widgets. Sin embargo, es importante conocer la arquitectura y los conceptos de diseño subyacentes de SWT para entender cómo funciona el resto de la plataforma.

Portabilidad e integración de la plataforma

Un aspecto común en el diseño del juego de herramientas de widgets es la relación entre los juegos de herramientas transportables y la integración de la plataforma. El kit AWT (Abstract Window Toolkit) Java proporciona widgets integrados en la plataforma para widgets de bajo nivel, como los de listas, texto y botones, pero no proporciona acceso a componentes de nivel más alto de la plataforma, como son los árboles y el texto enriquecido. Esto impone a los desarrolladores de aplicaciones una situación que podría calificarse de "mínimo denominador común": solo pueden utilizar los widgets que están disponibles en todas las plataformas.

El juego de herramientas de Swing intenta solucionar este problema con implementaciones no nativas de widgets de alto nivel, como árboles, tablas y texto. Esto proporciona una gran cantidad de funciones, pero las aplicaciones desarrolladas en Swing mantienen sus diferencias. Las capas de emulación del aspecto de la plataforma sirven de ayuda para que las aplicaciones tengan parecido con la plataforma, pero la interacción del usuario es demasiado distinta para no pasar desapercibida. Esto dificulta la utilización de los juegos de herramientas emulados para construir aplicaciones que compiten con las aplicaciones con envoltura desarrolladas específicamente para la plataforma de un OS concreto.

SWT soluciona este problema definiendo una API portable común que se incluye en todas las plataformas soportadas, e implementando dicha API en cada plataforma mediante widgets nativos siempre que sea posible. Esto permite al juego de herramientas reflejar inmediatamente cualquier cambio en el aspecto de la GUI de OS subyacente, sin dejar de mantener un modelo de programación coherente en todas las plataformas.

SWT resuelve el problema del "mínimo denominador común" de distintas maneras:

Coherencia con la plataforma

La integración de una plataforma no es tan solo cuestión del aspecto. Una integración estrecha incluye la capacidad de interaccionar con las características nativas del escritorio, como las de arrastrar y soltar, para integrarlas con las aplicaciones del escritorio del SO y para utilizar los componentes desarrollados con modelos de componentes del SO, como ActiveX de Win32.

Solo para WindowsEl soporte ActiveX de SWT está explicado en el artículo Soporte ActiveX en SWT.

La coherencia también se logra en el propio código proporcionando una implementación que resulte familiar al desarrollador del SO nativo. En lugar de ocultar las diferencias del SO en código C nativo o de intentar construir capas transportables y no transportables en la implementación de Java, SWT proporciona en Java implementaciones aparte y distintas para cada plataforma.

Una regla de implementación importante es que los nativos en C se correlacionan biunívocamente con las llamadas al SO. Un programador de Windows deberá reconocer inmediatamente la implementación del juego de herramientas de SWT en Windows, porque utiliza nativos que se correlacionan directamente con las llamadas del sistema utilizadas en C. Ninguno de los aspectos "más sorprendentes de la plataforma" queda oculta en el código C. Un desarrollador de plataformas puede inspeccionar el código y saber exactamente qué llamadas de la plataforma ha ejecutado el juego de herramientas. Esto simplifica mucho la depuración. Si se produce una anomalía al llamar a un método nativo, el hecho de llamar a la API de la plataforma con los mismos parámetros del código C producirá la misma anomalía.  (Encontrará este tema más desarrollado en Estrategia de implementación de SWT para nativos Java).

Copyright IBM Corporation y otros 2000, 2003.