Swing x SWT

Pessoal,

Quais as principais diferenças entre Swing e SWT? O modelo de eventos é o mesmo? Li alguns artigos (não me lembro onde, senão colocava a URL aqui) dizendo que SWT compromete a portabilidade, é verdade?

Agradeço desde já pelos esclarecimentos.

Valeu!
[]'s

Swing: cria os próprios widgets (botoes, icones, textboxes, etc, etc, etc), desenhando-os na tela com Java2D ou o que for.

SWT: usa o sistema operacional pra desenhar os widgets, mas quando o SO não sabe de algum determinado controle (árvore, por exemplo), ele faz na mão.

Modelo de eventos: diferente

API: totalmente diferente

Portabilidade: na SWT, a portabilidade depende de ter uma SWT disponível para a plataforma onde se quer trabalhar, o que não é o caso da Swing, que está disponível pra todas as JREs que tem AWT (ou seja, todas). Mas, agora que a SWT está ficando mais estável no OS X, portabilidade deixou de ser problema, na prática :wink:

Tô meio por fora do SWT, mas há uma certa padronização na implementação dele ou algo do tipo?

Se por “padronização” vc quer dizer JSR, não, e dificilmente vai ter (a menos que chova canivete um belo dia desses e a Sun passe a gostar da IBM ;))

Mas a implementação da SWT tem sido bem estável, com poucas mudanças significativas na API de versão para versão, e o código cliente não varia em quase nada de uma plataforma para outra (ou seja, o código do Eclipse para Windows, Linux e Mac varia pouco para acomodar pequenas diferenças de ambiente).

Uhnnn mas compensa essas mudanças no código por causa da mudança de ambiente?
Uma das coisas mais mão-na-roda que tem aqui é compilar o código aqui no Linux e rodar legal em tudo qto é lugar. :slight_smile:

Pelo pouco que eu vi (minha experiencia com SWT é algo bem próximo de zero :)), essas dependências de plataforma são em coisas beeeeem específicas (embedding de componentes OLE, por exemplo, coisa que a Swing nem te deixa fazer, mas que na SWT é perfeitamente possível, e tem sido feita pra tudo quanto é lado no WebSphere Studio com o Internet Explorer / Mozilla Gecko).

Não conheço nada de SWT, mas depois de ler esse tópico eu acho que o SWT deve ser mais pesado que o SWING… isso realmente acontece??

Vegetto, muito pelo contrário. A SWT e a Swing praticamente empatam em performance… e a Swing está por aí desde…uhhh… 97 (?), enquanto a SWT está aí desde 2000, então ainda tem muito chão pra se otimizar :wink:

Eu não dependo do Eclipse pra usar os componentes da SWT, certo? Onde baixar a API?

Valeu!
[]'s

Não depende, mas a vida fica mais fácil quando vc está trabalhando com ele :wink:

Basicamente, o que vc precisa é do swtxxx.jar, e da DLL especifica pro seu sistema operacional colocada na propriedade java.library.path.

Trocando em miúdos, coloque o jar no classpath, e chame a VM assim:

java -Djava.library.path=/cafundo/do/judas/swtxxx.dll MeuProgSWT

O Umlauf tá trabalhando com SWT, voces podem encher o saco dele :smiley:

Isso! Podem mesmo! :smiley: Apesar de também estar aprendendo o SWT, no que estiver ao meu alcance eu ajudarei com o maior prazer. :slight_smile:

Aproveitando, o ensejo, gostaria de anunciar aqui, em primeira mão, o lançamento do projeto SweetReader, um leitor de RSS feeds em SWT, no SF. Na página só tem um screenshot do pré-alpha-protótipo :wink: , mas dá pra ter uma idéia de como fica uma GUI em SWT (que não seja o Eclipse :slight_smile: ).

Pra quem usa o Eclipse, vale instalar o SWT Examples Plugin, que pode ser baixado da página de downloads do Eclipse.org mesmo. Ele traz um “launcher” de vários exemplos de widgets do SWT, muito legal.

Umlauf,

Legal o SweetReader. Tem algum screenshot dele rodando no Linux? A SWT usa GTK+, ou independe da biblioteca gráfica?

Valeu!
[]'s

Infelizmente não tenho, sorry. O browser que aparece no painel inferior é o IE, “embedado” num OLE container do SWT (na verdade você pode abrir qualquer aplicação que suporte OLE no SWT usando OLE Automation - Word, Excel, etc, bastando mudar o ProgID da aplicação), o que não daria certo no Linux.

Estou fazendo alguns testes com o Gecko e assim que conseguir algo eu “colo” um screenshot lá :slight_smile:

Há duas versões do SWT para Linux: GTK2 e Motif.

[]'s

Pessoal,

Pelo o que o CV falou, SWT e Swing empatam em performance. Então qual seria a vantagem em usar SWT, já que o Swing é padrão da Sun ?

Valeu,

Ivan.

Ivan, não é só performance que conta quando se escolhe uma tecnologia - senão a gente ainda estaria programando em… sei lá, Assembly :wink:

A SWT tem uns pontos positivos em relação à Swing bem bacanas. IMHO, o melhor deles é um modelo de objetos limpo, sem dependência com a AWT, que tinha uma série de probleminhas relacionados à idade :slight_smile:

Outra coisa legal da SWT é que ela não imita o look-n-feel da plataforma, ela efetivamente usa o look-n-feel da plataforma. Então, algumas coisas que não funcionam muito bem na Swing (Alt -, pra mostrar o menuzinho de contexto da janela atual no Windows, por exemplo) funcionam 100% em aplicacoes SWT.

Quanto à questão de ser ou não padrão, não é pq é padrão que a gente simplesmente precisa aceitá-los… vide minhas intermináveis discussões sobre EJBs versus o resto do mundo, Hibernate versus JDO, etc :slight_smile:

Humm muito interessante!!
Valew pessoal pela explicação!

Forte abraço,
Tiago Serafim