Kit de herramientas de ventana abstracta

Abstract Window Toolkit (AWT) es la biblioteca de ventana GUI independiente de la plataforma original (kit de herramientas Widget) del lenguaje Java . AWT ahora es parte de Java Foundation Classes (JFC), una API estándar para implementar una GUI en un programa Java.

Además, AWT es la biblioteca GUI estándar para algunos perfiles de Java ME . Por ejemplo, los perfiles de configuración de dispositivos conectados requieren el tiempo de ejecución de Java en los teléfonos móviles para admitir AWT.

Historia

Cuando Sun Microsystems lanzó Java por primera vez en 1995, los widgets de AWT proporcionaron una fina capa de abstracción sobre la interfaz de usuario nativa central . Por ejemplo, crear una casilla de verificación AWT hace que AWT llame directamente a una subrutina nativa de nivel inferior que crea la casilla de verificación. Sin embargo, una casilla de verificación en Microsoft Windows no es lo mismo que una casilla de verificación en Mac OS o varias versiones de Unix . Algunos desarrolladores prefieren este modelo porque proporciona un alto grado de conformidad con el conjunto de herramientas de la ventana principal y una integración perfecta con las aplicaciones nativas. En otras palabras, un programa GUI escrito con AWT parece una aplicación nativa de Microsoft Windows cuando se ejecuta en Windows y, al mismo tiempo, se parece a una aplicación nativa de Apple Macintosh cuando se ejecuta en una Mac, etc. Sin embargo, a algunos desarrolladores no les gusta este modelo porque prefieren que sus aplicaciones tengan el mismo aspecto en todas las plataformas.

En J2SE 1.2 , los widgets AWT han sido reemplazados en gran medida por los de Swing . Además de proporcionar un conjunto más rico de elementos de la interfaz de usuario, Swing dibuja sus propios widgets (usando Java 2D para llamar a las rutinas del subsistema de gráficos locales de bajo nivel ) en lugar de confiar en el módulo de interfaz de usuario de alto nivel del sistema operativo. Swing proporciona la capacidad de usar un sistema de "aspecto y funcionamiento" que usa el "aspecto y funcionamiento" nativo de la plataforma o un aspecto y funcionamiento multiplataforma ("Aspecto y funcionamiento de Java") que tiene el mismo aspecto en todas las plataformas. Sin embargo, Swing usa AWT para interactuar con el sistema de ventanas nativo.

Arquitectura

AWT proporciona dos niveles de API :

AWT también proporciona aplicaciones con algunas funciones de alto nivel:

Ni AWT ni Swing son intrínsecamente seguros para subprocesos . Por lo tanto, el código que actualiza la GUI o maneja eventos debe ejecutarse en el subproceso de envío de eventos EDT) .  El no hacerlo puede resultar en un interbloqueo o una condición de carrera. Para resolver este problema, una clase de utilidad permite que las aplicaciones ejecuten controladores de eventos de interfaz "pesados" en el subproceso de procesamiento de eventos. SwingWorker

Mezcla de componentes AWT y Swing

Comenzando con Java 6#Java SE 6 Update 10 , mezclar componentes Swing y widgets AWT básicos a menudo tenía efectos secundarios no deseados, con widgets AWT que aparecían encima de los widgets Swing, independientemente de su orden de apilamiento específico . La razón de este problema es que la arquitectura de renderizado de los dos kits de herramientas de widgets es muy diferente, a pesar de que Swing tomó prestados los contenedores pesados ​​de nivel superior de AWT [1] .

A partir de Java 6#Java SE 6 Update 12 , es posible mezclar widgets de Swing y AWT sin problemas de orden de apilamiento.

Implementación

Dado que AWT es un puente hacia la interfaz de usuario nativa subyacente, implementarlo en un nuevo sistema operativo puede ser un gran trabajo, principalmente para un conjunto de widgets que requieren que se desarrollen pares nativos desde cero para cada uno de los widgets de AWT.

Simultáneamente con el desarrollo de Java, comenzó a desarrollarse el proyecto Caciocavallo . Su objetivo es proporcionar API de Java basadas en OpenJDK para facilitar la escritura de implementaciones de AWT para nuevos sistemas operativos [2] . Java2D [3] se utiliza para construir la interfaz . Todas las modificaciones necesarias están incluidas en el JDK desde OpenJDK 7 [4] .

Véase también

Notas

  1. Fowler, Amy Mezcla de componentes ligeros y pesados ​​(enlace descendente) . Sun Microsystems (1994). Consultado el 17 de diciembre de 2008. Archivado desde el original el 1 de mayo de 2012. 
  2. Torre, Mario PROPUESTA FINAL: Backends de GUI portátiles (enlace descendente) (2 de marzo de 2008). Consultado el 7 de septiembre de 2008. Archivado desde el original el 1 de mayo de 2012. 
  3. Kennke, Roman Cacio Swing AWT peers (3 de septiembre de 2008). Consultado el 21 de abril de 2013. Archivado desde el original el 29 de abril de 2013.
  4. ¿Cuánto se ha empujado río arriba? (enlace no disponible) . openjdk.java.net (20 de septiembre de 2009). — « Ya no necesita esos parches, con el último impulso de FontManager, todo está en sentido ascendente ahora, así que solo use el repositorio de Cacio, es completamente autónomo. ". Consultado el 7 de marzo de 2010. Archivado desde el original el 1 de mayo de 2012. 

Enlaces