Swing, es una biblioteca grafica para Java, que forma parte de las
JFC. Incluye widgets para interfaz grafica de usuario tales como cajas
de texto, botones, desplegables y tablas. Los widgets de swing,
proporcionan componentes mas sofisticados que la anterior AWT. Ademas,
como esta escrita puramente en Java, corre igual en todas (varias)
plataformas, contrariamente al AWT, que se ata al sistema de ventanas
de la plataforma subyacente. Desde J2SE 1.2, los widgets de AWT fueron
ampliamente superados por aquellos del kit de herramientas Swing.
Ademas de proveer un conjunto mas rico de widgets UI, Swing dibuja sus
propios widgets (usando Java 2D para llamar a las subrutinas de bajo
nivel en el subsistema de graficos local) en lugar de confiar en el
modulo de interfaz de usuario de alto nivel del sistema operativo.
Swing suministra la opcion de usar un aspecto nativo o de plataforma
cruzada para la aplicacion.
Swing es una plataforma independiente, Model-View-Controller Gui
framework para Java. Sigue un simple modelo de programacion por hilos,
y posee las siguientes principales caracteristicas:
- Independencia de plataforma: Swing es una plataforma independiente
en ambos terminos de su expresion (java), y de su implementacion (no-
nativa interpretacion universal de widgets).
- Extensibilidad: Swing es una arquitectura altamente particionada que
permite la utilizacion de diferentes pluggins en especificos
interfaces de diferentes frameworks: Los usuarios pueden proveer sus
propias implementaciones modificadas para sobreescribir las
implementaciones por default. En general, los usuarios de swing puende
extender el framework para: extender clases existentes (framework);
proveyendo alternativas de implementacion para elementos esenciales.
- Orientado a componentes: Swing es un framework basado en
componentes. La diferencia entre objetos y componentes es un punto
bastante sutil: concisamente, un componente es un objeto de buena
conducta con un patron conocido y especificado caracteristico del
comportamiento.
- "Customizable": Dado el modelo de representacion programatico del
framework de swing, el control fino de los detalles de representacion
de los componentes es posible en swing. Como patron general, la
representacion visual de los componentes de Swing, es una composicion
de un set de elementos estandar, como ser 'border', 'inset',
decorciones, etc. Tipicamente, los usuarios pueden modificar un
comoponente estandar de Swing (como ser un JTable) asignando
especificos Borders, Colors, Backgrounds, etc., como las propiedades
del componente. El componente de la base usara entonces estas
propiedades para determinar los apropiados interpretes para pintar en
varios aspectos.
- Configurable: La confianza pesada de Swing en mecanismos runtime y
los patrones indirectos de la composicion, permiten que responda en el
runtime a los cambios fundamentales en sus ajustes. Por ejemplo, una
aplicacion basada en Swing puede cambiar su "look and feel" en runtime
(desde MacOS look and feel hasta Windows XP look and feel). Mas alla,
los usuarios pueden proveer su propia implementacion look and feel,
que permitira cambios uniformes en el look and feel existente en las
aplicaciones Swing sin efectuar ningun cambio al codigo de aplicacion.
- Lightweight UI: La magia de la flexibilidad de configuracion de
Swing, es tambien debido al hecho de que no utiliza los controles del
GUI del OS nativo del host para la representacion, pero usa "algo" de
sus controles programados, con el uso de los apis 2D de Java.
De lo expresado anteriormente, puedo sacar como conclusion los
diferentes aspectos:
-Tiene todas las caracteristicas de AWT.
-Un conjunto de componentes de mayor nivel.
-Diseño en Java, no depende del codigo nativo
Ventajas:
-El diseño en Java puro posee menos limitaciones de plataforma.
-El desarrollo de componentes Swing es mas activo.
-Los componentes de Swing soportan mas caracteristicas.
Desventajas:
-La mayoria de los browsers no incluyen clases swing, por lo que es
necesario utilizar un plugin java.
-Los componentes swing generalmente son mas lentos y presentan mas
problemas debido a que
estan hechos en Java puro, y suelen presentar problemas relacionados
con video en varias plataformas.
-No siempre lucen igual que en el sistema donde fueron diseñados.
SWT (Standard Widget Toolkit), es un kit de herramientas widgets de la
plataforma Java originalmente desarrollado por IBM y mantenido
actualmente por la Fundacion Eclipse en tandem con la IDE Eclipse.Es
una alternativa al AWT y Swing Java GUI toolkits provistos por Sun
Microsystems como parte del estandar Java.
SWT esta escrito en Java. Para mostrar elementos GUI, la
implementacion de SWT toma acceso a las librerias nativas GUI del
sistema operativo usando JNI (Java Native Interface)de un modo similar
a aquellos programas escritos usando APIs del sistema operativo. Los
programas que llaman a SWT son portables, pero la implementacion del
toolkit, a pesar que se escribe en java, es unico para cada
plataforma.
- Extensibilidad: Debido al uso del codigo nativo, las clases de SWT
no tienen en cuenta la herencia facil para todas las clases widget, y
algunas personas consideran que esto puede dañar la extensibilidad. La
modificaion de widgets existentes puede ser mas dificil de alcanzar si
se usa SWT que si se usase Swing. Ambos toolkits soportan nuevos
widgets usando solamente codigo Java.
- Soporte para plataformas: SWT no necesesariamente corre bajo cada
plataforma con soporte Java, porque SWT usa "cubiertas" alrededor de
especificas librerias de la plataforma para mostrar en pantalla
elementos GUI. Puesto que SWT usa una diferente biblioteca nativa para
cada plataforma, los desarrolladores de SWT se exponen a los bugs de
cada plataforma, neutralizando la ventaja de Java, "Escribir una vez,
correr en cualquier lado", requeriendo escribir el codigo especifico
para cada plataforma. SWT es, entonces referido como "Escribir una
vez, testear en cualquier lado", similar a lo que pasa en lenguajes
como C.
- Look and Feel: Los widgets de SWT a menudo tienen el mismo "look and
feel" que los widgets nativos, porque muchas veces suelen ser los
mismos.Esto es el contraste del toolkit de swing, donde los widgets
son copias cercanas a los widgets nativos. En algunos casos la
diferencia es notable.
- Perfomance: SWT esta diseñado para ser un toolkit de GUI de "alto
rendimiento" ("high perfomance"); mas rapido, mas responsivo y mas
claro en el uso de recursos de sistema, que con Swing. Hubo una
referencia frustrada de SWT y Swing, que concluyo que SWT es mas
eficiente que Swing, aunque en este caso los problemas referenciados
no eran lo bastante complejos para hacer notar las diferencias solidas
para todos los usos de SWT o Swing.
Ventajas:
-Al ser diseñado con high perfomance, y el hecho que los widgets
tengan el mismo look and feel de los widgets nativos, la velocidad a
la hora de implementar tecnicas y aplicaciones, es muy favorable.
Desventajas:
-No esta escrito puramente en Java, lo que no lo hace lo
suficientemente portable.
-Tiene mas limitaciones con el desarrollo e implementacion de widgets
no-nativos.