MigLayout: неожиданное расположение рядом с вертикальным компонентом

Играя немного, чтобы продемонстрировать, как легко выполнить требование макета с 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());

Идея компоновки достаточно проста:

  • три колонны
  • последний столбец, охватывающий все строки
  • первые два столбца связка пар метка / компонент

Неожиданным является то, что последний ряд первых двух столбцов занимает все доступное вертикальное пространство, что приводит к позиционированию последней пары в ее середине (выравнивание по верху не вариант, так как они должны быть выровнены по базовой линии друг с другом)

раскомментирование последней строки выше (добавление практически невидимого макета) показывает ожидаемый макет, но взлом, который не должен идти в рабочий код

Вопрос: как добиться ожидаемого макета без взлома?

1 ответ

Решение

может быть ошибка:

Менее хакерский способ обхода (применимый, если число строк известно во время создания формы), состоит в явном определении ограничений строк

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

то есть определить на одну строку больше, чем нужно для компонентов на стороне связующего компонента

Другие вопросы по тегам