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.
Um ... tendo feito um balanço bastante extenso em várias plataformas, posso dizer que não é o mesmo entre plataformas. Semelhante? Certo. Mesmo? De jeito nenhum.
Uau. Não acredito que eles possam consertá-lo, e ainda não acredito que a mistura de componentes leves e pesados seria desejável. Mas é incrível que eles possam consertar isso.
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 é.
na verdade balanço utiliza uma abordagem de modelo delegado, o qual é derivado a partir da abordagem MVC, onde no Ver e controlador são combinados para uma estrutura delegado
Purushottam
15
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.
existem casos em que o awt é mais útil / aconselhado a usar do que o swing?
Samiksha
1
Costumava ser relevante ... há 10 anos.
Bart
@Pacerier ele estava falando AWT, não SWT
11
Até onde o AWT pode ser mais útil que o Swing -
você pode estar segmentando uma JVM ou plataforma mais antiga que não oferece suporte ao Swing. Isso realmente entrava em jogo se você estivesse criando Applets - você queria atingir o menor denominador comum para que as pessoas não precisassem instalar um plugin Java mais recente. Não tenho certeza de qual é a versão atual mais amplamente instalada do plug-in Java - isso pode ser diferente hoje.
algumas pessoas preferem a aparência nativa do AWT sobre as skins da plataforma 'não estão lá' da Swing. (Existem skins com aparência nativa de terceiros melhores do que as implementações do Swing, BTW) Muitas pessoas preferiram usar o FileDialog do AWT em vez do FileChooser do Swing, porque ele forneceu o diálogo de arquivo da plataforma com o qual a maioria das pessoas estava acostumada, em vez do Swing 'estranho' personalizado.
Mas para o último, também podemos criar um FileChooser que se parece com o diálogo de arquivo do Windows (mas sem preenchimento automático) stackoverflow.com/q/17630055/2534090
JavaTechnical
9
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. JDialoge JFramesão pesados, porque eles têm um par. Portanto, componentes como JButton,
JTextAreaetc., 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.
Eu não acho que o swing funcione mais rápido que o AWT porque o AWT usa código nativo (o código da GUI) que já estava no sistema operacional, mas o swing cria todos os componentes do zero. Portanto, o AWT pode ser mais rápido. Você poderia me dizer qual é o seu ponto de vista ao dizer que o swing funciona mais rápido ? Obrigado.
JavaTechnical
3
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
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.
fonte
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 é.
fonte
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.
fonte
Até onde o AWT pode ser mais útil que o Swing -
fonte
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
eJFrame
são pesados, porque eles têm um par. Portanto, componentes comoJButton
,JTextArea
etc., são leves porque não possuem um sistema operacional semelhante .fonte
Balanço:
AWT:
fonte
fonte
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
fonte