【问题标题】:Smart Vertical flow layout智能垂直流布局
【发布时间】:2010-08-23 09:11:04
【问题描述】:

我正在寻找 JPanel 布局(Swing)中的以下行为:基本上它会以垂直方式排列组件,一个相互重叠。

当组件不能垂直放入容器时,它应该将下一个组件添加到新行中。这将动态地继续,根据需要添加新行。

添加 3 个标签后看起来像这样:

+--------------------------+
|  label1                  |
|  label2                  |
|  label3                  |
+--------------------------+

添加后:再添加 2 个标签:

+--------------------------+
|  label1  label4          |
|  label2  label5          |
|  label3                  |
+--------------------------+

最后,再添加 2 个标签后,它看起来像这样:

+--------------------------+
|  label1  label4  label7  |
|  label2  label5          |
|  label3  label6          |
+--------------------------+

这种行为是否可以通过当前布局之一实现?

我应该自己创建一个吗?

你会如何解决这个问题?

【问题讨论】:

    标签: java user-interface swing layout


    【解决方案1】:

    是的,这是可能的。尝试使用MigLayout

    这是一个说明用法的代码 sn-p:

    JPanel panel = new JPanel(new MigLayout("fill, flowY, wrap 4));
    panel.add(new JLabel("row 1, column 1"));
    panel.add(new JLabel("row 2, column 1"));
    panel.add(new JLabel("row 3, column 1"));
    panel.add(new JLabel("row 1, column 2")); // etc.
    

    【讨论】:

    • 好的,谢谢,但我希望布局会自动管理列,所以当它不适合一列时,它会将组件添加到下一列。
    • 另外,我检查了您的代码,并且 LC 类没有采用参数的方法包装:migcalendar.com/miglayout/javadoc/net/miginfocom/layout/…
    • 这里就是这样。第四个标签“第 1 行,第 2 列”将添加到第二列,而前三个将添加到第一列。
    • 已修复,布局约束创建者 LC 不支持所有约束生成器,即 wrap(int)。您可以使用这里的字符串版本。
    【解决方案2】:

    好的,找到解决方案。感谢鲍里斯,使用MigLayout

    LC lc_Y = (new LC()).fill().flowY();
    lc_Y.setWrapAfter(ITEMS_PER_COLUMN);
    JPanel panel = new JPanel(new MigLayout(lc_Y));
    

    现在,如果不需要指定每列的项目数量,那将是完美的。我的意思是,布局会尝试在同一行中用尽可能多的项目垂直填充容器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-15
      • 2014-10-07
      • 2012-10-25
      相关资源
      最近更新 更多