7

GridBagLayout によって管理されるレイアウトの個々のコンポーネントを非表示にすると、レイアウト内の残りのコンポーネントの配置が変化し続けます。GridBagLayout は、非表示のコンポーネントでセルを「折りたたむ」ように見え、他のコンポーネントの位置が変更されます。これは非常に厄介な動作であり、私はそれを防ぐ方法を探していました。

私が試した1つの方法は、同じセルにスペーサーを追加することです。固定サイズは、非表示になる可能性のあるコンポーネントの優先サイズに等しくなりますが、その優先サイズが変更されると、多くの問題が発生しますスペーサーを同期させます。より良い方法はありますか?

実際には、GridBagLayout が目に見えないコンポーネントを含むセルを本当に完全に無視してもそれほど悪くはありませんが、それでもセルのインセットが考慮されます。中間にあるコンポーネントを非表示にすると、レイアウトから削除されますが、ギャップは残ります。これは、通常、周囲のコンポーネントが一緒に流れることを意味しますが、それらの間に醜いダブル幅のギャップがあります...

4

4 に答える 4

8

JPanel (または Box) をプレースホルダーとして使用するのはどうですか?
各セルに JPanel を配置し、コンポーネントをパネルに追加します。コンポーネントを非表示にすると、パネルはまだそこにあるはずです...

于 2010-01-21T13:33:20.817 に答える
1

MigLayoutを使用する

レイアウトの楽しさを取り戻すために^^.

過去に GridBagLayout も使用しましたが、ひどいものです。ボイラープレート コードがたくさんあり、小さなコンポーネントを 1 つ追加すると、レイアウトが台無しになる可能性が高くなります。

別の代替手段はBoxlayoutを使用することです

于 2010-01-21T11:30:21.980 に答える
1

1 つの可能性は、コンポーネントを非表示に設定する代わりに、 CardLayoutでネストされたパネルを使用してコンポーネントを非表示にすることです。CardLayout を使用すると、パネルは常に最大の「カード」のサイズになります。

または、GridBagLayout の代わりに新しい (Java 6 以降の) GroupLayoutを使用してみることができます。これは、IMO よりもはるかに使いやすく、ほぼ同じくらい強力です。

于 2010-01-21T10:47:28.007 に答える
0

IIRC、私が過去に行ったことは、元のコンポーネントのサイズを模倣するコンテナーにコンポーネントを配置する (または別のコンポーネントを使用する) ことですが、非表示の状態であるかどうかは関係ありません。これをメソッドまたはファサード トゥ グリッド バッグに入れると、レイアウト コードをきれいに保つことができます。

于 2010-01-21T13:52:21.453 に答える