Estruturas de GUI Java. O que escolher? Swing, SWT, AWT, SwingX, JGoodies, JavaFX, Apache Pivot?

Existem muitos frameworks gui disponíveis para java, mas o que é reconhecido como o framework de escolha de hoje?

O seguinte é a minha compreensão dos diferentes frameworks, por favor corrija-me se estou errado. Este é um conjunto muito vagamente definido de perguntas, mas eu ainda acho que é valioso para qualquer um que esteja pensando em criar aplicações ricas em gui.


AWT

É a base do swing, tem bom desempenho, mas falta componentes avançados. Se você pretende criar aplicativos avançados, o AWT provavelmente não é o caminho a percorrer. No entanto, para aplicativos de GUI menores que não exigem interfaces de usuário ricas. Isso pode servir perfeitamente, pois é uma estrutura testada e comprovada.


Balanço

Baseado no AWT como afirmado anteriormente. Em sua infância, foi considerado lento e cheio de bugs e fez com que a IBM criasse o SWT para o Eclipse. No entanto, com o Java 5 (ou 6?), O Swing tornou-se o framework preferido para a construção de novas aplicações. Swing tem muitos componentes ricos, mas ainda faltam em algumas áreas. Um exemplo é que não há um componente TreeTable cheio de resources que possa fazer triagem e filtragem / pesquisa.


SWT

Criados pela IBM para o Eclipse, eles pareciam pensar que o Swing não era adequado para o Eclipse na época. Por si só é bastante baixo nível, e ele usa widgets nativos da plataforma através do JNI. Não está relacionado com Swing e AWT. Sua API é, no entanto, um tanto desajeitada e não intuitiva. Eles têm alguns componentes avançados como uma TreeTable. (mas eu não acho que eles suportam sorting e filtragem fora da checkbox). O SWT usa algumas ligações nativas (através do JNI?) E o discurso na internet é que esse framework não deve ser usado nos projetos de hoje. (Por que não?)


SwingX

Baseado no Swing e sua missão é criar componentes ricos para swing. Ainda em desenvolvimento. (não é muito ativo). Tenha um bom conjunto de componentes, como por exemplo o TreeTable. Mas o TreeTable não suporta filtragem e sorting, tanto quanto eu sei. No entanto, suporta pesquisas com destaque.

Observe que o SwingX é componentes (AFAIU) que são extensões ou composições de componentes Swing existentes


JGoodies

Um framework que eu não sei nada sobre … Quais são seus pontos fortes e fracos? Quais são as Jgoodies além do resto?

JGoodies OTOH é sobre PLAFs e layouts.


JavaFX

O mais recente carro-chefe da Java / Oracle. prometendo ser o padrão de fato no desenvolvimento de aplicativos avançados para desktop ou web.


Apache Pivot

Ele renderiza a interface do usuário usando Java2D, minimizando assim o impacto dos legados (IMO, inchado) do Swing e do AWT. (@Augustus Thoo)

Seu foco principal parece ser em RIA (Rich Internet Applications), mas parece que também pode ser aplicado a aplicativos de desktop. E como um comentário pessoal, parece muito interessante! Eu gosto especialmente disso, é um projeto apache.

https://cwiki.apache.org/PIVOT/frequently-asked-questions-faq.html


Qt Jambi

Um wrapper java para a biblioteca qt nativa que é escrita em c / c ++. Muito poderoso, amplamente utilizado e aceito. Tem muitos componentes GUI e uma API fácil de usar.

http://qt-jambi.org/


Então, para tentar resumir um pouco do que estou perguntando:

Digamos que eu quisesse criar hoje um aplicativo de desktop em Java que envolvesse muitos componentes avançados. O que devo escolher? E porque?

Qual desses frameworks deve ser reconhecido como obsoleto e quais devem ser reconhecidos como as estruturas do futuro distante?

O que é hoje o framework padrão de fato e quais ferramentas você utiliza para criar aplicativos java gui?


Eu poderia me arrepender de perguntar isso, mas mal tente de qualquer maneira:

C # /. Net é dito ter um conjunto muito bom de componentes fáceis de usar que podem ser flexionados em todas as direções possíveis. E depois de investigar diferentes frameworks java, até certo ponto não consigo dizer o mesmo sobre Java. Por que é isso? Por que o java (que é a linguagem de programação mais usada no mundo) não possui o mesmo conjunto de componentes da GUI?

É apenas que o java baseou seus componentes de gui em um nível muito mais baixo, e é possível escrever todos esses componentes avançados que estou procurando, mas você tem que fazer muito se não todo o trabalho sozinho?

    Árvore de decisão:

    1. Frameworks como o Qt e o SWT precisam de DLLs nativas. Então você tem que se perguntar: Todas as plataformas necessárias são suportadas? Você pode empacotar as DLLs nativas com seu aplicativo?

      Veja aqui como fazer isso para o SWT .

      Se você tiver uma escolha aqui, você deve preferir o Qt over SWT. O Qt foi desenvolvido por pessoas que entendem a interface do usuário e o desktop, enquanto o SWT foi desenvolvido por necessidade de tornar o Eclipse mais rápido. É mais um patch de desempenho para o Java 1.4 do que um framework de interface do usuário. Sem o JFace, você está perdendo muitos componentes importantes da interface do usuário ou resources muito importantes de componentes da interface do usuário (como filtragem em tabelas).

      Se o SWT está faltando um recurso que você precisa, o quadro é um pouco hostil para estendê-lo. Por exemplo, você não pode estender nenhuma class (as classs não são finais, elas apenas lançam exceções quando o pacote this.getClass() não é org.eclipse.swt e você não pode adicionar novas classs em esse pacote porque está assinado).

    2. Se você precisa de uma solução Java nativa e pura, isso deixa você com o resto. Vamos começar com AWT, Swing, SwingX – o jeito Swing.

      AWT está desatualizado. Swing está desatualizado (talvez menos, mas não muito trabalho foi feito em Swing nos últimos 10 anos). Você poderia argumentar que Swing foi bom para começar, mas todos nós sabemos que o código apodrece. E isso é especialmente verdade para as interfaces de usuário hoje.

      Isso deixa você com o SwingX. Depois de um longo período de progresso lento, o desenvolvimento se recuperou novamente . A grande desvantagem com o Swing é que ele se baseia em algumas idéias antigas, que são muito vanguardistas há 15 anos, mas que parecem “desajeitadas” hoje em dia. Por exemplo, as visualizações de tabela suportam filtragem e sorting, mas você ainda precisa configurar isso. Você terá que escrever um monte de código de placa de caldeira apenas para obter uma UI decente que pareça moderna.

      Outra área fraca é a temática. A partir de hoje, há muitos temas por aí. Veja aqui o top 10 . Mas alguns são lentos, alguns são bugs, alguns são incompletos. Eu odeio quando escrevo uma interface do usuário e os usuários reclamam que algo não funciona para eles porque eles selecionaram um tema estranho.

    3. O JGoodies é outra camada no topo do Swing, como o SwingX. Ele tenta tornar o Swing mais agradável de usar. O site parece ótimo. Vamos dar uma olhada no tutorial … hm … ainda pesquisando … espere. Parece que não há documentação no site. Google para o resgate . Não, nenhum tutorial útil.

      Não estou me sentindo confiante com uma estrutura de interface do usuário que se esforce tanto para ocultar a documentação de possíveis novos fãs. Isso não significa que JGoodies é ruim; Eu simplesmente não consegui encontrar nada de bom para dizer sobre isso, mas que parece bom.

    4. JavaFX. Ótimo, elegante. O suporte está lá, mas eu sinto que é mais um brinquedo shiny do que uma estrutura séria de interface do usuário. Esse sentimento tem raízes na falta de componentes complexos da interface do usuário, como tabelas de trees. Existe um componente baseado em webkit para exibir HTML .

      Quando foi introduzido, meu primeiro pensamento foi “cinco anos atrasado”. Se o seu objective é um bom aplicativo para telefones ou sites da web, bom. Se o seu objective é a aplicação de desktop profissional, certifique-se de que ele oferece o que você precisa.

    5. Pivô. A primeira vez que ouvi sobre isso. É basicamente uma nova estrutura de interface do usuário baseada em Java2D. Então eu dei uma chance ontem. No Swing, apenas um pouquinho de AWT ( new Font(...) ).

      Minha primeira impressão foi boa. Existe uma extensa documentação que ajuda você a começar. A maioria dos exemplos vem com demonstrações ao vivo (Nota: Você deve ter o Java ativado em seu navegador da Web; isso é um risco de segurança ) na página da Web, para que você possa ver o código e o aplicativo resultante lado a lado.

      Na minha experiência, mais esforço vai para o código do que para a documentação. Ao examinar os documentos do Pivot, muito esforço deve ter entrado no código. Observe que atualmente há um bug que impede que alguns exemplos funcionem ( PIVOT-858 ) em seu navegador.

      Minha segunda impressão do Pivot é que é fácil de usar. Quando me deparei com um problema, eu geralmente poderia resolvê-lo rapidamente, olhando para um exemplo. Eu estou perdendo uma referência de todos os estilos que cada componente suporta, no entanto.

      Assim como no JavaFX, faltam alguns componentes de nível superior, como um componente de tabela em tree ( PIVOT-306 ). Eu não tentei carregar com preguiça a vista da mesa. Minha impressão é que, se o modelo subjacente usa carregamento lento, isso é suficiente.

      Promissor. Se você puder, experimente.

    SWT por si só é bastante baixo nível, e usa widgets nativos da plataforma através de JNI. Não está relacionado com Swing e AWT. O Eclipse IDE e todos os Rich Client Applications baseados em Eclipse, como o cliente Vuze BitTorrent , são construídos usando o SWT. Além disso, se você estiver desenvolvendo plug-ins do Eclipse, normalmente usará o SWT.
    Tenho desenvolvido aplicativos e plug-ins baseados no Eclipse há quase cinco anos, por isso sou claramente parcial. No entanto, também tenho uma vasta experiência em trabalhar com o SWT e o kit de ferramentas de interface do JFace , que é construído sobre ele. Eu achei JFace muito rico e poderoso; em alguns casos, pode até ser o principal motivo para a escolha do SWT. Ele permite que você crie uma interface de usuário em funcionamento com bastante rapidez, desde que seja semelhante a IDE (com tabelas, trees, controles nativos, etc.). É claro que você também pode integrar seus controles personalizados, mas isso requer algum esforço extra.

    Eu gostaria de sugerir outro framework: Apache Pivot http://pivot.apache.org/ .

    Eu tentei brevemente e ficou impressionado com o que ele pode oferecer como um RIA (Rich Internet Application) framework ala Flash.

    Ele renderiza a interface do usuário usando Java2D, minimizando assim o impacto dos legados (IMO, inchado) do Swing e do AWT.

    Swing + SwingX + Miglayout é a minha combinação de escolha. O Miglayout é muito mais simples do que o Swings perceber 200 gerenciadores de layout diferentes e muito mais poderosos. Além disso, ele fornece a capacidade de “depurar” seus layouts, o que é especialmente útil ao criar layouts complexos.

    Outra opção é usar o Qt Jambi . Tem quase toda a grandeza do Qt (muitos componentes, boa documentação, fácil de usar), sem o incômodo do C ++. Eu usei há 3-4 anos para um projeto pequeno, mesmo assim estava quase maduro.

    Você pode querer ver a discussão sobre Swing vs. Qt aqui .

    Minha opinião pessoal: Vá para Swing junto com a plataforma NetBeans.

    Se você precisar de componentes avançados (mais do que as ofertas do NetBeans), poderá integrar facilmente o SwingX sem problemas (ou JGoodies), já que a plataforma NetBeans é totalmente baseada no Swing.

    Eu não iria iniciar um grande aplicativo de desktop (ou um que vai ser grande) sem uma boa plataforma que é construída sobre a estrutura de interface do usuário subjacente.

    A outra opção é o SWT junto com o Eclipse RCP, mas é mais difícil (embora não impossível) integrar componentes Swing “puros” em tal aplicativo.

    A curva de aprendizado é um pouco íngreme para a plataforma NetBeans (embora eu ache que isso seja verdade também para o Eclipse), mas há alguns bons livros em torno dos quais eu recomendo.

    esqueceu-se do Java Desktop Aplication baseado em JSR296 como o Swing Framework integrado no NetBeans

    excluindo AWT e JavaFX são todos os seus frameworks descritos são baseados em Swing, se você começar com o Swing, então você seria entender (claramente) para todos estes Swing’s (Frameworks Baseados)

    ATW, SWT (Eclipse), Java Desktop Aplication (NetBeans), SwingX, JGoodies

    todos os frameworks (eu não sei algo mais sobre JGoodies) incl. JavaFX não tem muito tempo nenhum progresso, muitos frameworks baseados no Swing são parados, se não, então sem a mais nova versão

    apenas minha opinião – o melhor deles é SwingX, mas exigiu um conhecimento mais profundo sobre Swing,

    Look and Feel para os frameworks baseados em Swing

    Eu tenho ficado muito feliz com o Swing pelos aplicativos de desktop nos quais estive envolvido. No entanto, compartilho sua opinião sobre a Swing, que não oferece componentes avançados. O que eu fiz nestes casos é ir para o JIDE. Não é grátis, mas também não é caro e dá-te muito mais ferramentas. Especificamente, eles oferecem uma TreeTable filtrável.

    Eu iria com o Swing. Para o layout, eu usaria o layout do formulário JGoodies. Vale a pena estudar o white paper no Form Layout aqui – http://www.jgoodies.com/freeware/forms/

    Além disso, se você estiver começando a desenvolver um enorme aplicativo de desktop, você definitivamente precisará de um framework. Outros apontaram a estrutura do netbeans. Eu não gostei muito então escrevi um novo que agora usamos na minha empresa. Eu coloquei no sourceforge, mas não encontrei tempo para documentá-lo muito. Aqui está o link para procurar o código:

    http://swingobj.svn.sourceforge.net/viewvc/swingobj/

    O mostruário deve mostrar-lhe como fazer um logon simples, na verdade ..

    Deixe-me saber se você tem alguma dúvida sobre isso eu poderia ajudar.