3

Swing のコントロールの周囲に必要なスペースのガイドラインはありますか? また、それをどのように正確に達成するかについての質問もあります。一部のレイアウト マネージャーは、コントロール間のギャップをサポートしています。使用しないものもあります。EmptyBorderこれは、境界線が重ならず、2 つのコントロール間のスペースが大きくなりすぎる可能性があるため、苦痛になる可能性があります1 。国境。

もう 1 つの問題は、ルック アンド フィールです。明示的なギャップまたは境界線を使用すると、ある LAF では問題なく見えても、別の LAF では見栄えが悪い場合があります。たとえば、Nimbus は、ボタンの周りに余分なスペースがあるため、ボタンがぎっしり詰まっていても見栄えがします。デフォルトの Windows LAF は、余分なスペースなしでそれらを詰め込むだけです。Microsoft、Apple、Gnome などはすべて、このトピックに関する異なるガイドラインを持っているため、これ基本的にプラットフォームの問題であることを認識しています。

そのため、Windows または Metal LAF に対応するためにコントロール間に余分なスペースを入れると、Nimbus やその他のシステムではスペースが離れすぎてしまいます。

次に、UI をどのように構築するかという全体的な問題があり、間隔と境界線の柔軟性に重大な副作用があります。すべてを 1 つのコンテナーにGridBagLayout入れることは、この観点からは素晴らしいことですが、それでも UI を変更する必要がある場合は恐ろしいことです。次に、適切なレイアウト マネージャーを使用して複数の から UI を構築しJPanelます。その逆も同様です。

要するに、あまり手間をかけずに、コントロールが適切に配置され、LAF に適合していることを確認するにはどうすればよいでしょうか? たぶん、私はここで何かを見落としているだけなのかもしれません。


1少なくとも私にとっては問題でした。実行可能な解決策があるかもしれませ。しかし、2 つのコントロールを隣り合わせに配置する単純なケースを考えると、それらの周囲におそらく 5 ピクセルの空白が必要です。書き込み方向に応じて異なる境界線を作成せずに、一般的なケースでこれがどのように機能するかはわかりません(左と右は必ずしもコントロールが移動する場所ではなく、明らかに常に境界線がある場所であるため)。

4

4 に答える 4

2

これらの種類のガイドラインは、プラットフォームとルックアンドフィールの両方に依存します。

javax.swing.LayoutStyleユーティリティメソッドを使用して、コンポーネントとその埋め込みパネルの間、または2つのコンポーネント間で使用する必要のある間隔を見つけることができます。

ただし、これは非常に面倒です。

LayoutManagerそれを直接サポートするを使用することを検討してください。MigLayoutを提案している人もいますが、開発者に対してコンポーネントの間隔を完全に透過的にするDesignGridLayoutを確認することもできます。

このようなLayoutManagerを使用する場合は、寸法やインセットを自分で設定するのではなく、それらに作業を任せる必要があります。

さらに、モニターの解像度に応じて間隔が変わる可能性があるため、適切なPLAFを選択することが重要です(選択したPLAFでサポートされていない場合、Hi-DPI画面で見苦しい動作をする可能性があります)。

どのPLAFが解像度に依存しないか(つまり、HiDPIデバイスの処理方法を知っているか)を列挙することはできませんが、Substanceは確かにそのうちの1つであり、一般的に非常に優れたPLAFです。

于 2010-06-20T11:36:45.870 に答える
1

プラットフォームに依存するギャップがあるMigLayoutを使用して、この問題を解決しました。それに加えて、ボタンのサイズやシーケンスなど、プラットフォームに依存する他の機能を提供します。

強くお勧めします!

于 2010-06-19T14:21:30.983 に答える
0

すべての L&F とすべてのレイアウトについて、確信が持てません: それはあなたの目的ではなく、l&f とレイアウトの目的です。

通常、swing アプリケーションでは、開発者がレイアウトを選択し、ユーザーが l&f を選択します。

レイアウトは境界線を変更しません (構成要素の一部です) が、インセットを変更できます。したがって、レイアウト、ボーダー、インセットを組み合わせて使用​​してください。

BoxLayout にはFillerRigidAreaの概念があります。非表示コンポーネントを Filler として使用するを参照してください。

SpringLayout には制約があります。SpringLayout の使用方法を参照してください。

GroupLayout はギャップを使用します。GroupLayout の使用方法を読むことができます。GroupLayout は手動では非常に複雑ですが、netbeans の matisse を使用すると非常に簡単です。

于 2010-06-19T12:31:34.450 に答える
0

あなたの質問は、間隔を空ける方法ではなく、いつどれだけ間隔を空けるかについての質問だと思います。Sun Oracle のJava Look and Feel Design Guidelines, 4:Visual Designは、論理的なグループ化に重点を置いており、タイトル付きの境界線を控えめに使用しています。これはゲームの具体的なです。

于 2010-06-19T17:11:46.753 に答える