我在JFrame上绘制了三个JPanel。目前这些都设置为使用默认的FlowLayout。我想在一列中将它们放在一起。
但是,我发现它们在同一行上彼此相邻,只要它们中的组件。
FlowLayout JPanel的自然宽度是其内容的总和吗?如果是这样,有没有办法强制该区域的宽度为JFrame的宽度?
有趣的是,我发现,如果“顶部”和“底部”面板的内容跨越JFrame的整个宽度,而“中间”面板留空,那么“中间”面板会创建一个空间两者之间,很像旧的“旧的”。
谢谢,
本
答案 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);
}
}
您最好真正阅读introduction to layout managers以了解LayoutManagers的基本集。当需要进行复杂的布局时,请使用MigLayout而不是尝试学习GridBagLayout - 你会感谢我。
答案 1 :(得分:2)
如果您希望创建垂直布局,可能需要查看使用BoxLayout作为封闭容器。这可以设置为沿y轴布局组件。
答案 2 :(得分:1)
您可以使用GridLayout
在组件中创建YxZ
网格。要更精确地构建布局,可以使用GridBagLayout
,它可以完全控制嵌套组件的定位和大小调整。
答案 3 :(得分:0)
我总是和NetBeans一起去。因为,我可以制作免费设计而不会将组件放在JPanel或JFrame上:)你可以考虑它。