デスクトップアプリケーション用のSwing vs JavaFx [終了]


195

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

私の主な関心事は、デスクトップGUIアプリケーションに対して何が改善されるかです。(私はオンラインで見ましたが、多くの人がJavaFXはSwingと同じくらい優れていると示唆していますが、単純な意見の炎の戦争を除いて、多くの有効な議論はありませんでした)。Windows、Mac、および一部の一般的なLinuxディストリビューションで動作する必要があります。

  • 何がよりクリーンでメンテナンスが容易になりますか?

  • そして、最初から構築する方が速いのは何ですか?

私のアプリケーションでMVC方法論を使用しています。


23
JavaFXは、ゼロから始めるのが良いです。また、JavaFXはオラクルのJava用UIライブラリとしてSwingを公式に置き換えているためです。これは、Swingが廃止されたという意味ではありません。これは、JavaFXがすべてのリリースでより多くの注目を集めることを意味します。そうは言っても、SOに関するこのトピックやGoogleの他の場所についてはすでに100万半の質問があります。
nico_c 2013年

3
stackoverflow.com/questions/10587713/…Googleについても触れました。すでにたくさんあります。
nico_c 2013年

わかりましたので、提案は本当にfxのようです、私はこれを開いたままにしますが、私が推測する答えを受け入れます。リンクをありがとう。
クオリオン

1
SWT、Swing、またはJavaFXのいずれもがデスクトップアプリケーションを作成するために機能しますが、ここにJavaFXの簡単な要約があります。
jewelsea

誰もそれについて言及していませんが、「jfxrt.jar」サポートが欠落しているため、JavaFXはOracleによって「サーバー」と見なされる特定のアーキテクチャー(Solarisなど)でコンパイルまたは実行されません。
Malcolm Boekhoff 2014

回答:


154

何がよりクリーンでメンテナンスが容易になりますか?

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

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

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

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

個人的には、JavaFXはまだまだ機能していない(ただし、まだ十分でありません)UIライブラリであり、Swingは、今のところ完全に機能およびサポートされているボーダーラインレガシーUIライブラリであると考えています。今後数年間で非常に多くなります(したがって、ある時点でFXがそれを追い越す可能性があります)。


1
これらの点はすべて、.NETの世界にも、デスクトップのGUIの世界にも当てはまると思います。WindowsPresentation Foundationは、古いWindowsフォームを置き換えることを目的とした最新のアプローチであるため、理論的にはそれ以外のすべての面で優れています(まだ?しかし、それは数年前です)単純なファイルダイアログ/ディレクトリブラウザー/ツリービューコントロールなどのネイティブコモンコントロール/シェルルックをサポートします。
-bitoolean

84

Oracleによると、JavaFXはJavaベースのリッチクライアント戦略の次のステップです。したがって、これは私があなたの状況に推奨するものです:

メンテナンスがより簡単でクリーンになるもの

  • JavaFXは、FXMLでUIをマークアップしたり、CSSでテーマを設定したりするなど、Swingにいくつかの改善を加えました。モジュール化された、クリーンでメンテナンス可能なコードを書く大きな可能性があります。

ゼロから構築する方が速いでしょう

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

MVCパターンのサポート

  • JavaFXはMVCパターンに非常に友好的であり、プレゼンテーション(FXML、CSS)、モデル(Java、ドメインオブジェクト)およびロジック(Java)として作業を明確に分離できます。
  • IMHO、SwingでのMVCサポートはあまり魅力的ではありません。さまざまなコンポーネント間で表示されるフローには一貫性がありません。

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


14

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


13
@Quillionは、「Windows、Mac、および一部の人気のあるLinuxフレーバーの両方で動作する必要があるデスクトップアプリケーションを構築するために特別に何かを求めています。。だから私は彼がSolarisを気にしていないと思います。
TimBüthe2014

5

この質問に対する正解は1つではないと思いますが、このような大規模なオーバーホールを必要とする深刻な制限が発生しない限り、SWTを使用することをお勧めします。

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


16
SWTは、Swingに置き換わるものではありませんでした。どうして?SwingはSUNのJavaに付属しており、SWTは4または5プラットフォームでのみ実行され、もともとはIBMから提供され、Eclispe Foundationでさらに開発されました。SWTはAWTを置き換えることを目的としています。
エンゼルO'Sphere

0

私は周りを見回して、あなたが望むことをするいくつかの(サードパーティ?)コンポーネントを見つけます。複数のリソースを予約できる議題ビューのカスタムSwingコンポーネントと、キーボードナビゲーションなどとうまく機能するExcelのようなグリッドを作成する必要がありました。問題が発生したときはいつでも、Swingの多くの複雑な部分を深く掘り下げる必要があったので、私はそれらをうまく機能させるのに恐ろしい時間を費やしました。特にカジュアルなSwingユーザーにとっては、マウスやフォーカスの動作など、多くのことを正しく行うのが非常に難しい場合があります。私は、JavaFXがもう少し未来志向で、箱から出してスムーズであることを願っています。


0

統合ビデオを備えた古いノートブックでは、Swingアプリが起動し、JavaFXアプリよりもはるかに速く動作します。開発に関しては、Scalaに切り替えることをお勧めします。同等のScala Swingアプリには、Javaの2..3倍のコードが含まれています。SwingとSWTについて:Eclipseよりもかなり高速なNetbeans GUI ...


Scala Swingについて言及するのは良いことです。
描画してください。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.