Abstract Window Toolkit - Abstract Window Toolkit
O Abstract Window Toolkit ( AWT ) é o kit de ferramentas de janela , gráficos e widget de interface do usuário dependente da plataforma original do Java , anterior ao Swing . O AWT é parte do Java Foundation Classes (JFC) - a API padrão para fornecer uma interface gráfica de usuário (GUI) para um programa Java. AWT também é o kit de ferramentas GUI para vários perfis Java ME . Por exemplo, os perfis de Configuração de dispositivo conectado requerem tempos de execução Java em telefones móveis para suportar o Abstract Window Toolkit.
História
Quando a Sun Microsystems lançou o Java pela primeira vez em 1995, os widgets AWT forneciam um nível fino de abstração sobre a interface de usuário nativa subjacente. Por exemplo, a criação de uma caixa de seleção AWT faria com que o AWT chamasse diretamente a sub-rotina nativa subjacente que criou uma caixa de seleção. No entanto, uma caixa de seleção no Microsoft Windows não é exatamente o mesmo que uma caixa de seleção no Mac OS ou nos vários tipos de Unix . Alguns desenvolvedores de aplicativos preferem esse modelo porque ele fornece um alto grau de fidelidade ao kit de ferramentas de janela nativo subjacente e integração perfeita com aplicativos nativos. Em outras palavras, um programa GUI escrito usando AWT parece um aplicativo nativo do Microsoft Windows quando executado no Windows, mas o mesmo programa parece um aplicativo nativo Apple Macintosh quando executado em um Mac, etc. No entanto, alguns desenvolvedores de aplicativos não gostam deste modelo porque eles preferem que seus aplicativos tenham a mesma aparência em todas as plataformas.
No J2SE 1.2 , o kit de ferramentas Swing substituiu amplamente os widgets do AWT. Além de fornecer um conjunto mais rico de widgets de IU, o Swing desenha seus próprios widgets (usando Java 2D para chamar sub-rotinas de baixo nível no subsistema gráfico local) em vez de depender do módulo de interface de usuário de alto nível do sistema operacional. O Swing oferece a opção de usar a "aparência e comportamento" da plataforma nativa ou uma aparência e comportamento de plataforma cruzada (a "aparência e comportamento Java") que tem a mesma aparência em todos os sistemas de janelas.
Arquitetura
O AWT fornece dois níveis de APIs :
- Uma interface geral entre Java e o sistema nativo, usada para janelas , eventos e gerenciadores de layout . Esta API está no núcleo da programação Java GUI e também é usada por Swing e Java 2D . Contém:
- A interface entre o sistema de janelas nativo e o aplicativo Java;
- O núcleo do subsistema de eventos da GUI ;
- Vários gerenciadores de layout ;
- A interface para dispositivos de entrada como mouse e teclado ; e
- Um
java.awt.datatransfer
pacote para uso com a área de transferência e arrastar e soltar .
- Um conjunto básico de widgets GUI, como botões, caixas de texto e menus. Ele também fornece a Interface Nativa AWT , que permite renderizar bibliotecas compiladas em código nativo para desenhar diretamente em uma superfície de desenho de
Canvas
objeto AWT .
O AWT também disponibiliza algumas funcionalidades de nível superior para aplicativos, como:
- Acesso à bandeja do sistema em sistemas de suporte; e
- A capacidade de iniciar alguns aplicativos de desktop, como navegadores da web e clientes de e- mail a partir de um aplicativo Java.
Nem AWT nem Swing são inerentemente thread-safe . Portanto, o código que atualiza a GUI ou processa eventos deve ser executado no thread de despacho de eventos . Não fazer isso pode resultar em um impasse ou condição de corrida. Para resolver esse problema, uma classe de utilitário chamada SwingWorker permite que os aplicativos executem tarefas demoradas seguindo os eventos de interação do usuário no thread de despacho de eventos.
Mistura de componentes AWT e Swing
Onde houver uma versão Swing de um componente AWT, ele começará com J- e deve ser usado exclusivamente, substituindo a versão AWT. Por exemplo, no Swing, use apenas JButton, nunca a classe Button. Conforme mencionado acima, as classes principais do AWT, como Color e Font, ainda são usadas no estado em que se encontram no Swing.
Ao desenhar no Swing, use JPanel e substitua paintComponent (Graphics g) em vez de usar os métodos paint () do AWT.
Antes do Java 6 Update 12 , a combinação de componentes Swing e widgets AWT básicos geralmente resultava em efeitos colaterais indesejados, com widgets AWT aparecendo no topo dos widgets Swing, independentemente de sua ordem z definida . Esse problema ocorria porque a arquitetura de renderização dos dois kits de ferramentas de widget era muito diferente, apesar do Swing pegar emprestado contêineres pesados da AWT.
A partir do Java 6 Update 12 , é possível misturar widgets Swing e AWT sem problemas de ordem z.
Exemplo
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) { }
}
Implementação
Como o AWT é uma ponte para a interface de usuário nativa subjacente, sua implementação em um novo sistema operacional pode envolver muito trabalho, especialmente se envolver qualquer um dos widgets AWT GUI, porque cada um deles requer que seus pares nativos sejam desenvolvidos do princípio.
Um novo projeto, Caciocavallo , foi criado, que fornece uma API Java baseada em OpenJDK para facilitar a implementação do AWT em novos sistemas. O projeto implementou widgets AWT com sucesso usando Java2D . Todas as modificações necessárias do core JDK foram enviadas para o OpenJDK 7 , o que significa que o Java agora pode ser usado em uma pilha de gráficos diferente das fornecidas pelo JDK oficial ( X Window System , OpenGL ou DirectX ), incluindo um biblioteca externa e configuração de algumas propriedades do sistema. Um backend DirectFB para Caciocavallo está em desenvolvimento, assim como um backend HTML5 ; o objetivo é implantar aplicativos Swing existentes - sem suporte a Java - como aplicativos da web comuns em execução em um servidor da web.
Veja também
Referências
Este artigo é baseado em material retirado do Dicionário Online Gratuito de Computação anterior a 1 de novembro de 2008 e incorporado sob os termos de "relicenciamento" do GFDL , versão 1.3 ou posterior.
links externos
-
java.awt
( Documentação da API AWT Javadoc ) - Documentação AWT
- AWT / Swing
- java.awt