Java如何禁用JPanel组件自动垂直调整大小

时间:2016-10-29 21:19:13

标签: java swing jpanel

我遇到了一个非常讨厌的问题。 JPanel正在增加组件之间的垂直间隙,我需要摆脱它。 我试图得到这个(蓝线是我想摆脱的空间):

enter image description here

看起来像这样:

enter image description here

这是我目前的课程:

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);
    }
}

2 个答案:

答案 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。这将允许您堆叠组件,而不会令他们不愉快地扩展。