行に垂直BoxLayoutおよびFlowLayoutJPanelsを使用する次のフォームがあります。
各行間の大きなギャップを小さくするにはどうすればよいですか?これは私のコードです:
行に垂直BoxLayoutおよびFlowLayoutJPanelsを使用する次のフォームがあります。
各行間の大きなギャップを小さくするにはどうすればよいですか?これは私のコードです:
問題は、BoxLayoutがコンポーネントの最大サイズを尊重することです。パネルには最大サイズがないため、各パネルの高さが高くなり、使用可能なスペースを占有します。
別の解決策は、コンポーネントをパネルに追加した後、各パネルの最大サイズを決定することです。
pnlName.setMaximumSize( pnlName.getPreferredSize() );
pnlSurname.setMaximumSize( pnlSurname.getPreferredSize() );
pnlAge.setMaximumSize( pnlAge.getPreferredSize() );
接着剤(目に見えないコンポーネント)を使用して、空き領域を埋めることができます。このドキュメントを参照してください
ボックスレイアウトの代わりに、VerticalLayoutを使用することもできます。残念ながら、swing apiには存在しませんが、そのようなレイアウトの無料の実装がたくさんあります。
例:http ://www.java2s.com/Code/Java/Swing-JFC/AverticallayoutmanagersimilartojavaawtFlowLayout.htm
必要なのは貪欲な接着剤です。接着剤が貪欲でない限り、接着剤とその兄弟はすべて余分なスペースの一部を受け取ります。接着剤は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());
この接着剤要素を外箱の最後のアイテムとして追加します。