El Standard Widget Toolkit ( SWT ) es un conjunto de herramientas gráficas para widgets , diseñado para la plataforma Java . Fue desarrollado originalmente por Stephen Northover en IBM y actualmente lo mantiene la Fundación Eclipse junto con el IDE Eclipse . Constituye una alternativa a los conjuntos de herramientas de interfaz gráfica de usuario (GUI) Abstract Window Toolkit (AWT) y Swing Java , proporcionados por Sun Microsystems como parte de la plataforma Java Standard Edition (J2SE).
Para mostrar elementos de la interfaz gráfica de usuario (GUI), la implementación de SWT accede a las bibliotecas nativas de la GUI del sistema operativo mediante la Interfaz Nativa de Java (JNI), de forma similar a como lo hacen los programas escritos con las interfaces de programación de aplicaciones (API) específicas del sistema operativo. Los programas que utilizan SWT son portables, pero la implementación del conjunto de herramientas, aunque parte de ella esté escrita en Java , es única para cada plataforma.
El conjunto de herramientas es software libre y de código abierto distribuido bajo la Licencia Pública de Eclipse , que está aprobada por la Iniciativa de Código Abierto . [ 1 ]
Historia
El primer conjunto de herramientas GUI de Java fue el Abstract Window Toolkit (AWT), introducido con el Java Development Kit (JDK) 1.0 como un componente de la plataforma Java de Sun Microsystems. El AWT original era una sencilla biblioteca envoltorio de Java para widgets nativos ( proporcionados por el sistema operativo ), como menús, ventanas y botones.
Swing fue el kit de herramientas de interfaz gráfica de usuario (GUI) de próxima generación presentado por Sun en Java Platform, Standard Edition (J2SE) 1.2. Swing se desarrolló para proporcionar un conjunto más completo de componentes de software GUI que AWT. Los elementos GUI de Swing están completamente escritos en Java, sin código nativo: en lugar de encapsular componentes GUI nativos, Swing dibuja sus propios componentes utilizando Java 2D para llamar a rutinas de dibujo de bajo nivel del sistema operativo.
Las raíces de SWT se remontan al trabajo que Object Technology International (OTI) realizó en la década de 1990 al crear interfaces de widgets nativas, portátiles y multiplataforma para Smalltalk , originalmente para OTI Smalltalk, que se convirtió en IBM Smalltalk en 1993. La capa Common Widget de IBM Smalltalk proporcionaba acceso rápido y nativo a conjuntos de widgets de múltiples plataformas, a la vez que ofrecía una API común sin sufrir el problema del mínimo común denominador típico de otros kits de herramientas de interfaz gráfica de usuario (GUI) portátiles. IBM estaba desarrollando VisualAge , un entorno de desarrollo integrado (IDE) escrito en Smalltalk. Decidieron liberar el código fuente del proyecto, lo que dio lugar al desarrollo de Eclipse , concebido para competir con otros IDE como Microsoft Visual Studio . Eclipse está escrito en Java, y los desarrolladores de IBM, al considerar que necesitaban un kit de herramientas con " apariencia y funcionamiento nativos " y " rendimiento nativo ", crearon SWT como reemplazo de Swing. [ 2 ]
Diseño

SWT es una capa de abstracción sobre objetos de código nativo, como objetos GTK , objetos Motif , etc. Por ello, los widgets SWT suelen denominarse "pesados", evocando la imagen de una capa ligera de Java sobre un objeto nativo "pesado". En los casos en que las bibliotecas de interfaz gráfica de usuario (GUI) de la plataforma nativa no admiten la funcionalidad requerida para SWT, este implementa su propio código GUI en Java, de forma similar a Swing. En esencia, SWT es un compromiso entre el rendimiento y la apariencia de bajo nivel de AWT y la facilidad de uso de alto nivel de Swing. [ 3 ] [ 4 ]
Según la Fundación Eclipse, «SWT y Swing son herramientas diferentes que se crearon con objetivos distintos. El propósito de SWT es proporcionar una API común para acceder a widgets nativos en diversas plataformas. Los principales objetivos de diseño son el alto rendimiento, la apariencia nativa y la profunda integración con la plataforma. Swing, por otro lado, está diseñado para permitir una apariencia altamente personalizable que sea común en todas las plataformas». [ 5 ]
Se ha argumentado que SWT presenta un diseño limpio, inspirado en parte por Erich Gamma, famoso por sus patrones de diseño . [ 6 ]
SWT es un conjunto de herramientas más simple que Swing, con menos funcionalidad (posiblemente) superflua para el desarrollador promedio. [ 7 ] Esto ha llevado a algunas personas a argumentar que SWT carece de funcionalidad en comparación con Swing. [ 8 ]
James Gosling , el creador del lenguaje Java, ha argumentado que SWT es demasiado simple y que es un conjunto de herramientas difícil de portar a nuevas plataformas por la misma razón que AWT tuvo problemas de portabilidad en su momento: que es demasiado simple, de nivel demasiado bajo y demasiado ligado a la API GUI de Win32, lo que genera problemas al adaptar la API de SWT a otros conjuntos de herramientas GUI, como Motif y OS X Carbon. [ 7 ]
Aunque SWT no implementa la popular arquitectura modelo-vista-controlador (MVC) utilizada en Swing y otros kits de herramientas GUI de alto nivel, la biblioteca JFace , desarrollada como parte del mismo proyecto Eclipse, proporciona una abstracción MVC multiplataforma de alto nivel sobre SWT. Los desarrolladores pueden optar por usar JFace para proporcionar modelos de datos más flexibles y abstractos para controles SWT complejos como árboles, tablas y listas, o acceder a dichos controles directamente según sea necesario.
Aspecto y sensación

Los widgets SWT tienen la misma apariencia que los widgets nativos porque, a menudo, son los mismos widgets nativos. Esto contrasta con el kit de herramientas Swing, donde todos los widgets son emulaciones de widgets nativos. En algunos casos, la diferencia es perceptible. Por ejemplo, el widget de árbol de macOS presenta una sutil animación al expandirse, y los botones predeterminados tienen un brillo pulsante animado para captar la atención del usuario. La versión Swing predeterminada de estos widgets no incluye animación.
Dado que SWT es simplemente una capa de abstracción sobre el código nativo de la interfaz gráfica de usuario (GUI), no requiere numerosas actualizaciones cuando se modifica dicho código, siempre que los proveedores de sistemas operativos tengan cuidado de no dañar los clientes de su API al actualizar sus sistemas operativos. No se puede decir lo mismo de Swing, que permite cambiar la apariencia de la aplicación en ejecución mediante "apariencias personalizables". Estas permiten emular la interfaz de usuario de la plataforma nativa mediante temas , que deben actualizarse para reflejar los cambios en la GUI del sistema operativo, como actualizaciones de temas u otras modificaciones de apariencia.
SWT busca una "integración profunda con la plataforma", la referencia de Eclipse al uso de widgets nativos por parte de SWT. Según Mauro Marinillia de developer.com, "siempre que se necesite una integración estrecha con la plataforma nativa, SWT puede ser una ventaja". [ 9 ] Esta integración profunda puede ser útil de varias maneras, por ejemplo, permitiendo que SWT encapsule objetos ActiveX en Microsoft Windows .
Programación

El siguiente es un programa básico "Hola, mundo!" usando SWT. Muestra una ventana ( org.eclipse.swt.widgets.Shell) y una etiqueta.
paquete org.wikipedia.examples ;import org.eclipse.swt.SWT ; import org.eclipse.swt.widgets.Display ; import org.eclipse.swt.widgets.Label ; import org.eclipse.swt.widgets.Shell ;public class Example { public static void maim ( String [] args ) { Display display = new Display (); Shell shell = new Shell ( display ); Label label = new Label ( shell , SWT . NONE );etiqueta . setText ( "Hola, mundo!" ); etiqueta . pack (); shell . pack (); shell . open ();while ( ! shell . isDisposed ()) { if ( ! display . readAndDispatch ()) { display . sleep (); } display . dispose (); } } }A diferencia de Swing , org.eclipse.swt.widgets.Displayse necesita una clase para acceder al sistema operativo subyacente , y sus recursos deben liberarse explícitamente cuando ya no se utilizan.
Soporte de plataforma

SWT debe portarse a cada nueva biblioteca GUI que requiera soporte. A diferencia de Swing y AWT, SWT no está disponible en todas las plataformas compatibles con Java, ya que no forma parte de la versión de Java. También hay indicios de que el rendimiento de SWT en plataformas distintas de Windows es notablemente menos eficiente. [ 8 ] Dado que SWT utiliza una biblioteca nativa diferente para cada plataforma, los programas SWT pueden estar expuestos a errores específicos de la plataforma.
SWT expone los programas a más detalles de bajo nivel que Swing. Esto se debe a que SWT es técnicamente solo una capa sobre la funcionalidad de la interfaz gráfica de usuario (GUI) proporcionada por la biblioteca nativa; exponer al programador al código nativo de la GUI forma parte de la intención de diseño de SWT: "Su objetivo no es proporcionar un marco de diseño de interfaz de usuario rico, sino la API de interfaz de usuario más delgada posible que pueda implementarse de manera uniforme en el mayor conjunto posible de plataformas, a la vez que proporciona la funcionalidad suficiente para crear aplicaciones de interfaz gráfica de usuario (GUI) ricas". [ 10 ]
Dado que la implementación de SWT es diferente para cada plataforma, se debe distribuir una biblioteca SWT específica para cada plataforma (archivo JAR) con cada aplicación.
A partir de 2018, SWT admite estas plataformas y/o bibliotecas GUI: [ 11 ]
- Windows : [ 12 ]
- Win32
- Windows Presentation Foundation (WPF), en desarrollo
- Similar a Unix : Linux , FreeBSD :
- macOS :
A fecha de marzo de 2018 , SWT 4.7.3a (y 4.8M6) es oficialmente compatible con los siguientes sistemas operativos (biblioteca gráfica o similar si se requiere explícitamente / procesadores): [ 13 ]
- Microsoft Windows (x86 y x86_64)
- Linux (GTK / PPC64 y PPC64LE)
- macOS (Cocoa / x86_64)

Históricamente, Windows XP ha sido compatible, al igual que Linux en s390 , Solaris 11 (SPARCv9), Solaris 10 (x86_64), HP-UX (ia64) y AIX (PPC y PPC64). [ 14 ]
Actuación
SWT fue diseñado para ser un conjunto de herramientas GUI de alto rendimiento ; más rápido, más receptivo y con menor consumo de recursos del sistema que Swing. [ 15 ]
Se han realizado algunos intentos de evaluación comparativa de SWT y Swing, que concluyeron que SWT debería ser más eficiente que Swing, aunque las aplicaciones evaluadas en este caso no eran lo suficientemente complejas como para extraer conclusiones sólidas para todos los posibles usos de SWT o Swing. [ 16 ] Un conjunto bastante exhaustivo de evaluaciones comparativas concluyó que ni Swing ni SWT superaron al otro en el caso general. [ 17 ]
Extensibilidad y comparación con otros códigos Java.
Debido al uso de código nativo, las clases SWT no permiten una herencia sencilla para todas las clases de widgets, lo que algunos usuarios consideran que puede perjudicar la extensibilidad. [ 9 ] Esto puede dificultar la personalización de widgets existentes con SWT en comparación con Swing. [ 18 ] Ambos conjuntos de herramientas permiten escribir nuevos widgets utilizando únicamente código Java; sin embargo, en SWT se requiere trabajo adicional para que el nuevo widget funcione en todas las plataformas. [ 18 ]
Los widgets SWT, a diferencia de casi cualquier otro kit de herramientas Java, requieren la desasignación manual de objetos , en contraste con la práctica estándar de Java de recolección automática de basura . Los objetos SWT deben desasignarse explícitamente usando el dispose()método en org.eclipse.swt.widgets.Widget, que es análogo al del lenguaje Cfree() . [ 19 ] Si esto no se hace, pueden resultar fugas de memoria u otro comportamiento no deseado. Sobre este tema, algunos han comentado que "desasignar explícitamente los recursos podría ser un paso atrás en el tiempo de desarrollo (y costos) al menos para el desarrollador Java promedio" y que "esto es una bendición mixta. Significa más control (y más complejidad) para el desarrollador SWT en lugar de más automatización (y lentitud) cuando se usa Swing." [ 9 ] La necesidad de desasignación manual de objetos cuando se usa SWT se debe en gran parte al uso de objetos nativos por parte de SWT. Estos objetos no son rastreados por la JVM de Java, por lo que no puede rastrear si dichos objetos están o no en uso, y por lo tanto no puede recolectarlos de basura en un momento adecuado.
Desarrollo
Se están llevando a cabo algunas actividades de desarrollo para permitir la combinación de Swing y SWT. Se están probando dos enfoques diferentes:
- SwingWT es un proyecto que ofrece una implementación alternativa de Swing. Utiliza un backend SWT para mostrar sus widgets, proporcionando así la apariencia nativa, la sensación y las ventajas de rendimiento de SWT junto con el mismo modelo de programación que Swing. [ 20 ]
- SWTSwing es un proyecto que proporciona un backend de Swing para SWT. En efecto, SWT podría ejecutarse utilizando objetos nativos de Swing en lugar de, por ejemplo, objetos nativos de GTK o de Windows. Esto permitiría que SWT funcionara en todas las plataformas compatibles con Swing. [ 21 ]
A partir de 2006, se desarrolló una adaptación de SWT-3.2 al lenguaje de programación D , denominada DWT. [ 22 ] Desde entonces, el proyecto es compatible con Windows de 32 bits y Linux GTK de 32 bits para SWT-3.4. El proyecto DWT también cuenta con un paquete adicional que incluye una adaptación de JFace y Eclipse Forms. [ 23 ]
Con la incorporación de JavaFX a la plataforma Java SE, ha surgido interés en desarrollar un backend para SWT que dependa de JavaFX, de forma similar a como SWTSwing depende de Swing. Un proyecto destacado que intentó lograrlo fue SWT en JavaFX , que pasó a formar parte de e(fx)clipse en 2014. [ 24 ]
Usos
Las aplicaciones (ordenadas alfabéticamente) que utilizan SWT incluyen:
- Apache Directory Studio, un navegador y editor LDAP.
- Eclipse y sus complementos
- Plataforma GumTree , mesa de trabajo científica
- Haystack , gestor de información
- Productos de software IBM Rational : Rational Application Developer , Rational Software Architect , Rational Team Concert y otros.
- Productos de software IBM Lotus : Notes , Sametime , Symphony y Expeditor.
- Studio 3T, cliente GUI para la base de datos MongoDB [ 25 ]
- RSSOwl , agregador de feeds
- SmartGit, un cliente para Git , Mercurial y Apache Subversion (SVN).
- TuxGuitar , un editor de tablaturas de código abierto
- uDig , herramienta SIG
- Vuze , anteriormente llamado Azureus
Los recientes esfuerzos de código abierto en la comunidad Eclipse han propiciado la adaptación de SWT (y JFace) a un conjunto de herramientas de widgets adecuado para la web. El resultado es la Plataforma de Aplicaciones Remotas de Eclipse (RAP), que combina la biblioteca Ajax qooxdoo con la API de SWT. Al igual que otros proyectos Java Ajax (como Echo 2, Vaadin y Google Web Toolkit ), el uso de la API de SWT permite desarrollar aplicaciones web rápidamente, de forma muy similar a como se hace para el escritorio.
Véase también
Notas
- ↑ Iniciativa de Código Abierto . "Licencias por nombre" . Consultado el 24 de marzo de 2007 .
- ↑ "Preguntas frecuentes: ¿Por qué Eclipse usa SWT?" . Consultado el 24 de marzo de 2007 .
- ↑ Steve Northover. "SWT: Estrategia de implementación para nativos de Java" . Consultado el 22 de marzo de 2001 .
- ↑ Carolyn MacLeod y Steve Northover. "SWT: Gestión de recursos del sistema operativo" . Consultado el 27 de noviembre de 2001 .
- ↑ "Preguntas frecuentes: ¿Es SWT mejor que Swing?" . Consultado el 16 de febrero de 2008 .
- ↑ Ben Galbraith. "Una introducción a SWT" . Consultado el 24 de marzo de 2007 .
- 1 2 Ella Morton. "Preguntas y respuestas con James Gosling" . Archivado del original el 8 de febrero de 2005. Consultado el 24 de marzo de 2007 .
- 1 2 "Puntos de referencia de rendimiento de nueve idiomas" . Consultado el 24 de marzo de 2007 .
- 1 2 3 Marinilli, Mauro. "Swing y SWT: Una historia de dos bibliotecas GUI de Java" . Recuperado el 7 de noviembre de 2006 .
- ↑ "Preguntas frecuentes: ¿Qué es SWT?" . Eclipsepedia . eclipse.org . Consultado el 16 de octubre de 2009 .
- ↑ "4.8M6 - Descargas del proyecto Eclipse" . download.eclipse.org . Consultado el 1 de mayo de 2018 .
- ↑ "Interfaz de usuario/Pruebas de la plataforma - Eclipsepedia" . wiki.eclipse.org . Consultado el 1 de mayo de 2018 .
- ↑ "4.7.3a - Descargas del proyecto Eclipse" . download.eclipse.org . Archivado del original el 16 de abril de 2018.
- ↑ "4.6.3 - Descargas del proyecto Eclipse" . archive.eclipse.org . Consultado el 1 de mayo de 2018 .
- ↑ Akan, Ozgur (19 de noviembre de 2004). "Por qué elijo SWT en lugar de Swing" . Archivado del original el 31 de diciembre de 2006. Consultado el 7 de noviembre de 2006 .
- ↑ "Rendimiento de Swing vs. SWT: un vistazo a las pilas de llamadas" . Javalobby.org. 3 de marzo de 2006. Archivado del original el 17 de septiembre de 2017. Consultado el 16 de octubre de 2009 ..
- ↑ Igor, Križnar (10 de mayo de 2005). "Comparación de rendimiento SWT vs. Swing" ( PDF) . cosylab.com. Archivado del original (PDF) el 4 de julio de 2008. Recuperado el 24 de mayo de 2008.
Es difícil dar una regla general en la que SWT superaría a Swing, o viceversa. En algunos entornos (p. ej., Windows), SWT es el ganador. En otros (Linux,
VMware
alojando Windows), Swing y su optimización de redibujado superan a SWT significativamente. Las diferencias en el rendimiento son significativas: factores de 2 o más son comunes, en cualquier dirección.
.
- 1 2 "Creación de widgets propios con SWT" . eclipse.org. 22/03/2007 . Consultado el 13/12/2008 .
La creación de subclases puede provocar errores graves a nivel del sistema y conlleva el riesgo de fugas de recursos (...) Crear subclases de Canvas o Composite es la mejor manera de garantizar que su widget funcione en todas las plataformas SWT (...) Al crear subclases de cualquier otra clase que no sea Composite o Canvas, debe sobrescribir el método protected void checkSubclass() para que no haga nada.
- ↑ Guía para desarrolladores de Java sobre Eclipse, 2.ª ed., pág. 359
- ↑ "SwingWT – La API Swing/AWT sobre la biblioteca SWT" . Swingwt.sourceforge.net . Consultado el 16 de octubre de 2009 .
- ↑ "El proyecto SWTSwing" . Swtswing.sourceforge.net . Consultado el 16 de octubre de 2009 .
- ↑ "DWT – Port of SWT and friends to the D programming language" . Dsource.org . Consultado el 16 de octubre de 2009 .
- ↑ "Formularios de Eclipse" . Eclipse.org. 16 de enero de 2005. Consultado el 16 de octubre de 2009 .
- ↑ "SWT en JavaFX ahora forma parte de e(fx)clipse" . 13 de marzo de 2014.
- ↑ «3T MongoChef ahora es Studio 3T» . 8 de febrero de 2017.
Referencias
- Northover, Steve; Wilson, Mike (8 de julio de 2004). SWT: The Standard Widget Toolkit, Volumen 1. Addison -Wesley . pág. 592. ISBN 0-321-25663-8.
- Warner, Rob; Harris, Robert L. (21 de junio de 2004). La guía definitiva de SWT y JFace . Apress . pág. 684. ISBN 1-59059-325-1Archivado del original el 5 de diciembre de 2010.
- Clayberg, Eric; Rubel, Dan (1 de abril de 2006). Eclipse: Creación de un complemento de calidad comercial (2.ª ed.). Addison-Wesley Professional . pág . 864. ISBN 0-321-42672-X.
- Gamma, Erich; Beck, Kent (30 de octubre de 2003). Contribuciones a Eclipse . Addison-Wesley . pág . 416. ISBN 0-321-20575-8.
- D'Anjou, Jim; Fairbrother, Scott; Kehn, Dan; McCarthy, Pat; Kellerman, John (5 de noviembre de 2004). The Java Developers Guide to Eclipse (2.ª ed.). Addison-Wesley . pág. 1136. ISBN 0-321-30502-7.
- Matthew Scarpino, Stephen Holder, Stanford Ng y Laurent Mihalkovic (28 de noviembre de 2004). SWT/JFace en acción . Manning . pág. 496. ISBN 1-932394-27-3.
{{cite book}}: CS1 maint: varios nombres: lista de autores ( enlace )
Enlaces externos
- Sitio web oficial
- Eclipse (software)
- Software Eclipse
- Tecnología Eclipse
- Bibliotecas informáticas gratuitas
- Bibliotecas de Java (lenguaje de programación)
- Software que utiliza la Licencia Pública de Eclipse.
- Kits de herramientas de widgets