stringtranslate.com

Kit de herramientas de ventana abstracta

Formulario de Windows con algunos ejemplos de AWT

El Abstract Window Toolkit ( AWT ) es el conjunto de herramientas de ventanas , gráficos y widgets de interfaz de usuario dependiente de la plataforma original de Java , anterior a Swing . 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 también es el conjunto de herramientas de GUI para varios perfiles de Java ME . Por ejemplo, los perfiles de configuración de dispositivos conectados requieren entornos de ejecución de Java en teléfonos móviles para admitir el Abstract Window Toolkit.

Historia

Cuando Sun Microsystems lanzó Java por primera vez en 1995, los widgets AWT proporcionaban un nivel de abstracción reducido sobre la interfaz de usuario nativa subyacente. Por ejemplo, la creación de una casilla de verificación AWT haría que AWT llamara directamente a la subrutina nativa subyacente que creó una casilla de verificación. Sin embargo, la casilla de verificación en Windows no es la misma que la casilla de verificación en macOS o en los diversos tipos de Unix . Algunos desarrolladores de aplicaciones prefieren este modelo porque proporciona un alto grado de fidelidad al kit de herramientas de ventanas nativo subyacente 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 completo de widgets de interfaz de usuario, Swing crea sus propios widgets (mediante el uso de 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 "aspecto y estilo" de la plataforma nativa o un aspecto y estilo multiplataforma (el "aspecto y estilo de Java") que se ve igual en todos los sistemas de ventanas.

Arquitectura

El AWT proporciona dos niveles de API :

AWT también pone a disposición de las aplicaciones algunas funciones de nivel superior, como:

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 envío de eventos . Si no lo hace, puede producirse un bloqueo o una condición de carrera. Para solucionar este problema, una clase de utilidad denominada SwingWorker permite que las aplicaciones realicen tareas que consumen mucho tiempo después de los eventos de interacción del usuario en el subproceso de envío de eventos.

Combinación de componentes AWT y Swing

Cuando exista una versión Swing de un componente AWT, esta comenzará con J- y se deberá utilizar exclusivamente, reemplazando la versión AWT. Por ejemplo, en Swing, solo se debe utilizar JButton, nunca la clase Button. Como se mencionó anteriormente, las clases principales de AWT, como Color y Font, todavía se utilizan tal como están en Swing.

Al dibujar en Swing, utilice JPanel y anule paintComponent(Graphics g) en lugar de utilizar los métodos paint() de AWT.

Antes de Java 6 Update 12 , la combinación de componentes Swing y widgets AWT básicos solía generar efectos secundarios no deseados, ya que los widgets AWT aparecían sobre los widgets Swing independientemente de su orden z definido. Este problema se debía a que la arquitectura de representación de los dos conjuntos de herramientas de widgets era muy diferente, a pesar de que Swing tomaba prestados contenedores superiores pesados ​​de AWT. [1]

A partir de Java 6 Update 12 , es posible combinar widgets Swing y AWT sin tener problemas de orden z. [2]

Ejemplo

importar java.awt.* ; importar java.awt.event.WindowAdapter ; importar java.awt.event.WindowEvent ;   clase pública MyApp {    public static void main ( char [] args ) { Frame frame = new Frame ( " Aplicación" ); frame.add ( new Label ( " ¡Hola!" )); frame.setSize ( 500 , 500 ) ; frame.setLocationRelativeTo ( null ); // Centra la ventana frame.addWindowListener ( new WindowAdapter ( ) { @Override public void windowClosing ( WindowEvent e ) { frame.dispose (); // Libera recursos de pantalla nativos } }) ; frame.setVisible ( true ) ; } }                                  

Implementación

Como 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 de la GUI de AWT, porque cada uno de ellos requiere que sus pares nativos se desarrollen desde cero.

Se ha creado un nuevo proyecto, Caciocavallo, que proporciona una API de 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 núcleo de JDK se han enviado a OpenJDK 7 , [6] lo que significa que Java ahora se puede utilizar en una pila de gráficos distinta a las proporcionadas por el JDK oficial ( X Window System , OpenGL o DirectX ), incluyendo una biblioteca externa y configurando 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 comunes que se ejecutan en un servidor web. [7] [8]

Véase también

Referencias

  1. ^ 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 .
  2. ^ "Bug/RFE fixed in current JDK 6u12 build". Sun Microsystems . 12 de diciembre de 2008. Archivado desde el original el 17 de diciembre de 2008 . Consultado el 17 de diciembre de 2008 .
  3. ^ Torre, Mario (2 de marzo de 2008). «PROPUESTA FINAL: Backends GUI portables». Archivado desde el original el 19 de marzo de 2012. Consultado el 7 de septiembre de 2008 .
  4. ^ Kennke, Roman (18 de diciembre de 2008). «Caciocavallo Architecture Overview» (Descripción general de la arquitectura de Caciocavallo) . Consultado el 7 de septiembre de 2008 .
  5. ^ 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 .
  6. ^ "¿Cuánto se ha subido al servidor?". 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 necesitas más de esos parches, con la última actualización de FontManager, ahora todo se sube al servidor, así que solo tienes que usar el repositorio de Cacio, es completamente autónomo.
  7. ^ ab Kennke, Roman (28 de julio de 2011). «JDK7 y Cacio son geniales» . Consultado el 8 de agosto de 2011 .
  8. ^ 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