Qual é a diferença entre o Swing e o AWT?

Alguém pode me explicar qual é a diferença entre Swing e AWT?

Há algum caso em que o AWT é mais útil / aconselhado para usar do que o swing ou vice-versa?

AWT é uma interface Java para o código da GUI do sistema nativo presente no seu sistema operacional. Não funcionará da mesma forma em todos os sistemas, embora tente.

O Swing é uma GUI Java mais ou menos pura. Ele usa o AWT para criar uma janela do sistema operacional e depois pinta figuras de botões, labels, texto, checkboxs de seleção, etc., para essa janela e responde a todos os cliques do mouse, inputs de tecla, etc., decidindo por si mesmo 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 “plugável” que pode parecer mais ou menos semelhante à aparência das janelas e widgets nativos).

Estas são abordagens muito diferentes para kits de ferramentas GUI e têm muitas conseqüências. Uma resposta completa à sua pergunta tentaria explorar tudo isso. 🙂 Aqui está um casal:

O AWT é uma interface de plataforma cruzada, portanto, embora use o kit de ferramentas subjacente do SO ou GUI nativo para sua funcionalidade, ele não fornece access a tudo o que esses kits de ferramentas podem fazer. Widgets AWT avançados ou mais recentes que podem existir em uma plataforma podem não ser suportados em outra. Recursos de widgets que não são os mesmos em todas as plataformas podem não ser suportados ou, pior, podem funcionar de maneira diferente em cada plataforma. As pessoas costumavam investir muito esforço para fazer com que seus aplicativos AWT trabalhassem consistentemente em todas as plataformas – por exemplo, eles podem tentar fazer chamadas para código nativo a partir de Java.

Como o AWT usa widgets GUI nativos, seu sistema operacional os conhece e manipula colocando-os na frente uns dos outros, etc., enquanto os widgets Swing são pixels sem sentido dentro de uma janela do ponto de vista do sistema operacional. O próprio Swing manipula o layout e o empilhamento de seus widgets. Misturar AWT e Swing é altamente incompatível e pode levar a resultados ridículos, como botões nativos que obscurecem todo o resto da checkbox de diálogo em que residem, porque tudo o mais foi criado com o Swing.

Como o Swing tenta fazer tudo o que é possível em Java, além das rotinas de charts muito simples fornecidas por uma janela GUI nativa, costumava incorrer em uma grande penalidade de desempenho em comparação com o AWT. Isso fez o Swing infelizmente ficar lento para pegar. No entanto, isso diminuiu drasticamente nos últimos anos devido a JVMs mais otimizadas, máquinas mais rápidas e (suponho) otimização dos componentes internos do Swing. Hoje, um aplicativo Swing pode ser executado rápido o suficiente para ser reparável ou até mesmo zippy e quase indistinguível de um aplicativo usando widgets nativos. Alguns dirão que demorou muito para chegar a este ponto, mas a maioria dirá que vale a pena.

Finalmente, você também pode querer verificar o SWT (o kit de ferramentas GUI usado para o Eclipse e uma alternativa para AWT e Swing), que é um pouco de um retorno à ideia AWT de acessar widgets nativos através de Java.

A diferença básica que já mencionamos é que um é pesado e outro é leve . Deixe-me explicar, basicamente o que o termo peso pesado significa é que quando você está usando os componentes do awt o código nativo usado para obter o componente de visualização é gerado pelo sistema operacional , é por isso que a aparência muda do sistema operacional para o sistema operacional. Onde, como nos componentes swing, é de responsabilidade da JVM gerar a visão dos componentes. Outra afirmação que eu vi é que swing é baseado em MVC e awt não é.

Swing vs AWT . Basicamente, o AWT veio primeiro e é um conjunto de componentes pesados ​​da interface do usuário (o que significa que eles são invólucros para objects 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 Java é feito no Swing, não no AWT, que foi usado principalmente para applets.

Tanto quanto quando o AWT pode ser mais útil que o Swing –

  • você pode estar segmentando uma JVM ou plataforma mais antiga que não suporta Swing. Isso costumava entrar em cena se você estivesse criando Applets – você queria segmentar o menor denominador comum para que as pessoas não precisassem instalar um plug-in Java mais recente. Não tenho certeza de qual é a versão atual mais instalada do plugin Java – isso pode ser diferente hoje em dia.
  • algumas pessoas preferem a aparência nativa do AWT em relação às peles de plataforma do Swing ‘not quite there’. (Existem melhores skins de aparência nativa de terceiros do que as implementações de Swing BTW) Muitas pessoas preferiram usar o FileDialog do AWT sobre o FileChooser do Swing porque ele dava ao diálogo de arquivo de plataforma que a maioria das pessoas estava acostumada, em vez do Swing personalizado ‘estranho’.

Várias conseqüências resultam dessa diferença entre AWT e Swing.

O AWT é uma camada fina de código no topo do sistema operacional, enquanto o Swing é muito maior. Swing também tem uma funcionalidade muito mais rica. Usando o AWT, você precisa implementar muitas coisas sozinho, enquanto o Swing as inclui. Para o trabalho intensivo com GUI, o AWT se sente muito primitivo para trabalhar em comparação com o Swing. Como o Swing implementa a própria funcionalidade da GUI em vez de confiar no 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 controles com a mesma aparência da mesma maneira.

Os componentes Swing são chamados de “leves” porque não exigem um object do 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 par de SO.

Um peer é um widget fornecido pelo sistema operacional, como um object de botão ou um object de campo de input.

Balanço:

  1. O Swing faz parte das classs básicas do java.
  2. Componentes Swing são independentes de plataforma.
  3. Os componentes do Swing são componentes leves, porque o swing fica no topo da awt.

AWT:

  1. AWT é chamado de ferramenta de janela abstrata.
  2. Os componentes do AWT dependem da plataforma.
  3. Os componentes do AWT são componentes pesados.
  • O componente swing fornece uma interface de usuário muito flexível porque segue o controlador de exibição de modelo (mvc).
  • O awt não é baseado em mvc.
  • swing funciona mais rápido.
  • O awt não funciona mais rápido.
  • componentes de balanço são leves.
  • os componentes do aw são um peso pesado.
  • swing ocupa menos espaço de memory.
  • O awt ocupa mais espaço de memory.
  • componente de oscilação é independente da plataforma.
  • O awt é dependente da plataforma.
  • swing requer o pacote javax.swing.
  • awt requer o pacote javax.awt.

AWT 1. AWT ocupa mais espaço de memory 2. AWT depende da plataforma 3. AWT requer o pacote javax.awt

balanços 1. Swing ocupa menos espaço na memory 2. O componente Swing é independente de plataforma 3. Swing requer o pacote javax.swing