この質問の事前調査を行っているときに、インターネット上にはJava Swingのベストプラクティスに関するよく整理された情報があまりないことがわかりました。だから、私はStack ExchangeにそのOne Great Listの構築を試してみるつもりです。
Java Swing開発のベストプラクティスは何ですか?何があなたのために働いているとわかったのですか?
この質問の事前調査を行っているときに、インターネット上にはJava Swingのベストプラクティスに関するよく整理された情報があまりないことがわかりました。だから、私はStack ExchangeにそのOne Great Listの構築を試してみるつもりです。
Java Swing開発のベストプラクティスは何ですか?何があなたのために働いているとわかったのですか?
回答:
私は私のために働いていたものについてのみ答えることができます。他のコメンテーターは、Java GUIは一般に、まったくネイティブではないルックアンドフィールの「不気味な谷」に陥ると指摘していますが、私はこれに異議を唱えません。
Action APIを十分に活用してください。これにより、ユーザーが実行するさまざまなアクションをより適切にカプセル化し、ショートカット、アクセラレータキー、ボタン、およびその他の入力オブジェクトにより簡単に結び付けることができます。
適切なレイアウトマネージャーを使用します。GridBagLayoutは非常に強力ですが、コメントの量が多くなければ維持できないと言っても過言ではありません。保守している古いGUIアプリでSonarなどの静的コード分析ツールを実行すると、GridBagsのレイアウトを適切にするために、大量のマジックナンバーが常に指摘されます。GroupLayoutで多くの成功を収めています。これにより、ピクセル単位の完全な配置を指定する必要がなくなります。
JDialogが必要だと思う場合は、おそらく必要ありません。ダイアログボックスは、ユーザーエクスペリエンスの点で恐ろしいものです。このアプリケーションは、すべてのメニューとフォームにダイアログボックスを使用し、奇妙な方法で最前面のルールを適用することにしました。これは、実際にメニュー上で何かを警告する必要があるときに、メンテナンスの悪夢に変わりました。キューは、フォーカスできないダイアログ(したがって、却下できないダイアログ)をクリックすることに不満を感じました。
必要に応じて、独自のマルチスレッドを実行する代わりにSwingWorkerを使用します。GUIに定期的な更新を提供しながら、SwingWorkerを拡張し、長時間実行するタスクを実行するのは非常に簡単です。クライアントアップデートのダウンロードを検討してください。ワーカースレッドのスケジューリングを処理し、ダウンロードの割合をビューにパブリッシュして、ProgressBarまたはあなたが持っているものを更新できるようにします。
明らかに限られた経験の中で、それが私が提案できるすべてです。
JDialog
ダイアログに使用する限り、まったく問題ありません。
JDialog
なく)。
最初のことの1つは、直接それに取り組むことではないと思います。Swing(IMHO)のレイアウトシステムはひどいものであり、そこから実質的なアプリを作成しようとするのは悪夢です。
私が使用した多くの代替レイアウトマネージャーのうちの2つは、MigLayoutおよびMultiSplitPaneレイアウトです。MigLayoutはより一般的な目的であり、考えられる任意のレイアウトを簡単かつ健全な方法で作成します。MultiSplitPaneはより具体的です。私はそれを使用して、あまり複雑ではないGUIの簡単なレイアウトを作成しました。
編集:これはスイングを置き換えません。Swingを使用する必要がある場合は、これらのレイアウトマネージャーを使用できます。これらは、Swingを管理するだけであり、Swingを置き換えるものではないためです。
もちろん、より良い代替手段はSwingを使用しないことです。Swingは、作業が恐ろしく、ネイティブに見えず、遅いために厳しく批判されています。Qt、SWT、GTKのように、すべきではないことをSwingから学んだ多くの選択肢が存在します。これらは、Swingの頭痛に対する優れた長期的ソリューションです。
編集:@Lord Torgamusが言ったように、Swingの使用を強制された場合、これらは実際には利用できません。これらを使用してプロジェクトを作成するときにこれを解決するのが最善であり、3/4の方法ではなく、レガシアプリを選択する場合です。
また、代替GUIのほとんどはネイティブライブラリを使用しているため、オペレーティングシステムのように見えてから、Swingまたは他のPure Java GUIにフォールバックすることに注意してください。