Swing vs JavaFx para aplicativos de desktop [fechado]

195

Eu tenho um programa muito grande que atualmente está usando SWT. O programa pode ser executado no Windows, Mac e Linux, e é um grande aplicativo de desktop com muitos elementos. Agora que o SWT é um pouco antigo, gostaria de mudar para Swing ou JavaFX. E eu gostaria de ouvir seus pensamentos sobre três coisas.

Minha principal preocupação é o que será melhor para um aplicativo de GUI de desktop? (Procurei on-line e muitas pessoas sugerem que o JavaFX é tão bom quanto o Swing, mas não vi muitos argumentos válidos, exceto simples guerras de opinião). Ele tem que funcionar no Windows, Mac e em algumas distribuições populares do Linux.

  • O que será mais limpo e fácil de manter?

  • e o que será mais rápido construir do zero?

Estou usando a metodologia MVC no meu aplicativo, se isso for de alguma ajuda.

Quillion
fonte
23
JavaFX é bom é você começar do zero. Também porque o JavaFX está substituindo oficialmente o Swing como a biblioteca de interface do usuário do Oracle para Java. Isso não significa que o Swing seja eliminado. Isso significa apenas que o JavaFX receberá muito mais atenção em cada versão. Com isso dito, já existem um milhão e meio de perguntas sobre esse tópico no SO e em outros lugares no Google.
Nico_c
3
stackoverflow.com/questions/10587713/… Eu também mencionei o Google. Muitas por aí já.
Nico_c
Ok, então a sugestão realmente parece ser fx, então vou manter isso aberto, mas vou aceitar uma resposta, eu acho. Obrigado pelos links.
Quillion
1
Aqui está um rápido resumo do JavaFX, embora qualquer SWT, Swing ou JavaFX funcione para produzir um aplicativo de desktop.
Jewelsea # 22/13
Ninguém o mencionou, mas o JavaFX não compila ou executa em certas arquiteturas consideradas "servidores" pela Oracle (por exemplo, Solaris), devido ao suporte "jfxrt.jar" ausente.
Malcolm Boekhoff 04/04

Respostas:

154

O que será mais limpo e fácil de manter?

Tudo sendo igual, provavelmente JavaFX - a API é muito mais consistente entre os componentes. No entanto, isso depende muito mais de como o código é escrito, e não da biblioteca usada para escrevê-lo .

E o que será mais rápido construir do zero?

Altamente dependente do que você está construindo. O Swing tem mais componentes para ele (de terceiros e embutidos) e nem todos chegaram à plataforma JavaFX mais recente ainda; portanto, pode haver uma certa quantidade de reinventar a roda, se você precisar de algo pouco personalizado. Por outro lado, se você quiser fazer transições / animações / vídeos, isso é uma ordem de magnitude mais fácil no FX.

Outra coisa a ter em mente é (talvez) a aparência. Se você absolutamente precisa ter a aparência padrão do sistema, o JavaFX (atualmente) não pode fornecer isso. Não é muito importante para mim (prefiro a aparência padrão de FX), mas sei que algumas políticas exigem uma restrição aos estilos do sistema.

Pessoalmente, vejo JavaFX como a "vinda para cima e" biblioteca de interface do usuário que não é muito lá ainda (mas mais do que útil), e Swing como a biblioteca UI limítrofe-legado que está totalmente caracterizado e apoiado por um momento, mas provavelmente não será muito nos próximos anos (e, portanto, as chances são de que o câmbio o ultrapassará em algum momento).

Michael Berry
fonte
1
Acredito que todos esses pontos se apliquem ao mundo .NET e também ao mundo da GUI de desktops, onde o Windows Presentation Foundation é a abordagem moderna com o objetivo de substituir o antigo Windows Forms; portanto, é teoricamente melhor em todos os aspectos, exceto que não será (ainda? mas já faz anos) suportam a aparência nativa de controles comuns / shell que você espera, como um simples diálogo de arquivo / navegador de diretório / controle de exibição em árvore.
bitoolean
84

Conforme declarado pela Oracle, o JavaFX é o próximo passo em sua estratégia de rich client baseada em Java. Portanto, é isso que eu recomendo para sua situação:

O que seria mais fácil e limpo de manter

  • O JavaFX introduziu várias melhorias no Swing, como a possibilidade de marcar UIs com FXML e a CSS com temas. Tem um grande potencial para escrever um código modular, limpo e sustentável.

O que seria mais rápido construir do zero

  • Isso depende muito de suas habilidades e das ferramentas que você usa.
    • Para balanço, vários IDEs oferecem ferramentas para desenvolvimento rápido. O melhor que encontrei pessoalmente é o construtor de GUI no NetBeans .
    • O JavaFX também tem suporte de vários IDEs, embora não tão maduro quanto o suporte que o Swing tem no momento. No entanto, seu suporte à marcação em FXML e CSS torna o desenvolvimento da GUI no JavaFX intuitivo.

Suporte de padrão MVC

  • O JavaFX é muito amigável com o padrão MVC e você pode separar seu trabalho de maneira limpa como: apresentação (FXML, CSS), modelos (Java, objetos de domínio) e lógica (Java).
  • IMHO, o suporte MVC no Swing não é muito atraente. O fluxo que você verá em vários componentes carece de consistência.

Para obter mais informações, consulte esta postagem de perguntas frequentes da Oracle sobre JavaFX aqui.

Yonathan W'Gebriel
fonte
14

Ninguém o mencionou, mas o JavaFX não compila ou roda em certas arquiteturas consideradas "servidores" pela Oracle (por exemplo, Solaris), devido ao suporte "jfxrt.jar" ausente. Fique com o SWT, até novo aviso.

Malcolm Boekhoff
fonte
13
O @Quillion pede algo para criar um aplicativo de desktop que "funcione tanto no Windows, no Mac quanto em alguns populares linux". . Então acho que ele não se importa com o Solaris.
Tim Büthe
5

Eu não acho que exista uma resposta certa para essa pergunta, mas meu conselho seria continuar com o SWT, a menos que você encontre sérias limitações que exijam uma revisão tão maciça.

Além disso, o SWT é realmente mais novo e mantido mais ativamente que o Swing. (Foi originalmente desenvolvido como um substituto para o Swing usando componentes nativos).

Russell Zahniser
fonte
16
O SWT nunca teve a intenção de substituir o Swing. Como assim? O Swing veio com Java da SUN e o SWT é executado apenas em plataformas 4 ou 5 e é originário da IBM e foi desenvolvido na Eclispe Foundation. Se você pudesse dizer: SWT visava substituir o AWT.
Anjo O'Sphere
0

Eu procurava em volta para encontrar alguns componentes (de terceiros?) Que fazem o que você deseja. Eu tive que criar componentes Swing personalizados para uma exibição da agenda onde você pode reservar vários recursos, bem como uma grade semelhante ao Excel que funciona bem com a navegação do teclado e assim por diante. Eu tive um tempo terrível para que eles funcionassem bem, porque eu precisava me aprofundar em muitos dos meandros do Swing sempre que encontrava um problema. O comportamento do mouse e do foco e muitas outras coisas podem ser muito difíceis de acertar, especialmente para um usuário ocasional do Swing. Espero que o JavaFX seja um pouco mais orientado para o futuro e fácil de usar.

eriksensei
fonte
0

Em notebooks mais antigos com vídeo integrado, o aplicativo Swing inicia e funciona muito mais rápido que o aplicativo JavaFX. Quanto ao desenvolvimento, eu recomendaria mudar para o Scala - o aplicativo Scala Swing comparável contém 2 a 3 vezes menos código que o Java. Quanto ao Swing vs SWT: a GUI do Netbeans consideravelmente mais rápida que o Eclipse ...

user2053898
fonte
É bom mencionar o Scala Swing
empate