我遇到了一个非常讨厌的问题。 JPanel正在增加组件之间的垂直间隙,我需要摆脱它。 我试图得到这个(蓝线是我想摆脱的空间):
看起来像这样:
这是我目前的课程:
public class SummaryPanel extends JPanel
{
private JLabel bagelLabel;
private JLabel toppingLabel;
private JLabel coffeeLabel;
private JLabel shotsLabel;
private JLabel subtotal;
private JLabel tax;
private JLabel total;
private JPanel selectionsPanel;
private JPanel totalPanel;
public SummaryPanel()
{
bagelLabel = new JLabel("No bagel $0.00");
toppingLabel = new JLabel("No topping $0.00");
coffeeLabel = new JLabel("No coffee $0.00");
shotsLabel = new JLabel("(Includes 0 shots) $0.00");
subtotal = new JLabel("");
tax = new JLabel("");
total = new JLabel("");
setLayout(new GridLayout(2,1));
selectionsPanel = new JPanel();
selectionsPanel.setLayout(new GridLayout(4,1));
selectionsPanel.add(bagelLabel);
selectionsPanel.add(toppingLabel);
selectionsPanel.add(coffeeLabel );
selectionsPanel.add(shotsLabel );
totalPanel = new JPanel();
totalPanel.setLayout(new GridLayout(3,1));
totalPanel.add(subtotal);
totalPanel.add(tax);
totalPanel.add(total);
totalPanel.setVisible(false);
add(selectionsPanel);
add(totalPanel);
}
}
答案 0 :(得分:3)
由布局管理员控制。
setLayout(new GridLayout(2,1));
您正在使用GridLayout,因此两个组件中的每一个都获得相同的空间。
selectionsPanel.setLayout(new GridLayout(4,1));
反过来,每个JLabel获得每个面板可用总空间的四分之一。
相反,您可以使用BorderLayout:
//setLayout(new GridLayout(2,1));
setLayout(new BorderLayout);
然后,当您向面板添加组件时,使用:
add(selectionsPanel, BorderLayout.PAGE_START);
add(totalsPanel, BorderLayout.PAGE_END);
现在将尊重首选尺寸。
答案 1 :(得分:1)
GridLayout
会将面板划分为指定的行数和列数,每个组件将完整地填充其中一个单元格。
您可能希望考虑使用BoxLayout
。这将允许您堆叠组件,而不会令他们不愉快地扩展。