Kit de herramientas de ventana abstracta - Abstract Window Toolkit

Formulario de Windows con algunos ejemplos de AWT

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 conjunto 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 :

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 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.

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

Ejemplo

import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;

public class AppletApplication extends Applet implements WindowListener {

    public static void main(java.lang.String[] args) {
        AppletApplication applet = new AppletApplication();
        Frame w = new Frame("Applet");
        w.addWindowListener(applet);
        w.add("Center", applet);
        w.setSize(50, 50);
        w.setVisible(true);
        applet.init();
        applet.start();
    }

    public void paint(Graphics g) {
        super.paint(g);
        g.drawString("Hello World", 10, 10);	// Upper left corner
    }

    public void windowClosing(WindowEvent e) {
        System.exit(0);	// Exit the application when the window is closed
    }
    
    // Required methods
    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 void windowOpened(WindowEvent e) { }

}

Implementación

Como AWT es un puente a 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. El proyecto ha implementado con éxito widgets AWT utilizando Java2D . Desde entonces, todas las modificaciones necesarias de core-JDK se han enviado a OpenJDK 7 , 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 un biblioteca externa y configuración de algunas propiedades del sistema. Se está desarrollando un backend DirectFB para Caciocavallo, 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.

Ver también

Referencias

Este artículo se basa en material extraído del Diccionario de Computación en línea gratuito 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.

enlaces externos