首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于MigLayout的自动包装

基于MigLayout的自动包装
EN

Stack Overflow用户
提问于 2012-11-07 14:49:20
回答 1查看 1.4K关注 0票数 5

当JPanel到达屏幕的“边缘”时,我希望使用MigLayout包装它。目前我有一个JScrollPane (我只想垂直地启用它)。JScrollPane包含任意数量的JPanels,它们是水平排列的--当添加面板时,这样JPanel就会离开边缘,我希望它添加到下一行。这个是可能的吗?

这是代码:

代码语言:javascript
复制
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);
}

另外,为了增加一个额外的因素,每次它到达边缘时,我需要添加一个新的/不同的面板(一个时间线)--那么有什么方法可以找出它什么时候会换到一条新的线上呢?

谢谢

EN

回答 1

Stack Overflow用户

发布于 2014-10-06 07:37:56

MigLayout没有这样的特性。它基于网格,虽然可以使用nogrid选项在单元格跨度内水平或垂直地流组件,但不能使它们流到下一行或下一列。

JDK中包含的java.awt.FlowLayout自动包装包含的组件:

代码语言:javascript
复制
JPanel mainPanel = new JPanel(new FlowLayout());
mainPanel.add(subPanel1);
mainPanel.add(subPanel2);
mainPanel.add(subPanel3);
...

首选的高度为off,但是有一些方法可以解决这个问题,请参阅WrapLayout

至于第二项要求:

另外,为了增加一个额外的因素,每当它到达边缘时,我需要添加一个新的/不同的面板(A时间线)--那么有什么方法可以找出它何时会换到一条新的线上呢?

布局管理器应该布局已经添加到容器中的组件,而不是根据布局的结果添加新组件。在“按需”布局管理器使每个子面板可见后,为时间线添加不可见占位符组件可能有效。

您肯定需要一个定制的布局管理器来完成这个任务。首先,我建议使用FlowLayout的源代码。在layoutContainer实现中,有一个遍历所有组件的循环。换行后,检查下一个组件是否是时间线占位符组件,使其可见并再次包装。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13272083

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档