Respuestas:
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 intente.
Swing es una GUI de Java más o menos pura. 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 sus clics del mouse, entradas de teclas, etc., decidiendo por sí mismo qué hacer en lugar de dejar que el sistema operativo lo maneje. Por lo tanto, Swing es 100% portátil y es el mismo en todas las plataformas (aunque es personalizable y tiene un "aspecto y estilo conectables" que puede hacer que se vea más o menos como se verían las ventanas y widgets nativos).
Estos son enfoques muy diferentes a los kits de herramientas de la GUI y tienen muchas consecuencias. Una respuesta completa a su pregunta trataría de explorarlos todos. :) Aquí hay una pareja:
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. Los widgets AWT avanzados o más nuevos que pueden existir en una plataforma pueden no ser compatibles con otra. Es posible que no se admitan las características de los widgets que no son las mismas en todas las plataformas, o peor aún, podrían funcionar de manera diferente en cada plataforma. La gente solía invertir mucho esfuerzo para que sus aplicaciones AWT funcionen de manera consistente en todas las plataformas; por ejemplo, pueden intentar hacer llamadas a código nativo desde Java.
Debido a que AWT usa widgets de GUI nativos, su sistema operativo los conoce y maneja poniéndolos 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 tus widgets. La combinación de AWT y Swing es altamente incompatible y puede conducir a resultados ridículos, como botones nativos que ocultan 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, aparte de las rutinas gráficas muy crudas proporcionadas por una ventana GUI nativa, solía incurrir en una penalización de rendimiento en comparación con AWT. Desafortunadamente, esto hizo que Swing tardara en ponerse al día. 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) la 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 rápida, 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 kit de herramientas GUI utilizado para Eclipse, y una alternativa tanto a AWT como a Swing), que es un retorno a la idea de AWT de acceder a Widgets nativos a través de Java.
La diferencia básica que ya todos mencionaron es que uno es pesado y el otro es ligero . Permítanme explicar, básicamente, lo que significa el término peso pesado es que cuando usa los componentes awt, el sistema operativo genera el código nativo utilizado para obtener el componente de vista , por eso la apariencia cambia de un sistema operativo a otro. Donde, como en los componentes de swing, es responsabilidad de JVM generar la vista de los componentes. Otra afirmación que vi es que el swing está basado en MVC y awt no.
Swing vs AWT . Básicamente, AWT fue lo primero y es un conjunto de componentes de interfaz de usuario pesados (lo que significa que son envoltorios para los objetos del sistema operativo), mientras que Swing se construyó sobre AWT con un conjunto más rico de componentes livianos.
Cualquier trabajo serio de UI de Java se realiza en Swing, no en AWT, que se usó principalmente para applets.
En cuanto a cuándo AWT puede ser más útil que Swing:
Varias consecuencias resultan de esta diferencia entre AWT y Swing.
AWT es una capa delgada de código en la parte superior del sistema operativo, mientras que Swing es mucho más grande. Swing también tiene una funcionalidad mucho más rica. Con AWT, debe implementar muchas cosas usted mismo, mientras que Swing las tiene incorporadas. Para un trabajo intensivo en GUI, AWT se siente muy primitivo para trabajar en comparación con Swing. Debido a que Swing implementa la funcionalidad GUI en sí misma en lugar de depender del sistema operativo host, puede ofrecer un entorno más rico en todas las plataformas en las que se ejecuta Java. AWT es más limitado en el suministro de la misma funcionalidad en todas las plataformas porque no todas las plataformas implementan los mismos controles de la misma manera.
Los componentes Swing se denominan "ligeros" porque no requieren un objeto de sistema operativo nativo para implementar su funcionalidad. JDialog
y JFrame
son de peso pesado, porque tienen un compañero. Por lo tanto, los componentes como JButton
,
JTextArea
etc., son livianos porque no tienen un sistema operativo similar.
Un par es un widget proporcionado por el sistema operativo, como un objeto de botón o un objeto de campo de entrada.
Columpio:
AWT:
AWT 1. AWT ocupa más espacio en la memoria 2. AWT depende de la plataforma 3. AWT requiere el paquete javax.awt
columpios 1. Swing ocupa menos espacio en la memoria 2. El componente Swing es independiente de la plataforma 3. Swing requiere el paquete javax.swing