4

在演示如何使用 MigLayout 轻松满足布局要求时,我对以下结果感到惊讶:

MigLayout layout = new MigLayout("wrap 3, debug");
JComponent content = new JPanel(layout);

content.add(new JLabel("First:"));
content.add(new JScrollPane(new JTextArea(10, 20)), "skip, spany");
content.add(new JLabel("Second"));
content.add(new JTextField(10));
content.add(new JLabel("third"));
content.add(new JTextField(10));
//content.add(new JLabel());

布局思路很简单:

  • 三列
  • 跨越所有行的最后一列
  • 前两列一堆标签/组件对

出乎意料的是,前两列的最后一行占用了所有可用的垂直空间,这导致将最后一对定位在其中间(顶部对齐不是一个选项,因为它们必须彼此基线对齐)

在此处输入图像描述

取消注释上面的最后一行(添加一个几乎不可见的虚拟对象)显示了预期的布局,但是不应该进入生产代码的 hack

在此处输入图像描述

问题是:如何在没有黑客攻击的情况下实现预期的布局?

4

1 回答 1

4

可能是一个错误

一种不那么老套的解决方法(如果在创建表单时知道行数,则适用)是显式定义行约束

MigLayout layout = new MigLayout("wrap 3, debug", "", "[][][][]");

即为跨越组件一侧的组件定义比实际需要的多行

于 2012-07-28T16:59:13.473 回答