【问题标题】:Mig Layout not following cell constraintsMig 布局不遵循单元格约束
【发布时间】:2013-09-18 09:05:21
【问题描述】:

我正在使用 Mig 布局设置从 JPanel 继承的面板布局,但单元格约束没有像我预期的那样工作,因为我尝试添加的组件之一。我希望组件彼此重叠,一列三行。第三个组件在第二个组件旁边结束,而不是在下一行。我做错了什么?

roundedPanel = new RoundedPanel();      //inherits from JPanel
registerPanel = createRegisterPanel();  //returns a JPanel
lblIcon = new JLabel();

setupLicenseInfoLabel();  //sets text of and initializes registerLabel

roundedPanel.setLayout(new MigLayout("fill, insets " + RoundedPanel.RECOMMENDED_INSET, "[]", "[][][]"));

roundedPanel.add(lblIcon, "cell 0 0");
roundedPanel.add(licenseInfoLabel, "cell 0 1");
roundedPanel.add(registerPanel, "cell 0 2");

编辑:我意识到我混淆了 MigLayout 行和列参数,但即使我尝试了这个,我仍然遇到同样的问题。

roundedPanel.setLayout(new MigLayout("fill, insets " + RoundedPanel.RECOMMENDED_INSET, "[][][]", "[]"));

edit 2:我在 MigLayout 约束中添加了 flowy,一切都显示了我的意图。我不确定最初的问题是什么以及为什么 wrap 没有帮助。

【问题讨论】:

  • 流程不应该有任何影响,可能是其他地方出了问题 - 请展示一个证明问题的 SSCCE

标签: java swing miglayout


【解决方案1】:

列/行约束的数量无关紧要(只要有组件就使用最后一个约束),您必须在某处显式添加包装:在布局约束中或在每个单元格约束中:

new MigLayout("wrap 1", ...)
// or 
panel.add(someComponent, "wrap, ...")

更新

另一种(虽然不寻常)以某种方式/在哪里包装的方法是像您一样将组件放置在网格中(不知何故错过了,抱歉)。它应该可以工作(并且在下面的 sn-p 中)而不需要其他任何东西,组件在第一列中放置在另一个下方:

MigLayout layout = new MigLayout();
JComponent content = new JPanel(layout);
content.add(new JTextField("first", 20), "cell 0 0");
content.add(new JTextField("second", 10), "cell 0 1");
content.add(new JTextField("third", 13), "cell 0 2");

另一方面,设置 flowy 布局属性不应该有任何影响:单元坐标始终为 (x, y),与流无关。因此,我怀疑您的上下文中还有其他问题,最好对其进行追踪,以免将来对您造成影响。

【讨论】:

  • 我尝试了这两种方法(单独和一起),但都没有解决我的问题。
猜你喜欢
  • 1970-01-01
  • 2019-07-22
  • 1970-01-01
  • 1970-01-01
  • 2019-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多