El Window Toolkit Abstract ( AWT ) es Java 's original, dependiente de la plataforma de ventanas , gráficos , y la interfaz de usuario Widget Toolkit , que precede oscilación . El AWT es parte de Java Foundation Classes (JFC), la API estándar para proporcionar una interfaz gráfica de usuario (GUI) para un programa Java. AWT es también el kit de herramientas de la GUI para varios perfiles de Java ME . Por ejemplo, los perfiles de configuración de dispositivos conectados requieren tiempos de ejecución de Java en teléfonos móviles para admitir el kit de herramientas de la ventana abstracta.
Historia
Cuando Sun Microsystems lanzó Java por primera vez en 1995, los widgets AWT proporcionaron un ligero nivel de abstracción sobre la interfaz de usuario nativa subyacente. Por ejemplo, la creación de una casilla de verificación de AWT haría que AWT llamara directamente a la subrutina nativa subyacente que creó una casilla de verificación. Sin embargo, una casilla de verificación en Microsoft Windows no es exactamente lo mismo que una casilla de verificación en Mac OS o en los distintos tipos de Unix . Algunos desarrolladores de aplicaciones prefieren este modelo porque proporciona un alto grado de fidelidad al kit de herramientas de ventanas nativas subyacentes 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, pero el mismo programa parece una aplicación nativa de Apple Macintosh cuando se ejecuta en una Mac, etc. Sin embargo, a algunos desarrolladores de aplicaciones no les gusta este modelo porque prefieren que sus aplicaciones se vean exactamente iguales en todas las plataformas.
En J2SE 1.2 , el kit de herramientas Swing reemplazó en gran medida a los widgets de AWT. Además de proporcionar un conjunto más rico de widgets de UI, Swing dibuja sus propios widgets (utilizando Java 2D para llamar a subrutinas de bajo nivel en el subsistema de gráficos local) en lugar de depender del módulo de interfaz de usuario de alto nivel del sistema operativo. Swing ofrece la opción de utilizar el "look and feel" de la plataforma nativa o un look and feel multiplataforma (el "Java Look and Feel") que luce igual en todos los sistemas de ventanas.
Arquitectura
El AWT proporciona dos niveles de API :
- Una interfaz general entre Java y el sistema nativo, que se utiliza para ventanas , eventos y administradores de diseño . Esta API es el núcleo de la programación de la GUI de Java y también la utilizan Swing y Java 2D . Contiene:
- La interfaz entre el sistema de ventanas nativo y la aplicación Java;
- El núcleo del subsistema de eventos GUI ;
- Varios administradores de diseño ;
- La interfaz para los dispositivos de entrada como el mouse y el teclado ; y
- Un
java.awt.datatransfer
paquete para usar con el Portapapeles y Arrastrar y soltar .
- Un conjunto básico de widgets GUI como botones, cuadros de texto y menús. También proporciona la interfaz nativa de AWT , que permite que las bibliotecas de renderizado compiladas en código nativo se dibujen directamente en una superficie de dibujo de
Canvas
objetos de AWT .
AWT también pone a disposición de las aplicaciones algunas funciones de nivel superior, como:
- Acceso a la bandeja del sistema en los sistemas de soporte; y
- La capacidad de iniciar algunas aplicaciones de escritorio, como navegadores web y clientes de correo electrónico, desde una aplicación Java.
Ni AWT ni Swing son inherentemente seguros para subprocesos . Por lo tanto, el código que actualiza la GUI o procesa eventos debe ejecutarse en el subproceso de despacho de eventos . No hacerlo puede resultar en un punto muerto o una condición de carrera. Para abordar este problema, una clase de utilidad llamada SwingWorker permite que las aplicaciones realicen tareas que requieren mucho tiempo después de los eventos de interacción del usuario en el hilo de despacho de eventos.
Mezcla de componentes AWT y Swing
Donde haya una versión Swing de un componente AWT, comenzará con J- y debe usarse exclusivamente, reemplazando la versión AWT. Por ejemplo, en Swing, solo use JButton, nunca la clase Button. Como se mencionó anteriormente, las clases principales de AWT, como Color y Font, todavía se usan tal cual en Swing.
Al dibujar en Swing, use JPanel y anule paintComponent (Graphics g) en lugar de usar los métodos AWT paint ().
Antes de Java 6 Update 12 , la combinación de componentes Swing y widgets AWT básicos a menudo producía efectos secundarios no deseados, con widgets AWT que aparecían en la parte superior de los widgets Swing independientemente de su orden z definido . Este problema se debió a que la arquitectura de representación de los dos kits de herramientas de widgets era muy diferente, a pesar de que Swing tomó prestados contenedores superiores pesados de AWT. [1]
A partir de Java 6 Update 12 , es posible mezclar widgets Swing y AWT sin tener problemas de orden z. [2]
Ejemplo
import java.applet.Applet ; importar java.awt. * ; importar java.awt.event. * ;público de clase AppletApplication extiende Applet implementos WindowListener { public static void main ( java . lang . String [] args ) { AppletApplication applet = new AppletApplication (); Marco w = nuevo Marco ( "Applet" ); w . addWindowListener ( subprograma ); w . agregar ( "Centro" , subprograma ); w . setSize ( 50 , 50 ); w . setVisible ( verdadero ); applet . init (); applet . inicio (); } pintura de vacío público ( Gráficos g ) { super . pintura ( g ); g . drawString ( "Hola mundo" , 10 , 10 ); // Esquina superior izquierda } public void windowClosing ( WindowEvent e ) { System . salir ( 0 ); // Salir de la aplicación cuando la ventana esté cerrada } // Métodos requeridos public void windowActivated ( WindowEvent e ) { } public void windowClosed ( WindowEvent e ) { } public void windowDeactivated ( WindowEvent e ) { } public void windowDeiconified ( WindowEvent e ) { } public void windowIconified ( WindowEvent e ) { } public vacío windowOpened ( WindowEvent e ) { }}
Implementación
Como el AWT es un puente hacia la interfaz de usuario nativa subyacente, su implementación en un nuevo sistema operativo puede implicar mucho trabajo, especialmente si involucra alguno de los widgets GUI de AWT, porque cada uno de ellos requiere que se desarrollen sus pares nativos. desde cero.
Se ha creado un nuevo proyecto, Caciocavallo , que proporciona una API Java basada en OpenJDK para facilitar la implementación de AWT en nuevos sistemas. [3] [4] El proyecto ha implementado con éxito widgets AWT utilizando Java2D . [5] Desde entonces, todas las modificaciones necesarias del core-JDK se han enviado a OpenJDK 7 , [6] lo que significa que Java ahora se puede usar en una pila de gráficos distinta a las proporcionadas por el JDK oficial ( X Window System , OpenGL o DirectX ), al incluir una biblioteca externa y configurar algunas propiedades del sistema. Se está desarrollando un backend DirectFB para Caciocavallo [7] , al igual que un backend HTML5 ; el objetivo es implementar aplicaciones Swing existentes, sin soporte de Java, como aplicaciones web normales que se ejecutan en un servidor web. [7] [8]
Ver también
- Columpio (Java)
- Kit de herramientas de widgets estándar
Referencias
Este artículo se basa en material extraído del Diccionario gratuito de informática en línea antes del 1 de noviembre de 2008 e incorporado bajo los términos de "renovación de licencias" de la GFDL , versión 1.3 o posterior.
- ^ Fowler, Amy (1994). "Mezcla de componentes ligeros y pesados" . Sun Microsystems . Archivado desde el original el 23 de diciembre de 2011 . Consultado el 17 de diciembre de 2008 .
- ^ "Error / RFE corregido en la compilación actual de JDK 6u12" . Sun Microsystems . 12 de diciembre de 2008. Archivado desde el original el 17 de diciembre de 2008 . Consultado el 17 de diciembre de 2008 .
- ^ Torre, Mario (2 de marzo de 2008). "PROPUESTA FINAL: backends GUI portátiles" . Archivado desde el original el 19 de marzo de 2012 . Consultado el 7 de septiembre de 2008 .
- ^ Kennke, Roman (18 de diciembre de 2008). "Panorama de la Arquitectura de Caciocavallo" . Consultado el 7 de septiembre de 2008 .
- ^ Kennke, Roman (3 de septiembre de 2008). "Cacio Swing AWT peers" . Archivado desde el original el 13 de marzo de 2012 . Consultado el 7 de septiembre de 2008 .
- ^ "¿Cuánto se ha empujado río arriba?" . openjdk.java.net. 20 de septiembre de 2009. Archivado desde el original el 19 de marzo de 2012 . Consultado el 7 de marzo de 2010 .
Ya no necesita esos parches, con el último empuje de FontManager, todo está en sentido ascendente ahora, así que solo use el repositorio de Cacio, es completamente autónomo.
- ^ a b Kennke, Roman (28 de julio de 2011). "Frescura JDK7 y Cacio" . Consultado el 8 de agosto de 2011 .
- ^ Eisserer, Clemens. "Backend HTML5 / Canvas para Caciocavallo (GNU-Classpath)" . Archivado desde el original el 21 de marzo de 2012 . Consultado el 8 de agosto de 2011 .
enlaces externos
java.awt
( Documentación de la API de AWT Javadoc )- Documentación AWT
- AWT / Swing
- java.awt