Existem muitas estruturas de GUI disponíveis para java, mas o que é reconhecido como a estrutura de escolha atual?
A seguir, é minha compreensão das diferentes estruturas, corrija-me se estiver errado. Este é um conjunto de perguntas muito pouco definido, mas ainda acho que é valioso para quem pensa em criar aplicativos avançados da GUI.
É a própria base do balanço, ele tem um 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 GUI menores, que não exigem interfaces de usuário avançadas. Isso pode se encaixar perfeitamente, pois é uma estrutura testada e comprovada.
Baseado no AWT, como indicado anteriormente. Na sua infância, era considerado lento e com erros e fez com que a IBM criasse o SWT para Eclipse. No entanto, com o Java 5 (ou 6?) Swing tornou-se a estrutura de escolha para a construção de novos aplicativos. O Swing tem muitos componentes ricos, mas ainda faltam em algumas áreas. Um exemplo é que não há um componente TreeTable com todos os recursos que pode classificar e filtrar / pesquisar.
Criados pela IBM para Eclipse, eles pareciam pensar que o Swing não era adequado para o Eclipse na época. Por si só, é bastante de baixo nível e usa os widgets nativos da plataforma por meio do JNI. Não está relacionado ao Swing e ao AWT. Sua API é, no entanto, um pouco desajeitada e não intuitiva. Eles possuem alguns componentes avançados, como uma TreeTable. (mas acho que eles não oferecem suporte à classificação e filtragem fora da caixa). O SWT usa algumas ligações nativas (por meio do JNI?) E o discurso retórico na Internet é que essa estrutura não deve ser usada nos projetos de hoje. (Por que não?)
Baseado no Swing e sua missão é criar componentes ricos para o swing. Ainda em desenvolvimento. (embora não muito ativo.) Tenha um conjunto muito bom de componentes, como, por exemplo, TreeTable. Mas o TreeTable não suporta filtragem e classificação, tanto quanto eu sei. No entanto, ele suporta a pesquisa com destaque.
Observe que SwingX são componentes (AFAIU) que são extensões ou composições de componentes Swing existentes
JGoodies
Um quadro sobre o qual não sei nada ... O que é seus pontos fortes e fracos? O que diferencia os Jgoodies do resto?
O JGoodies OTOH trata de PLAFs e layouts.
O mais recente carro-chefe do Java / Oracle. prometendo ser o padrão de fato no desenvolvimento de aplicativos avançados para desktop ou web.
Ele renderiza a interface do usuário usando Java2D, minimizando o impacto dos legados (IMO, inchados) do Swing e do AWT. (@Augustus Thoo)
Seu foco principal parece estar no 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 que é um projeto apache.
https://cwiki.apache.org/PIVOT/frequently-asked-questions-faq.html
Um wrapper java para a biblioteca qt nativa, escrito em c / c ++. Muito poderoso, amplamente utilizado e aceito. Possui muitos componentes da GUI e uma API fácil de usar.
Então, para tentar resumir um pouco do que estou perguntando:
Diga que eu queria criar um aplicativo de desktop hoje em Java que envolva muitos componentes avançados, o que devo escolher? E porque?
Qual dessas estruturas deve ser reconhecida como obsoleta e quais devem ser reconhecidas como estruturas de um futuro distante?
O que é a estrutura padrão de fato de hoje e quais ferramentas você utiliza para criar aplicativos java gui?
Posso me arrepender de perguntar isso, mas vou tentar de qualquer maneira:
Diz-se que C # / .net possui 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 estruturas 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 tem o mesmo conjunto de componentes da GUI?
Será 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ê precisa fazer muito, se não todo o trabalho?
Respostas:
Árvore de decisão:
Estruturas como Qt e SWT precisam de DLLs nativas. Então você deve se perguntar: todas as plataformas necessárias são suportadas? Você pode empacotar as DLLs nativas com seu aplicativo?
Veja aqui como fazer isso no SWT .
Se você tem uma escolha aqui, deve preferir o Qt ao invés do SWT. O Qt foi desenvolvido por pessoas que entendem a interface do usuário e a área de trabalho, enquanto o SWT foi desenvolvido por necessidade para tornar o Eclipse mais rápido. É mais um patch de desempenho para Java 1.4 do que uma estrutura de interface do usuário. Sem o JFace, você está perdendo muitos componentes principais da interface do usuário ou recursos muito importantes dos componentes da interface do usuário (como a filtragem em tabelas).
Se o SWT estiver com falta de um recurso necessário, a estrutura será um pouco hostil para estendê-lo. Por exemplo, você não pode estender nenhuma classe nela (as classes 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 classes nesse pacote porque está assinado).Se você precisar de uma solução Java pura e nativa, isso o deixará com o resto. Vamos começar com AWT, Swing, SwingX - a maneira Swing.
O AWT está desatualizado. O Swing está desatualizado (talvez menos, mas pouco trabalho foi feito no Swing nos últimos 10 anos). Você poderia argumentar que Swing era bom para começar, mas todos sabemos que esse código apodrece. E isso é especialmente verdade para as UIs hoje.
Isso deixa você com o SwingX. Após um longo período de progresso lento, o desenvolvimento voltou a crescer . A principal desvantagem do Swing é que ele se apega a algumas idéias antigas, que meio que parecem muito complicadas há 15 anos, mas que hoje parecem "desajeitadas". Por exemplo, as visualizações de tabela suportam filtragem e classificação, mas você ainda precisa configurá-lo. Você precisará escrever muito código da placa da caldeira apenas para obter uma interface de usuário decente que pareça moderna.
Outra área fraca é o tema. A partir de hoje, existem muitos temas por aí. Veja aqui os 10 melhores . Mas alguns são lentos, outros são de buggy, outros são incompletos. Odeio quando escrevo uma interface do usuário e os usuários reclamam que algo não funciona para eles porque selecionaram um tema estranho.
O JGoodies é outra camada no topo do Swing, como o SwingX. Ele tenta tornar o Swing mais agradável de usar. O site está ótimo. Vamos dar uma olhada no tutorial ... hm ... ainda procurando ... aguente firme. Parece que não há documentação no site. Google para o resgate . Não, não há tutoriais úteis.
Não estou me sentindo confiante com uma estrutura de interface do usuário que tenta tanto esconder a documentação de novos fãs em potencial. Isso não significa que o JGoodies seja ruim; Eu simplesmente não consegui encontrar nada de bom para dizer sobre isso, mas que parece bom.
JavaFX. Ótimo, elegante. O suporte existe, mas acho que é mais um brinquedo brilhante do que uma estrutura de interface do usuário séria. Esse sentimento está na falta de componentes complexos da interface do usuário, como tabelas em árvore. Há um componente baseado em webkit para exibir HTML .
Quando foi introduzido, meu primeiro pensamento foi "cinco anos tarde demais". Se o seu objetivo é um bom aplicativo para telefones ou sites, bom. Se seu objetivo é um aplicativo de desktop profissional, verifique se ele entrega o que você precisa.
Pivô. Primeira vez que ouvi sobre isso. É basicamente uma nova estrutura de interface do usuário baseada em Java2D. Então, eu tentei 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 no navegador da Web; isso é um risco de segurança ) na página da Web, para poder ver o código e o aplicativo resultante lado a lado.
Na minha experiência, mais esforço entra no código do que na documentação. Observando os documentos do Pivot, foi necessário muito esforço no código. Observe que atualmente existe um bug que impede alguns exemplos de funcionar ( PIVOT-858 ) no seu navegador.
Minha segunda impressão do Pivot é que é fácil de usar. Quando encontrei um problema, geralmente conseguia resolvê-lo rapidamente, procurando um exemplo. Estou sentindo falta de uma referência de todos os estilos que cada componente suporta.
Como no JavaFX, faltam alguns componentes de nível superior, como um componente de tabela em árvore ( PIVOT-306 ). Não tentei carregar preguiçosamente com a exibição de tabela. Minha impressão é que, se o modelo subjacente usa carregamento lento, isso é suficiente.
Promissor. Se você puder, tente.
fonte
O SWT por si só é bastante de baixo nível e usa os widgets nativos da plataforma por meio do JNI. Não está relacionado ao Swing e ao AWT. O IDE Eclipse e todos os aplicativos Rich Client baseados em Eclipse, como o cliente Vuze BitTorrent , são construídos usando SWT. Além disso, se você estiver desenvolvendo plug-ins do Eclipse, normalmente utilizará o SWT.
Desenvolvo aplicativos e plug-ins baseados em Eclipse há quase 5 anos, por isso sou claramente tendencioso. No entanto, também tenho uma vasta experiência no trabalho com o SWT e o kit de ferramentas JFace UI, que é construído sobre ele. Eu achei o JFace muito rico e poderoso; em alguns casos, pode até ser o principal motivo para a escolha do SWT. Ele permite que você instale rapidamente uma interface de trabalho, desde que parecida com IDE (com tabelas, árvores, controles nativos, etc.). É claro que você também pode integrar seus controles personalizados, mas isso exige um esforço extra.
fonte
Gostaria de sugerir outra estrutura: Apache Pivot http://pivot.apache.org/ .
Eu tentei-o brevemente e ficou impressionado com o que ele pode oferecer como um quadro RIA (Rich Internet Application) ala do Flash.
Ele renderiza a interface do usuário usando Java2D, minimizando o impacto dos legados (IMO, inchados) do Swing e do AWT.
fonte
Swing + SwingX + Miglayout é a minha combinação de escolha. O Miglayout é muito mais simples do que o Swings percebeu 200 gerenciadores de layout diferentes e muito mais poderoso. Além disso, fornece a capacidade de "depurar" seus layouts, o que é especialmente útil ao criar layouts complexos.
fonte
Outra opção é usar o Qt Jambi . Possui quase toda a grandeza do Qt (muitos componentes, boa documentação, fácil de usar), sem o incômodo do C ++. Eu o 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 .
fonte
Minha opinião pessoal: Vá para o Swing junto com a plataforma NetBeans.
Se você precisar de componentes avançados (mais do que o NetBeans oferece), poderá integrar facilmente o SwingX sem problemas (ou JGoodies), pois a plataforma NetBeans é completamente baseada no Swing.
Eu não iniciaria um aplicativo de área de trabalho grande (ou um que seja grande) sem uma boa plataforma baseada na estrutura de interface do usuário subjacente.
A outra opção é SWT junto com o Eclipse RCP, mas é mais difícil (embora não impossível) integrar componentes Swing "puros" a esse aplicativo.
A curva de aprendizado é um pouco íngreme para a plataforma NetBeans (embora eu ache que seja verdade também para o Eclipse), mas existem alguns bons livros sobre os quais eu recomendo.
fonte
você esqueceu o Java Desktop Aplication baseado no JSR296 como Swing Framework interno no NetBeans
excluindo AWT e JavaFX, todas as suas estruturas descritas são baseadas no Swing; se você começar com o Swing, entenderá (claramente) todas essas estruturas baseadas no Swing.
ATW, SWT (Eclipse), Aplicação Java Desktop (Netbeans), SwingX, JGoodies
todas as estruturas (não sei mais nada sobre JGoodies) incl. O JavaFX não progride há muito tempo, muitos frameworks baseados no Swing são interrompidos, se não houver, sem a versão mais recente
apenas a minha opinião - o melhor deles é o SwingX, mas exigia um conhecimento mais profundo sobre o Swing,
Aparência dos frameworks baseados no Swing
fonte
with same progress
em SWT, SwingX, novo proprietário, novas maniersFiquei muito satisfeito com o Swing para os aplicativos de área de trabalho em que estive envolvido. No entanto, compartilho sua opinião sobre o Swing não oferecer componentes avançados. O que eu fiz nesses casos é ir para o JIDE. Não é gratuito, mas também não é tão caro e oferece muito mais ferramentas. Especificamente, eles oferecem uma TreeTable filtrável.
fonte
Eu iria com Swing. Para o layout, eu usaria o layout do formulário JGoodies. Vale a pena estudar o white paper sobre o Layout do formulário aqui - http://www.jgoodies.com/freeware/forms/
Além disso, se você começar a desenvolver um aplicativo de desktop enorme, precisará de uma estrutura. 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 documentar muito. Aqui está o link para procurar o código:
http://swingobj.svn.sourceforge.net/viewvc/swingobj/
O mostruário deve mostrar como fazer um logon simples, na verdade.
Deixe-me saber se você tiver alguma dúvida, eu poderia ajudar.
fonte