Java Swing:FlowLayout JPanels彼此相邻?

时间:2010-11-22 10:32:35

标签: java swing flowlayout

我在JFrame上绘制了三个JPanel。目前这些都设置为使用默认的FlowLayout。我想在一列中将它们放在一起。

但是,我发现它们在同一行上彼此相邻,只要它们中的组件。

FlowLayout JPanel的自然宽度是其内容的总和吗?如果是这样,有没有办法强制该区域的宽度为JFrame的宽度?

有趣的是,我发现,如果“顶部”和“底部”面板的内容跨越JFrame的整个宽度,而“中间”面板留空,那么“中间”面板会创建一个空间两者之间,很像旧的“旧的”。

谢谢,

4 个答案:

答案 0 :(得分:4)

正如Jim所说,如果你需要线性对齐组件,BoxLayout是正确的选择。

以下是一个例子:

import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

/**
 *
 * @author nicholasdunn
 */
public class BoxLayoutExample extends JPanel {

    public BoxLayoutExample() {
        JPanel topPanel = new JPanel();
        JPanel middlePanel = new JPanel();
        JPanel bottomPanel = new JPanel();

        topPanel.setBorder(BorderFactory.createEtchedBorder());
        middlePanel.setBorder(BorderFactory.createEtchedBorder());
        bottomPanel.setBorder(BorderFactory.createEtchedBorder());

        topPanel.add(new JLabel("Top"));
        middlePanel.add(new JLabel("Middle"));
        bottomPanel.add(new JLabel("Bottom"));

        BoxLayout boxLayout = new BoxLayout(this, BoxLayout.PAGE_AXIS);
        setLayout(boxLayout);
        add(topPanel);
        add(middlePanel);
        add(bottomPanel);

    }

    public static void main(String[] args) {
        JFrame frame = new JFrame("");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JPanel panel = new BoxLayoutExample();
        frame.add(panel);
        frame.pack();
        frame.setVisible(true);
    }
}

alt text

您最好真正阅读introduction to layout managers以了解LayoutManagers的基本集。当需要进行复杂的布局时,请使用MigLayout而不是尝试学习GridBagLayout - 你会感谢我。

答案 1 :(得分:2)

如果您希望创建垂直布局,可能需要查看使用BoxLayout作为封闭容器。这可以设置为沿y轴布局组件。

答案 2 :(得分:1)

您可以使用GridLayout在组件中创建YxZ网格。要更精确地构建布局,可以使用GridBagLayout,它可以完全控制嵌套组件的定位和大小调整。

答案 3 :(得分:0)

我总是和NetBeans一起去。因为,我可以制作免费设计而不会将组件放在JPanel或JFrame上:)你可以考虑它。