如何在 MigLayout 的垂直单元格内堆叠组件?
How to stack components inside a vertical cell in the MigLayout?
我想了解 MigLayout,因此我想创建一个 table 内部有不同的面板。
目前它看起来像这样:
单元格 2 包含 3 个标签,它们应该堆叠。因此,我尝试使用 center2.setLayout(new MigLayout("flowy"));
为单元格 2 提供自己的布局,但随后其他组件变得混乱:
那么有没有办法将单元格 2 中的 3 个标签垂直堆叠?
[编辑]: center1 和 center2 应该有相同的高度!
我的例子classPageThree.java:
public class PageThree extends JPanel{
public PageThree() {
setLayout(new MigLayout());
JPanel contentPanel = new JPanel();
contentPanel.setLayout(new MigLayout("width 100%"));
JPanel topHeading = new JPanel();
JPanel westAreas = new JPanel();
JPanel center1 = new JPanel();
JPanel center2 = new JPanel();
// If I give center2 its own layout with flowy,
// the 3 labels are stacked vertically,
// but the other components get cluttered
// center2.setLayout(new MigLayout("flowy"));
JPanel center3 = new JPanel();
center1.add(new JLabel("center1"));
center2.add(new JLabel("center21"));
center2.add(new JLabel("center22"));
center2.add(new JLabel("center23"));
center3.add(new JLabel("center3"));
topHeading.add(new JLabel("topHeading1"));
topHeading.add(new JLabel("topHeading2"));
topHeading.add(new JLabel("topHeading3"));
westAreas.add(new JLabel("westAreas"));
contentPanel.add(center1, "width 40%");
contentPanel.add(center2, "width 60%, wrap");
contentPanel.add(center3, "width 50%");
contentPanel.add(topHeading, "width 100%, dock north, split 3");
contentPanel.add(westAreas, "dock west");
}
}
要回答您的问题,请保留 "flowy" 行并将 "grow" 放入
contentPanel.add(center1, "width 40%");
成为
contentPanel.add(center1, "width 40%, grow");
"grow" 约束告诉组件与单元格中的其他组件相比重量增加。如果它是单元格中唯一的组件,它将填充单元格(这就是我认为你想要的)。要更好地理解它,请在 MigLayout 构造函数中使用 "debug"。这会为您提供单元格周围的边框(红色)和单元格中的组件(蓝色)。
contentPanel.setLayout(new MigLayout("width 100%, debug"));
我想了解 MigLayout,因此我想创建一个 table 内部有不同的面板。
目前它看起来像这样:
单元格 2 包含 3 个标签,它们应该堆叠。因此,我尝试使用 center2.setLayout(new MigLayout("flowy"));
为单元格 2 提供自己的布局,但随后其他组件变得混乱:
那么有没有办法将单元格 2 中的 3 个标签垂直堆叠?
[编辑]: center1 和 center2 应该有相同的高度!
我的例子classPageThree.java:
public class PageThree extends JPanel{
public PageThree() {
setLayout(new MigLayout());
JPanel contentPanel = new JPanel();
contentPanel.setLayout(new MigLayout("width 100%"));
JPanel topHeading = new JPanel();
JPanel westAreas = new JPanel();
JPanel center1 = new JPanel();
JPanel center2 = new JPanel();
// If I give center2 its own layout with flowy,
// the 3 labels are stacked vertically,
// but the other components get cluttered
// center2.setLayout(new MigLayout("flowy"));
JPanel center3 = new JPanel();
center1.add(new JLabel("center1"));
center2.add(new JLabel("center21"));
center2.add(new JLabel("center22"));
center2.add(new JLabel("center23"));
center3.add(new JLabel("center3"));
topHeading.add(new JLabel("topHeading1"));
topHeading.add(new JLabel("topHeading2"));
topHeading.add(new JLabel("topHeading3"));
westAreas.add(new JLabel("westAreas"));
contentPanel.add(center1, "width 40%");
contentPanel.add(center2, "width 60%, wrap");
contentPanel.add(center3, "width 50%");
contentPanel.add(topHeading, "width 100%, dock north, split 3");
contentPanel.add(westAreas, "dock west");
}
}
要回答您的问题,请保留 "flowy" 行并将 "grow" 放入
contentPanel.add(center1, "width 40%");
成为
contentPanel.add(center1, "width 40%, grow");
"grow" 约束告诉组件与单元格中的其他组件相比重量增加。如果它是单元格中唯一的组件,它将填充单元格(这就是我认为你想要的)。要更好地理解它,请在 MigLayout 构造函数中使用 "debug"。这会为您提供单元格周围的边框(红色)和单元格中的组件(蓝色)。
contentPanel.setLayout(new MigLayout("width 100%, debug"));