¿Cuál es la diferencia entre Swing y AWT?
¿Alguien puede explicarme cuál es la diferencia entre Swing y AWT?
¿Hay algún caso en el que AWT sea más útil/recomendado de usar que el swing o viceversa?
AWT es una interfaz Java para el código GUI del sistema nativo presente en su sistema operativo. No funcionará igual en todos los sistemas, aunque lo intenta.
Swing es una GUI más o menos pura de Java. Utiliza AWT para crear una ventana del sistema operativo y luego pinta imágenes de botones, etiquetas, texto, casillas de verificación, etc., en esa ventana y responde a todos los clics del mouse, entradas de teclas, etc., decidiendo por sí mismo qué hacer. en lugar de dejar que el sistema operativo se encargue de ello. Por lo tanto, Swing es 100% portátil y es igual en todas las plataformas (aunque se puede personalizar y tiene una "apariencia conectable" que puede hacer que se vea más o menos como se verían las ventanas y los widgets nativos).
Estos son enfoques muy diferentes de los kits de herramientas GUI y tienen muchas consecuencias. Una respuesta completa a su pregunta intentaría explorarlos todos. :) Aquí hay un par:
AWT es una interfaz multiplataforma, por lo que aunque utiliza el sistema operativo subyacente o el kit de herramientas GUI nativo para su funcionalidad, no proporciona acceso a todo lo que esos kits de herramientas pueden hacer. Es posible que los widgets AWT avanzados o más nuevos que puedan existir en una plataforma no sean compatibles con otra. Es posible que las funciones de los widgets que no son iguales en todas las plataformas no sean compatibles o, peor aún, que funcionen de manera diferente en cada plataforma. La gente solía invertir mucho esfuerzo para que sus aplicaciones AWT funcionaran de manera consistente en todas las plataformas; por ejemplo, pueden intentar realizar llamadas a código nativo desde Java.
Debido a que AWT utiliza widgets GUI nativos, su sistema operativo los conoce y se encarga de colocarlos uno frente al otro, etc., mientras que los widgets Swing son píxeles sin sentido dentro de una ventana desde el punto de vista de su sistema operativo. Swing maneja el diseño y el apilamiento de sus widgets. La mezcla de AWT y Swing no es compatible y puede generar resultados ridículos, como botones nativos que oscurecen todo lo demás en el cuadro de diálogo en el que residen porque todo lo demás se creó con Swing.
Debido a que Swing intenta hacer todo lo posible en Java además de las rutinas gráficas muy crudas proporcionadas por una ventana GUI nativa, solía incurrir en una gran pérdida de rendimiento en comparación con AWT. Desafortunadamente, esto hizo que Swing tardara en ponerse de moda. Sin embargo, esto se ha reducido drásticamente en los últimos años debido a JVM más optimizadas, máquinas más rápidas y (supongo) optimización de las partes internas de Swing. Hoy en día, una aplicación Swing puede ejecutarse lo suficientemente rápido como para ser útil o incluso ágil, y casi indistinguible de una aplicación que utiliza widgets nativos. Algunos dirán que tomó demasiado tiempo llegar a este punto, pero la mayoría dirá que vale la pena.
Finalmente, es posible que también desee consultar SWT (el conjunto de herramientas GUI utilizado para Eclipse y una alternativa tanto a AWT como a Swing), que es una especie de retorno a la idea de AWT de acceder a widgets nativos a través de Java.
La diferencia base que ya todos mencionaron es que uno es pesado y otro liviano . Permítanme explicarles, básicamente lo que significa el término peso pesado es que cuando se utilizan los componentes awt, el sistema operativo genera el código nativo utilizado para obtener el componente de vista , es por eso que la apariencia cambia de un sistema operativo a otro. Mientras que en los componentes swing, es responsabilidad de JVM generar la vista de los componentes. Otra afirmación que vi es que swing está basado en MVC y awt no.