web-dev-qa-db-ja.com

デスクトップアプリケーション用のSwingとJavaFx

私は現在SWTを使っている非常に大きなプログラムを持っています。プログラムは、Windows、Mac、Linuxの両方で実行でき、それは多くの要素を持つ大きなデスクトップアプリケーションです。 SWTが少し古くなったので、SwingまたはJavaFXに切り替えたいと思います。そして、3つのことについてあなたの考えを聞きたいです。

私の主な関心事は、デスクトップGUIアプリケーションにとって何が良いのでしょうか? (私はオンラインで見ました、そして多くの人がJavaFXがSwingと同じくらい良いことを提案します、しかし私は単純な意見炎戦争以外に多くの有効な議論を見ませんでした)。 Windows、Mac、そしていくつかの人気のあるLinuxディストリビューションの両方で動作する必要があります。

  • 何がよりきれいで維持しやすいでしょうか?

  • そして、何をゼロから構築するのがより速いでしょうか?

それが何か助けになるならば、私は私のアプリケーションでMVC方法論を使用しています。

182
Quillion

クリーンで保守しやすいものは何ですか?

すべてが平等で、おそらくJavaFX-APIはコンポーネント間でずっと一貫しています。ただし、これはコードの記述に使用されるライブラリよりもコードの記述方法に大きく依存します。

そして、ゼロから構築する方が速いのは何ですか?

構築しているものに大きく依存します。 Swingにはより多くのコンポーネント(サードパーティと組み込み)があり、それらのすべてがまだ新しいJavaFXプラットフォームに進出しているわけではないため、何かが必要な場合はある程度の車輪の再発明が行われる可能性がありますビットカスタム。一方、トランジション/アニメーション/ビデオなどを行いたい場合は、FXの方がはるかに簡単です。

留意すべきもう1つのことは、(おそらく)ルックアンドフィールです。デフォルトのシステムのルックアンドフィールが絶対に必要な場合、JavaFX(現在)はこれを提供できません。私にとっては大したことではありません(とにかくデフォルトのFXルックを好みます)が、システムスタイルへの制限が義務付けられているポリシーがあることを認識しています。

個人的には、JavaFXはquiteがまだ存在しない(しかし使用可能以上ではない)「新進気鋭の」UIライブラリであり、Swingは今のところ完全に機能しサポートされている境界線レガシーUIライブラリであると考えています、しかし、おそらく今後数年間はそれほど多くないでしょう(したがって、FXがいつかそれを追い越す可能性があります)。

149
Michael Berry

Oracleが述べたように、JavaFXは彼らのJavaベースのリッチクライアント戦略における次のステップです。したがって、これは私があなたの状況にお勧めするものです:

保守がより簡単でクリーンなもの

  • JavaFXは、Swingに比べて、FXMLを使用してUIをマークアップする可能性や、CSSを使用したテーマの追加など、いくつかの改善点を導入しました。モジュール式の、クリーンで保守可能なコードを書くことには大きな可能性があります。

最初からビルドするほうが速いのは何か

  • これはあなたのスキルとあなたが使用するツールに大きく依存しています。
    • スイングのために、さまざまなIDEが迅速な開発のためのツールを提供しています。私が個人的に見つけた最高のものは NetBeans のGUIビルダーです。
    • 現時点ではSwingのサポートほど成熟していませんが、JavaFXもさまざまなIDEからサポートされています。ただし、FXMLおよびCSSでのマークアップのサポートにより、JavaFX上のGUI開発が直感的になります。

MVCパターンサポート

  • JavaFXはMVCパターンと非常に親しみやすく、プレゼンテーション(FXML、CSS)、モデル(Java、ドメインオブジェクト)、ロジック(Java)のように作業を明確に分けることができます。
  • 私見、SwingでのMVCサポートはそれほど魅力的ではありません。さまざまなコンポーネントにまたがるフローには、一貫性がありません。

詳細については、JavaFXに関するOracleの投稿FAQをご覧ください。

80

誰もそれについて言及していないが、「jfxrt.jar」サポートが欠けているために、JavaFXは、Oracle(例えばSolaris)によって「サーバー」と見なされる特定のアーキテクチャ上でコンパイルまたは実行されない。さらに通知があるまで、SWTを使用します。

14

この質問に対する正しい答えは1つもないと思いますが、このような大規模なオーバーホールを必要とする厳しい制限に遭遇しない限り、私のアドバイスはSWTに固執することです。

また、SWTは実際にはSwingよりも新しく、より積極的に保守されています。 (それは もともとネイティブコンポーネントを使ったSwingの代わりとして開発された

5

私はあなたが欲しいものをするいくつかの(サードパーティ?)コンポーネントを見つけるために周りを見たいと思います。私はあなたが複数のリソースを予約できる議題ビューのためにカスタムSwingコンポーネントを作成しなければなりませんでした、そして同様にキーボードナビゲーションなどでうまくいくExcelのようなグリッド。問題に遭遇したときはいつでもSwingの多くの複雑さを掘り下げる必要があったので、私はそれらがうまく動くようにするためにひどい時間を過ごしました。マウスやフォーカスの動作やその他多くのことを正しく行うのは非常に難しい場合があります。特に、通常のSwingユーザーにとってはそうです。 JavaFXがもう少し未来志向でスムーズに使えるようになってほしいと思います。

0
eriksensei

統合ビデオを搭載した古いノートブックでは、SwingアプリはJavaFXアプリよりもずっと早く起動し、動作します。開発に関しては、私はScalaに切り替えることをお勧めします - 匹敵するScala Swingアプリに含まれるコードはJavaよりも2、3倍少ないです。 Swing vs SWTに関しては:Netbeans GUIはEclipseよりかなり速いです...

0
user2053898