当JPanel到达屏幕的“边缘”时,我希望使用MigLayout包装它。目前我有一个JScrollPane (我只想垂直地启用它)。JScrollPane包含任意数量的JPanels,它们是水平排列的--当添加面板时,这样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);
}另外,为了增加一个额外的因素,每次它到达边缘时,我需要添加一个新的/不同的面板(一个时间线)--那么有什么方法可以找出它什么时候会换到一条新的线上呢?
谢谢
发布于 2014-10-06 07:37:56
MigLayout没有这样的特性。它基于网格,虽然可以使用nogrid选项在单元格跨度内水平或垂直地流组件,但不能使它们流到下一行或下一列。
JDK中包含的java.awt.FlowLayout自动包装包含的组件:
JPanel mainPanel = new JPanel(new FlowLayout());
mainPanel.add(subPanel1);
mainPanel.add(subPanel2);
mainPanel.add(subPanel3);
...首选的高度为off,但是有一些方法可以解决这个问题,请参阅WrapLayout。
至于第二项要求:
另外,为了增加一个额外的因素,每当它到达边缘时,我需要添加一个新的/不同的面板(A时间线)--那么有什么方法可以找出它何时会换到一条新的线上呢?
布局管理器应该布局已经添加到容器中的组件,而不是根据布局的结果添加新组件。在“按需”布局管理器使每个子面板可见后,为时间线添加不可见占位符组件可能有效。
您肯定需要一个定制的布局管理器来完成这个任务。首先,我建议使用FlowLayout的源代码。在layoutContainer实现中,有一个遍历所有组件的循环。换行后,检查下一个组件是否是时间线占位符组件,使其可见并再次包装。
https://stackoverflow.com/questions/13272083
复制相似问题