【问题标题】:Automatic wrapping using MigLayout使用 MigLayout 自动换行
【发布时间】:2012-10-27 15:33:51
【问题描述】:

我希望使用 MigLayout 在 JPanel 到达屏幕的“边缘”时对其进行包装。目前我有一个 JScrollPane(我只想启用它)。 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);
}

另外,要添加一个额外的因素,每次它到达边缘时,我都需要添加一个新的/不同的面板(时间线) - 那么有没有办法找出它何时会换行?

谢谢,

【问题讨论】:

标签: java swing jpanel layout-manager miglayout


【解决方案1】:

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

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

JPanel mainPanel = new JPanel(new FlowLayout());
mainPanel.add(subPanel1);
mainPanel.add(subPanel2);
mainPanel.add(subPanel3);
...

首选高度已关闭,但有办法解决此问题,请参阅 WrapLayout

至于第二个要求:

另外,要添加一个额外的因素,每次它到达边缘时我都需要 添加一个新的/不同的面板(一个时间线) - 那么有没有办法找到 什么时候换行?

布局管理器应该布局已经添加到容器中的组件,而不是根据布局结果添加新组件。在布局管理器按需显示的每个子面板之后为时间线添加不可见的占位符组件可能会起作用。

您肯定需要一个自定义布局管理器来执行此操作。要开始,我建议获取FlowLayout 的来源。在layoutContainer 实现中,有一个循环遍历所有组件。换行后,检查下一个组件是否为时间线占位符组件,使其可见并再次换行。

【讨论】:

    猜你喜欢
    • 2017-03-20
    • 1970-01-01
    • 2011-01-04
    • 2011-06-17
    • 1970-01-01
    • 2015-05-24
    • 1970-01-01
    • 2012-07-11
    • 2016-04-15
    相关资源
    最近更新 更多