Swing ou Awt? [resolvido]

10 respostas
alisson027

alguem pode me dizer a diferença
e passar algum link q ajude

10 Respostas

pedroroxd

Link tem de sobra:
http://javafree.uol.com.br/topic-867760-AWT-x-SWING.html
http://www.devmedia.com.br/articles/viewcomp.asp?comp=3212
http://www.athanazio.com/alunos/java/conteudo-de-java/criando-interfaces-graficas/awt-x-swing/

ramos

Primeiro surgiu AWT, depois veio o Swing.

Na implemenação, a diferença básica é que AWT usa as APIs de componentes visuais do sistema operacional onde a VM está rodando para criar componentes inteiros com praticamente todo o comportamento sendo controlado pelo SO.

Já o Swing, desenha do zero os componentes usando APIs gráficas básicas do SO, gerenciando a maior parte do funcionamento dos componentes por conta própria.

Na prática:

AWT é mais rápido, porque o SO cria os componentes de forma nativa
Swing é mais lento porque precisa desenhar tudo e controlar todos os eventos via Java
AWT tem menos componentes porque precisava manter compatibilidade entre diferentes sistemas que poderiam não ter os mesmos recursos.
Swing é mais rico em componentes já que não depende de recursos gráficos específicos dos SOs.

Hoje em dia seria mais aconselhável usar Swing porque é mais moderno e completo. E com os processadores atuais a diferença na velocidade pode não ser tão perceptível.

Contudo, fiz um emulador de jogos usando AWT porque a interface ficava mais rápida em máquinas lentas.

ViniGodoy

ramos:
AWT é mais rápido, porque o SO cria os componentes de forma nativa
Swing é mais lento porque precisa desenhar tudo e controlar todos os eventos via Java

Não é bem assim. A AWT é geralmente baseada na GDI que, apesar de nativa, não tem lá a melhor performance do mundo. No caso do Windows, não era acelerada por hardware até o nascimento do Vista.

Já o Swing usa APIs como DirectX e OpenGL, e foi drasticamente otimizado em cada versão do Java.

Eu vejo poucas razões para alguém usar AWT hoje em dia. Uma delas é ser um dispositivo móvel. Geralmente a AWT tende a ocupar menos memória que o Swing, além de ter uma implementação mais simples e, por isso, estar presente em mais dispositivos.

No caso de PCs, não há razão que justifique o uso da AWT, nem mesmo o consumo inferior de memória que ela pode gerar.

Também é bom lembrar que interoperar AWT e Swing é uma péssima idéia. Os componentes da AWT sempre ficarão por cima dos componentes Swing, independente da ordem e do local que foram desenhados.

alisson027

vlw pessoal ajudo bastante tanto as respostas quanto os links

ramos

ViniGodoy:
ramos:
AWT é mais rápido, porque o SO cria os componentes de forma nativa
Swing é mais lento porque precisa desenhar tudo e controlar todos os eventos via Java

Não é bem assim. A AWT é geralmente baseada na GDI que, apesar de nativa, não tem lá a melhor performance do mundo. No caso do Windows, não era acelerada por hardware até o nascimento do Vista.

Já o Swing usa APIs como DirectX e OpenGL, e foi drasticamente otimizado em cada versão do Java…

No caso de PCs, não há razão que justifique o uso da AWT, nem mesmo o consumo inferior de memória que ela pode gerar…

Entendi.

Na verdade as diferenças de performance eu percebia rodando Java 1.3 em um 586 com 256 de RAM.

Numa máquina dessas, aplicações swing pesadas ficavam bem lentas.

Atualmente tanto o hardware quanto o software (VM e API Java) evoluiu muito.

Aliás, você sabe me dizer se o AWT foi descontinuado ou se ainda está sendo atualizado nas últimas versões do Java?

ViniGodoy

É na época do Java 1.3, não tinha nem comparação. O Swing era uma carroça.
Se você pegar uma aplicação em 1.3 e rodar a mesma em 1.6 vai sentir uma diferença drástica de performance.

Pelo que eu saiba, a AWT só sofreu atualização significativa no que ela ainda controla, no caso, o mecanismo de eventos. Outras atualizações foram para adaptar-se as mudanças no Swing, que infelizmente deriva da AWT.

Uma coisa que talvez fique legal no seu emulador é usar o Swing em modo full screen. Isso retira o processamento de dezenas de eventos, além de permitir técnicas de vídeo avançadas como page flipping e mais otimização para as BufferedImages.

É claro, para o Swing rodar com performance total, é necessário observar algumas boas práticas. Caso contrário, você também terá perda de desempenho.

A

já ouví falar de SWT… será tipo uma implementação do AWT?

ViniGodoy

Não, o SWT é um pacote gráfico diferente. Foi usado principalmente no Eclipse:

A

Vini… aproveitando o ensejo…

vc pode me dar um exemplinho pra eu entender como usar o Inner Join por favor?

abs
André AS

ViniGodoy

Não sei o que tem a ver com o tópico, mas lá vai.

Suponha que vc tenha a tabela Aluno e Nota. Na tabela aluno vc tem os seguintes campos:
idAluno
Nome

E na nota vc tem:
idNota
idAluno
bimestre
nota

E vc quer listar o nome, o bimestre e a nota dos alunos. Como aluno é uma FK na tabela nota, basta fazer um inner join assim:

SELECT nome, bimestre, nome FROM Nota INNER JOIN aluno ON aluno.idAluno = Nota.idAluno ORDER BY bimestre;

Criado 30 de abril de 2010
Ultima resposta 1 de mai. de 2010
Respostas 10
Participantes 5