web-dev-qa-db-ja.com

Javaデスクトップアプリケーション:SWTとSwing

私はWeb開発者であり、最初の実際のデスクトップアプリケーションの構築を考えています。アイデアは、APIが利用できないWebアプリケーションで非常に反復的なタスクを自動化するツールを構築することです。

Javaを使用したいと思っています。以前はWebのものに使用し、構文をよく知っていて、アプリケーションを可能な限り簡単にクロスプラットフォームにすることを望んでいました。

よくわからないのは、SWTまたはSwingを使用すべきかどうかです。私の主な対象者はWindowsを使用しているため、できるだけネイティブにしたいと考えています。 LinuxとMacは動作するはずですが、ここでは外観はそれほど重要ではありません。

では、各UIフレームワーク、SwingまたはSWTの賛否両論は何でしょうか?

ありがとう。

PS:Eclipseを使用してWindowsで開発しています。しかし、Netbeansで遊ぶことを考えていました。

154
janpio

Pros Swing:

  • Javaライブラリの一部、追加のネイティブライブラリは不要
  • すべてのプラットフォームで同じように動作します
  • NetbeansおよびEclipseの統合GUIエディター
  • sun/Oracleによる優れたオンラインチュートリアル
  • 公式のJava拡張機能(Java OpenGLなど)でサポート

短所スイング:

  • ネイティブのルックアンドフィールは、実際のネイティブシステムとは異なる動作をする場合があります。
  • 重いコンポーネント(ネイティブ/ awt)はスイングコンポーネントを隠しますが、重いコンポーネントの使用はかなりまれなのでほとんどの場合問題ではありません

長所SWT:

  • 可能な場合はネイティブ要素を使用するため、常にネイティブ動作
  • eclipse、GUIエディターVEPでサポート(VEPはSwingおよびAWTもサポート)
  • 多数のオンライン例
  • awtおよびswingコンポーネントの使用を可能にするawt/swtブリッジが統合されています

短所SWT:

  • サポートされるシステムごとにネイティブライブラリが必要
  • 使用されているネイティブリソースのために、すべてのシステムですべての動作をサポートしているとは限りません(ヒントオプション)
  • ネイティブリソースを管理しますが、ネイティブコンポーネントは多くの場合、親とともに破棄されますが、フォントなどの他のリソースは手動でリリースするか、自動リリース用のコンポーネントの破棄リスナーとして登録する必要があります。
150
josefx

考慮すべき重要なことは、一部のユーザーと一部の再販業者(Dell)が64ビットWindowsに64ビットVMをインストールし、32ビットと64ビットのVMで同じSWTライブラリを使用できないことです。

これは、ユーザーが32ビットまたは64ビットのJava VMを持っているかどうかに応じて、異なるパッケージを配布およびテストする必要があることを意味します。たとえば、Azureusの場合は この問題 を参照してください。しかし、Eclipseの場合もあります。現在、フロントダウンロードページのビルドは64ビットVMで実行されません。

63

プロスイング:

  • Swing IMHOの最大の利点は、ライブラリをアプリケーションと共に出荷する必要がないことです(これにより、数十MB(!)を回避できます)。
  • ネイティブのルックアンドフィールは、スイングよりも初期よりは​​るかに優れています。
  • パフォーマンスはswtと同等です(スイングは遅くありません!)
  • NetBeansは、快適なコンポーネントビルダーとしてMatisseを提供しています。
  • JavaFX内のSwingコンポーネントの統合は簡単です。

しかし、最終的には、「純粋な」スイングまたはswtを使用することはお勧めしません;-) Swing/swt outにはいくつかのアプリケーションフレームワークがあります。 こちらをご覧ください 。最大のプレーヤーはnetbeans(swing)とEclipse(swt)です。もう1つのNiceフレームワークはグリフォンで、Niceの「コンポーネントセット」はピボット(スイング)です。 Griffonは多くのライブラリと swingだけでなく ;を統合しているため非常に興味深いです。また、ピボット、SWTなど

23
Karussell

Swingを使用する理由はいくつかあります。

  • それはずっと前からあり、より多くの開発努力が適用されてきました。したがって、より多くの機能が完了し、(おそらく)バグが少なくなります。

  • パフォーマンスの高いアプリケーションの作成に関する多くのドキュメントやその他のガイダンスがあります。

  • Swingの変更はすべてのプラットフォームに同時に伝播し、SWTの変更は最初にWindows、次にLinuxに表示されるようです。

非常に機能豊富なアプリケーションを構築する場合は、 NetBeans RCP (Rich Client Platform)を確認することをお勧めします。学習曲線はありますが、少し練習すればすてきなアプリケーションをすばやくまとめることができます。有効な判断を下すには、Eclipseプラットフォームに関する十分な経験がありません。

RCP全体を使用したくない場合、NetBeansには、引き出して独立して使用できる多くの便利なコンポーネントもあります。

もう1つのアドバイスとして、さまざまなレイアウトマネージャーを検討します。私が学んでいたとき、彼らは長い間私をつまずかせました。最高のもののいくつかは、標準ライブラリにさえありません。 MigLayout (SwingとSWTの両方)および JGoodies フォームツールは、私の意見では最高の2つです。

13
clartaq

私は、それがJavaの「ネイティブ」だからという理由だけでスイングを選択します。

さらに、 http://swingx.Java.net/ をご覧ください。

10
zeroed

要件としては、Swingを使用する方が簡単であり、SWTほどネイティブプラットフォームに緊密に統合されていないため、最終的にはSwingを使用するように思えます。

通常、スイングは安全な賭けです。

8
Yuval Adam

興味深い質問。 (SwingやAWTとは異なり)SWTについて自慢するにはあまりよくありませんが、SWT/Swing/AWTで行われた比較です。

http://www.developer.com/Java/other/article.php/10936_2179061_2/Swing-and-SWT-A-Tale-of-Two-Java-GUI-Libraries.htm

そしてここに、SWTの基本的に何でもチュートリアルを入手できるサイトがあります( http://www.Java2s.com/Tutorial/Java/0280__SWT/Catalog0280__SWT.htm

あなたが正しい決定をすることを願っています(コーディングに正しい決定がある場合)... :-)

6
Buhake Sindi

考慮すべきこと:スクリーンリーダー

何らかの理由で、スクリーンリーダー(およびJava AccessBridge for Windows)を使用すると、一部のSwingコンポーネントがうまく機能しません。スクリーンリーダーが異なれば動作も異なることを知ってください。私の経験では、SWT-Treeは、Swing-Treeとスクリーンリーダーの組み合わせよりもはるかに優れたパフォーマンスを発揮します。したがって、アプリケーションでは、SWTコンポーネントとSwingコンポーネントの両方を使用することになりました。

適切なSWTライブラリを配布およびロードするには、次のリンクが役立つことがあります。 http://www.chrisnewland.com/select-correct-swt-jar-for-your-os-and-jvm-at -runtime-191

4
incomudro

一握り以上の機能を備えたフル機能のアプリケーションを構築する予定がある場合は、フレームワークとしてEclipse RCPを使用することをお勧めします。

アプリケーションのサイズが大きくなりすぎない場合、または要件があまりにもユニークすぎて通常のビジネスフレームワークで処理できない場合は、Swingを使用して安全にジャンプできます。

最後に、両方のテクノロジーを試して、自分に合ったものを見つけることをお勧めします。 Netbeans対Eclipse対IntelliJのように、ここには絶対的な正解はなく、両方のフレームワークには独自の欠点があります。

プロスイング:

  • より多くの専門家
  • よりJavaに近い(ほとんどパブリックフィールドがなく、リソースに配置する必要がない)

プロSWT:

  • より多くのOSネイティブ
  • もっと早く
4
nanda

SWTは、世紀の変わり目におけるSwingの低迷への対応として作成されました。パフォーマンスの違いはごくわずかになってきているので、Swingは標準アプリケーションにとってより良い選択肢だと思います。 SWT/Eclipseには、多くのボイラープレートコードに役立つNiceフレームワークがあります。

3
Oliver Watkins