MigLayout" wrap"不一致的表现

时间:2014-01-15 21:53:30

标签: java swing miglayout

我正在使用MigLayout将组件添加到Java中的JPanel。 我的问题是,尽管在单元格约束中加入了“wrap”,但它并不是一致的。有些组件包装而有些组件没有 - 特别注意图像中的最后一行(应该是2行)。

JPanel panel = new JPanel(new MigLayout("gap 0, insets 0", "",""));

JButton delete = new JButton("Delete");
JButton zoomSel = new JButton("Zoom Sel");
JButton zoomReset = new JButton("Zoom Reset");

panel.add(delete, "span 2 2, grow");
panel.add(zoomSel, "spanx 2, growx, wrap");
panel.add(zoomReset,"growx,wrap 5");

JButton cut = new JButton("Cut");
JButton copy = new JButton("Copy");
JButton paste = new JButton("Paste");
JButton loopSelRgn = new JButton("Loop Sel. Rgns");
JButton selRgnRow = new JButton("Sel Rgns Row");

panel.add(cut);
panel.add(copy);
panel.add(loopSelRgn, "spanx 2, growx, wrap");
panel.add(paste, "spanx 2, growx");
panel.add(selRgnRow, "spanx 2,growx,wrap 5");

JButton duplicate = new JButton("Duplicate");
JButton selectAll = new JButton("Select All");
JButton mute = new JButton("Mute");
JButton shift = new JButton("Shift");

panel.add(duplicate, "span 2 2, grow");
panel.add(selectAll, "span 2 2, grow, wrap");

panel.add(mute, "spanx 2, growx");
panel.add(shift, "spanx 2, growx");

编辑:感谢大家的回答,虽然我的解决方案是切换到百分比限制来设置高度而不是依靠跨度。这似乎解决了包裹的奇怪现象。

2 个答案:

答案 0 :(得分:1)

我看不出为什么你在使用wrap 5时看起来像你需要4.我相信已经达到你想要的只是

  • wrap 4添加到第一个构造函数参数
  • 在需要时为每个最后一行组件使用wrap(不带参数)

答案 1 :(得分:-1)

技术原因是duplicate / selectAll按钮的行间距(有意吗?):您正在包装第一个跨越的行,而第二个用于以下组件。您可以通过在包装中添加间隙来显示该事实,例如f.i。

panel.add(duplicate, "span 2 2, grow");
panel.add(selectAll, "span 2 2, grow, wrap 10");

从技术上讲,您可以通过换行符约束来解决它:

panel.add(mute, "newline, spanx 2, growx");
panel.add(shift, "spanx 2, growx");

真正的解决方案是重构约束:

  • 尽可能多地移动到布局中(正如@martinuus已经建议的那样)
  • 让它们变得尽可能简单:因为几乎所有按钮都是跨越单元格,更简单的替代方法是使它们成为常态(又名:1列)并拆分剪切/复制

类似的东西:

JPanel panel = new JPanel(new MigLayout("gap 0, insets 0, wrap 2", "",""));

panel.add(delete, "spany 2, grow");
panel.add(zoomSel, "growx");
panel.add(zoomReset,"growx");

panel.add(cut, "split 2");
panel.add(copy);
panel.add(loopSelRgn, "growx");