3

行に垂直BoxLayoutおよびFlowLayoutJPanelsを使用する次のフォームがあります。

ここに画像の説明を入力してください

各行間の大きなギャップを小さくするにはどうすればよいですか?これは私のコードです:

4

3 に答える 3

13

問題は、BoxLayoutがコンポーネントの最大サイズを尊重することです。パネルには最大サイズがないため、各パネルの高さが高くなり、使用可能なスペースを占有します。

別の解決策は、コンポーネントをパネルに追加した後、各パネルの最大サイズを決定することです。

pnlName.setMaximumSize( pnlName.getPreferredSize() );
pnlSurname.setMaximumSize( pnlSurname.getPreferredSize() );
pnlAge.setMaximumSize( pnlAge.getPreferredSize() );
于 2013-02-01T19:09:09.157 に答える
5

接着剤(目に見えないコンポーネント)を使用して、空き領域を埋めることができます。このドキュメントを参照してください

ボックスレイアウトの代わりに、VerticalLayoutを使用することもできます。残念ながら、swing apiには存在しませんが、そのようなレイアウトの無料の実装がたくさんあります。

例:http ://www.java2s.com/Code/Java/Swing-JFC/AverticallayoutmanagersimilartojavaawtFlowLayout.htm

于 2013-02-01T18:28:05.807 に答える
4

必要なのは貪欲な接着剤です。接着剤が貪欲でない限り、接着剤とその兄弟はすべて余分なスペースの一部を受け取ります。接着剤はBox.Fillerオブジェクトであり、サイズの制約をリセットするためのメソッドchangeShapeがあります。貪欲にするには、推奨サイズをInteger.MAX_VALUEに設定します。

    Box.Filler glue = Box.createVerticalGlue();
    glue.changeShape(glue.getMinimumSize(), 
                    new Dimension(0, Short.MAX_VALUE), // make glue greedy
                    glue.getMaximumSize());

この接着剤要素を外箱の最後のアイテムとして追加します。

于 2014-09-14T14:47:47.867 に答える