6

我在 JFrame 上绘制了三个 JPanel。这些目前都设置为使用默认的 FlowLayout。我希望这些在一个列中高于另一个。

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

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

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

html”。

谢谢,

4

4 回答 4

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

替代文字

您最好仔细阅读布局管理器的介绍以了解 LayoutManagers 的基本集。当需要做复杂的布局时,请使用MigLayout而不是尝试学习 GridBagLayout - 你会感谢我的。

于 2010-11-22T14:27:58.167 回答
2

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

于 2010-11-22T10:43:13.530 回答
1

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

于 2010-11-22T10:37:14.707 回答
0

我总是选择NetBeans。因为,我可以进行自由设计,而无需将组件放置在 JPanel 或 JFrame 上:) 你可以考虑一下。

于 2010-11-22T10:39:52.500 回答