Respostas:
AWT é uma interface Java para o código da GUI do sistema nativo presente no seu sistema operacional. Não funcionará da mesma maneira em todos os sistemas, embora tente.
Swing é uma GUI Java mais ou menos pura. Ele usa o AWT para criar uma janela do sistema operacional e, em seguida, pinta imagens de botões, etiquetas, texto, caixas de seleção etc. nessa janela e responde a todos os cliques do mouse, entradas de teclas etc., decidindo por si próprio o que fazer em vez de deixar o sistema operacional lidar com isso. Portanto, o Swing é 100% portátil e é o mesmo em todas as plataformas (embora seja skinnable e tenha uma "aparência e plugabilidade" que podem torná-lo mais ou menos como a aparência das janelas e widgets nativos).
Essas são abordagens muito diferentes para os kits de ferramentas da GUI e têm muitas consequências. Uma resposta completa para sua pergunta tentaria explorar todas elas. :) Aqui estão algumas:
O AWT é uma interface de plataforma cruzada, portanto, embora use o SO subjacente ou o kit de ferramentas da GUI nativa para sua funcionalidade, ele não fornece acesso a tudo o que esses kits de ferramentas podem fazer. Os widgets AWT avançados ou mais recentes que possam existir em uma plataforma podem não ser suportados em outra. Os recursos de widgets que não são iguais em todas as plataformas podem não ser suportados ou, pior ainda, podem funcionar de maneira diferente em cada plataforma. As pessoas costumavam investir muito esforço para fazer com que seus aplicativos AWT funcionassem de maneira consistente em várias plataformas - por exemplo, eles podem tentar fazer chamadas para o código nativo do Java.
Como o AWT usa widgets da GUI nativa, seu sistema operacional os conhece e lida com a colocação um na frente do outro, etc., enquanto os widgets Swing são pixels sem sentido dentro de uma janela do ponto de vista do seu sistema operacional. O próprio Swing lida com o layout e o empilhamento dos widgets. A mistura de AWT e Swing não é suportada e pode levar a resultados ridículos, como botões nativos que ocultam tudo na caixa de diálogo em que residem porque tudo foi criado com o Swing.
Como o Swing tenta fazer todo o possível em Java, exceto as rotinas gráficas muito brutas fornecidas por uma janela da GUI nativa, ele costumava sofrer uma penalidade de desempenho em comparação com o AWT. Infelizmente, o Swing demorou a entender. No entanto, isso diminuiu drasticamente nos últimos anos devido a JVMs mais otimizadas, máquinas mais rápidas e (presumo) otimização dos componentes internos do Swing. Hoje, um aplicativo Swing pode ser executado rápido o suficiente para ser reparado ou até zippy, e quase indistinguível de um aplicativo usando widgets nativos. Alguns dirão que demorou muito para chegar a esse ponto, mas a maioria dirá que vale a pena.
Finalmente, você também pode querer conferir o SWT (o kit de ferramentas da GUI usado para o Eclipse e uma alternativa ao AWT e ao Swing), que é um retorno à idéia do AWT de acessar Widgets nativos por meio de Java.
A diferença básica que todos já mencionaram é que um é pesado e o outro é leve . Deixe-me explicar, basicamente, o que o termo peso pesado significa é que, quando você está usando os componentes awt, o código nativo usado para obter o componente view é gerado pelo sistema operacional , por isso a aparência muda de SO para SO. Onde nos componentes oscilantes é responsabilidade da JVM gerar a visualização dos componentes. Outra declaração que eu vi é que o swing é baseado no MVC e o awt não é.
Swing vs AWT . Basicamente, o AWT veio em primeiro lugar e é um conjunto de componentes de interface do usuário pesados (o que significa que são invólucros para objetos do sistema operacional), enquanto o Swing foi construído sobre o AWT com um conjunto mais rico de componentes leves.
Qualquer trabalho sério da interface do usuário Java é feito no Swing, não no AWT, que foi usado principalmente para applets.
Até onde o AWT pode ser mais útil que o Swing -
Várias consequências resultam dessa diferença entre o AWT e o Swing.
O AWT é uma fina camada de código na parte superior do sistema operacional, enquanto o Swing é muito maior. Swing também tem uma funcionalidade muito mais rica. Usando o AWT, você precisa implementar várias coisas, enquanto o Swing as inclui. Para trabalhos intensivos em GUI, o AWT parece muito primitivo para trabalhar em comparação com o Swing. Como o Swing implementa a funcionalidade da GUI em si, em vez de depender do sistema operacional host, ele pode oferecer um ambiente mais rico em todas as plataformas em que o Java é executado. O AWT é mais limitado no fornecimento da mesma funcionalidade em todas as plataformas, porque nem todas as plataformas implementam os mesmos controles da mesma maneira.
Os componentes Swing são chamados de "leves" porque não precisam de um objeto SO nativo para implementar sua funcionalidade. JDialog
e JFrame
são pesados, porque eles têm um par. Portanto, componentes como JButton
,
JTextArea
etc., são leves porque não possuem um sistema operacional semelhante .
Um par é um widget fornecido pelo sistema operacional, como um objeto de botão ou um objeto de campo de entrada.
Balanço:
AWT:
AWT 1. O AWT ocupa mais espaço na memória 2. O AWT depende da plataforma 3. O AWT requer o pacote javax.awt
balanços 1. O balanço ocupa menos espaço na memória 2. O componente Swing é independente da plataforma 3. Swing requer o pacote javax.swing