web-dev-qa-db-ja.com

Swing、SWT、AWT、SwingX、JGoodies、JavaFX、Apache Pivot

Java用のguiフレームワークはたくさんありますが、今日の最適なフレームワークとして認識されているものは何ですか?

以下は異なるフレームワークについての私の理解です。imが間違っている場合は訂正してください。これは非常に大まかに定義された一連の質問ですが、リッチなguiアプリケーションを作成することを考えている人にとっては、まだ価値があると思います。


_ awt _

スイングの基礎となるもので、パフォーマンスは優れていますが、高度なコンポーネントが不足しています。あなたがリッチなアプリケーションを作成しようとしているなら、AWTはおそらく進むべき道ではありません。ただし、リッチなユーザーインターフェイスを必要としない小規模のguiアプリケーションには。これは実証済みのフレームワークであるため、これは完全に適しているかもしれません。


Swing

前述のようにAWTに基づいています。その初期のころは遅くてバグがあるとみなされ、IBMにEclipse用のSWTを作成させました。しかしJava 5(または6?)では、Swingは新しいアプリケーションを構築するための選択の枠組みとなりました。 Swingには豊富なコンポーネントがたくさんありますが、まだいくつかの分野では欠けています。 1つの例は、ソートとフィルタリング/検索を実行できるフル機能のTreeTableコンポーネントがないということです。


_ swt _

IBMがEclipse用に作成した彼らは、当時はSwingはEclipseには適していなかったと考えているようでした。それ自体はかなり低レベルであり、JNIを介してプラットフォームのネイティブウィジェットを使用します。 SwingやAWTとはまったく関係ありません。しかし彼らのAPIは少し不格好で直感的にはわかりません。それらはTreeTableのような高度なコンポーネントを持っています。 (しかし、私は彼らが箱から出してソートとフィルタリングをサポートするとは思わない)。 SWTは(JNIを通して)いくつかのネイティブバインディングを使っています、そしてインターネット上の猛威はこのフレームワークが今日のプロジェクトで使われるべきでないということです。 (何故なの?)


SwingX

Swingに基づいており、その使命は、Swing用の豊富なコンポーネントを作成することです。まだ開発中です。 (ただし、あまりアクティブではありません。)たとえばTreeTableのように、非常に素晴らしいコンポーネントのセットがあります。しかしTreeTableは私の知る限りではフィルタリングとソートをサポートしていません。ただし、強調表示による検索はサポートされていません。

SwingXは、既存のSwingコンポーネントの拡張機能または構成要素であるコンポーネント(AFAIU)です。


JGoodies

私は何も知らないフレームワーク...長所と短所は何ですか? Jgoodiesは他のセットと何が違うの?

JGoodies OTOHはPLAFとレイアウトについてです。


JavaFX

Java/Oracleの最新のフラッグシップ。リッチデスクトップまたはWebアプリケーションの開発における事実上の標準であることを約束します。


Apacheピボット

Java2Dを使用してUIをレンダリングするため、SwingおよびAWTの(IMO、肥大化)遺産の影響を最小限に抑えることができます。 (@Augustus Thoo)

主な焦点はRIA(Rich Internet Applications)ですが、デスクトップアプリケーションにも適用できるようです。そして個人的なコメントとして、とても面白そうですね!私はそれがApacheプロジェクトであることが特に好きです。

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


Qt Jambi

C/c ++で書かれたネイティブqtライブラリへのJavaラッパー。非常に強力で、広く使用されていて受け入れられています。たくさんのGUIコンポーネントと使いやすいAPIがあります。

http://qt-jambi.org/ /


だから、私は何を求めているのかを少し要約することを試みるために:

今日のJavaでデスクトップアプリケーションを作成したいとします。これには多くの高度なコンポーネントが含まれています。なぜ?

これらのフレームワークのどれが廃止予定として認識されるべきであり、どれが遠い将来のフレームワークとして認識されるべきですか?

今日のデファクトスタンダードフレームワークとは何ですか?また、Java guiアプリケーションを作成するためにどのツールを使用しますか?


私はこれを尋ねることを後悔するかもしれませんが、とにかくそれを試してみてください。

C#/。Netは、あらゆる方向に曲げることができる非常に優れた使いやすいコンポーネントのセットを持っていると言われています。そして、ある程度異なるJavaフレームワークを調査した後、私はJavaについて同じことを言うことができないようです。どうしてこれなの? なぜJava(これは世界で最も広く使用されているプログラミング言語です)が同じGUIコンポーネントのセットを持っていないのですか?

Javaがそれらのguiコンポーネントをはるかに低いレベルでベースにしていて、探しているこれらすべてのアドバンストコンポーネントを書くことは可能ですが、あなたはすべての仕事ではないにしても多くをしなければなりませんか?

229
netbrain

決定木:

  1. QtやSWTのようなフレームワークはネイティブDLLを必要とします。それで、あなたはあなた自身に尋ねなければなりません:すべての必要なプラットフォームはサポートされますか?アプリにネイティブDLLをパッケージ化できますか。

    ここで、SWTのためにこれを行う方法を参照してください

    ここに選択肢がある場合は、SWTよりもQtをお勧めします。 QtはUIとデスクトップを理解する人々によって開発されましたが、SWTはEclipseをより速くするために必然的に開発されました。これは、UIフレームワークよりもJava 1.4のパフォーマンスパッチです。 JFaceがなければ、多くの主要なUIコンポーネントやUIコンポーネントの非常に重要な機能(テーブルのフィルタリングなど)が欠けています。

    SWTに必要な機能が欠けている場合、フレームワークはそれを拡張するのにやや敵対的です。たとえば、その中にクラスを拡張することはできません(クラスは最終的なものではなく、this.getClass()のパッケージがorg.Eclipse.swtではない場合は例外をスローします。署名されているため新しいパッケージを追加できません)。

  2. ネイティブの純粋なJavaソリューションが必要な場合は、それだけで済みます。 AWT、Swing、SwingX - Swingの方法から始めましょう。

    AWTは古くなっています。 Swingは時代遅れになっています(おそらくそれほどではありませんが、過去10年間Swingに関して行われた作業はそれほど多くはありません)。あなたはSwingが最初から良いと主張したかもしれませんが、我々は皆コードが腐敗していることを知っています。そしてそれは今日のUIに特に当てはまります。

    それはSwingXをあなたに残します。ゆっくりとした進歩の長い期間の後、 開発は再び拾ってきました 。 Swingの主な欠点は、15年前にEdgeから出血していたが、今日では「不器用な」と感じる古いアイデアに頼っていることです。たとえば、テーブルビューはフィルタリングと並べ替えをサポートしていますが、これを設定する必要があります。現代的に感じられるまともなUIを得るためだけに、たくさんの定型コードを書く必要があります。

    もう一つの弱点はテーマです。今日の時点で、周りのテーマがたくさんあります。 トップ10についてはこちらをご覧ください 。しかし、いくつかは遅く、いくつかはバグがあり、いくつかは不完全です。私がUIを書くとき、私はそれが嫌いです、そして、ユーザーが彼らが奇妙なテーマを選んだので、何かが彼らのために働かないと不平を言います。

  3. JGoodiesはSwingXのような、Swingの上にあるもう1つの層です。それはSwingをより快適に使えるようにしようとしています。そのWebサイトはすごく良さそうです。チュートリアルを見てみましょう。 Webサイトにはドキュメントがまったくないようです。 グーグルが助けに 。いいえ、役に立つチュートリアルはまったくありません。

    私は潜在的な新しいファンからドキュメンテーションを隠すのをそんなに難しくしようとするUIフレームワークに自信を持って感じません。それはJGoodiesが悪いという意味ではありません。私はちょうどそれについて言うために良い何かを見つけることができませんでしたが、それはいいように見えます。

  4. JavaFX素晴らしい、スタイリッシュ。サポートはありますが、本格的なUIフレームワークというよりは、光沢のあるおもちゃのようなものです。この感覚は、ツリーテーブルのような複雑なUIコンポーネントがないことに起因しています。 HTMLを表示する webkitベースのコンポーネントがあります

    それが紹介されたとき、私の最初の考えは「5年が遅すぎた」でした。あなたの目的が電話やウェブサイトのための素晴らしいアプリであれば、いいです。あなたの目的がプロのデスクトップアプリケーションであるならば、それがあなたが必要とするものを届けることを確認してください。

  5. ピボット。初めて聞いた。それは基本的にJava2Dに基づく新しいUIフレームワークです。それで昨日試してみました。 Swingなし、ほんの少しのAWT(new Font(...))。

    私の最初の印象はいいものでした。あなたが始めるのを助ける広範囲のドキュメンテーションがあります。 例のほとんどはライブデモ (注:WebブラウザでJavaを有効にしておく必要があります; これはセキュリティ上のリスクです )ので、コードとコードを見ることができます。結果として生じるアプリケーションは並んでいます。

    私の経験では、ドキュメンテーションよりもコードに多くの努力が注がれています。ピボットドキュメントを見ることによって、コードに多くの努力が払われたに違いありません。現在、ブラウザでいくつかの例が機能しなくなるバグ( PIVOT-858 )があることに注意してください。

    私のピボットの第二の印象は、それが使いやすいということです。私が問題に遭遇したとき、私は例を見ることによって通常すぐにそれを解決することができました。ただし、各コンポーネントがサポートしているすべてのスタイルの参照がありません。

    JavaFXと同様に、ツリーテーブルコンポーネント( PIVOT-306 )のようないくつかの高レベルコンポーネントが欠けています。私はテーブルビューで遅延ロードを試みませんでした。私の印象は、基礎となるモデルが遅延ロードを使用するのであれば、それで十分だということです。

    有望。可能であれば、試してみてください。

80
Aaron Digulla

_ swt _ 自体はかなり低レベルであり、JNIを介してプラットフォームのネイティブウィジェットを使用します。 SwingやAWTとはまったく関係ありません。 Eclipse IDE 、および Vuze BitTorrentクライアント などのすべてのEclipseベースのリッチクライアントアプリケーションは、SWTを使用して構築されています。また、Eclipseプラグインを開発している場合は、通常はSWTを使用します。
私はここ5年近くEclipseベースのアプリケーションとプラグインを開発してきたので、明らかに偏っています。しかし、私はSWTとその上に構築されている JFace UIツールキット についても豊富な経験を持っています。私はJFaceが非常に豊かで強力であることがわかりました。場合によっては、それがSWTを選択する主な理由になることさえあります。 IDEのようなものであれば(テーブル、ツリー、ネイティブコントロールなどを含む)、作業中のUIをすばやく完成させることができます。もちろん、カスタムコントロールを統合することもできますが、それにはさらに手間がかかります。

13
Zsolt Török

私は別のフレームワークを提案したいと思います:Apache Pivot http://pivot.Apache.org/ /。

私は簡単に試してみましたが、RIA(Rich Internet Application)フレームワークとして提供できるものに感心しました ala Flash。

Java2Dを使用してUIをレンダリングするため、SwingおよびAWTの(IMO、肥大化)遺産の影響を最小限に抑えることができます。

11
Augustus Thoo

もう一つの選択肢は Qt Jambi を使うことです。 C++の煩わしさなしに、Qtの偉大さ(多くのコンポーネント、優れたドキュメント、使いやすい)のほとんどすべてを備えています。私は3〜4年前にそれを小さなプロジェクトに使っていましたが、それでもそれはほぼ成熟していました。

あなたはSwing vs. Qtについての議論を見たいかもしれません ここ

9
nimcap

Swing + SwingX + Miglayout は私が選んだ組み合わせです。 Swingsが200人の異なるレイアウトマネージャを認識し、はるかにパワフルになるより、Miglayoutはとても単純です。また、レイアウトを「デバッグ」する機能も提供されます。これは、複雑なレイアウトを作成するときに特に便利です。

9
helpermethod

私の個人的な意見:NetBeansプラットフォームと一緒にSwingを試してみてください。

NetBeansプラットフォームは完全にSwingをベースとしているため、高度なコンポーネント(NetBeansが提供する以上のもの)が必要な場合は、問題なくSwingX(またはJGoodies)を簡単に統合できます。

基礎となるUIフレームワーク上に構築された優れたプラットフォームがないと、私は大規模なデスクトップアプリケーション(または大規模になる予定のもの)を起動することはできません。

もう1つの選択肢はEclipse RCPと一緒のSWTですが、「純粋な」Swingコンポーネントをそのようなアプリケーションに統合することは(不可能ではありませんが)困難です。

NetBeansプラットフォームでは習熟曲線が少し急になっています(ただし、Eclipseにも当てはまると思います)が、良い本がいくつかありますので、そのことを強くお勧めします。

あなたはNetBeansの組み込みSwingフレームワークとしてJSR296に基づくJavaデスクトップアプリケーションを忘れていました

aWTとJavaFXを除くあなたの好きなフレームワークはすべてSwingをベースにしています、もしあなたがSwingから始めるなら、あなたは(明らかに)これらすべてのSwing(ベースフレームワーク)について理解されるでしょう

ATW、SWT(Eclipse)、Javaデスクトップアプリケーション(Netbeans)、SwingX、JGoodies

そこにあるすべてのフレームワーク(私はJGoodiesについてもっと何かを知りません) JavaFXはそれほど進歩していません。最新バージョンがなければ、SwingのBased Frameworksは停止します。

私の考えでは、SwingXが最も優れていますが、Swingに関する深い知識が必要です。

ルックアンドフィール Swingのベースフレームワーク

4
mKorbel

私はSwingと一緒に行きます。レイアウトにはJGoodiesフォームレイアウトを使います。ここでフォームレイアウトのホワイトペーパーを勉強する価値があります - http://www.jgoodies.com/freeware/forms/ /

また、巨大なデスクトップアプリケーションの開発を始めようとしているのなら、間違いなくフレームワークが必要になるでしょう。他の人たちは、NetBeansフレームワークを指摘しました。私はそれがあまり好きではなかったので、私たちが今私の会社で使う新しいものを書きました。私はそれをsourceforgeに入れました、しかしそれを文書化する時間をあまり見つけませんでした。ここにコードを閲覧するためのリンクがあります:

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

ショーケースは実際に簡単なログオンをする方法をあなたに示すべきです。

あなたがそれについて何か質問があれば私に教えてください。

3
sethu

私が関わってきたデスクトップアプリケーションについては、Swingに非常に満足しています。これらの場合に私がしたことはJIDEに行くことです。それは無料ではありません、しかしそれほど高価でもありません、そしてそれはあなたにあなたのベルトの下であなたにずっと多くのより多くのツールを与えます。具体的には、それらはフィルタリング可能なTreeTableを提供します。

3
sbrattla