我希望在使用MigLayout到达屏幕的“边缘”时包装JPanel。目前我有一个JScrollPane(我只想在veritcally中启用)。 JScrollPane包含任意数量的水平排列的JPanel - 当添加一个面板时,jpanel将离开边缘,我希望它添加到下一行。这可能吗?
这是代码:
public void setupPanels(){
JScrollPane scrollPane = new JScrollPane();
JPanel mainPanel = new JPanel(new MigLayout("insets 2"));
for (Object object : objects){
JPanel subPanel = new JPanel(new MigLayout("insets 0"));
mainPanel.add(subPanel, "alignx left, gapx 2px 5px, gapy 2px 2px, top");
}
scrollPane.setViewportView(mainPanel);
}
另外,要添加一个额外的因子,每次到达边缘时我都需要添加一个新的/不同的面板(时间轴) - 所以有没有办法找出什么时候它将换行? / p>
谢谢,
答案 0 :(得分:2)
MigLayout没有这样的功能。它基于网格,虽然您可以使用nogrid
选项在单元格范围内水平或垂直流动组件,但您无法使它们流入下一行或列。
JDK中包含的java.awt.FlowLayout
自动包装所包含的组件:
JPanel mainPanel = new JPanel(new FlowLayout());
mainPanel.add(subPanel1);
mainPanel.add(subPanel2);
mainPanel.add(subPanel3);
...
首选高度已关闭,但有多种方法可以解决此问题,请参阅WrapLayout。
至于第二个要求:
另外,要添加一个额外的因子,每次它到达我需要的边缘 添加一个新的/不同的面板(时间轴) - 所以有找到的方法 什么时候它会换成新的一行呢?
布局管理器应该布局已添加到容器的组件,而不是根据布局的结果添加新组件。在布局管理器按需查看的每个子面板之后为时间轴添加不可见的占位符组件可能会有效。
您肯定需要一个自定义布局管理器来执行此操作。要开始使用,我建议您使用FlowLayout
的来源。在layoutContainer
实现中,有一个迭代所有组件的循环。换行后,检查下一个组件是否为时间轴占位符组件,使其可见并再次换行。