Помощь при проблемной компоновке с использованием MigLayout

#java #layout #grid #alignment #miglayout

#java #макет #сетка #выравнивание #miglayout

Вопрос:

Я пытался выровнять некоторые объекты в моем Java-проекте определенным образом, но безуспешно. Я использую MigLayout для макета, и вот как я хотел бы, чтобы это выглядело:

Желаемый макет

  1. Боковая панель должна иметь статическую ширину (220 пикселей) и быть закреплена слева.
  2. Правый столбец должен иметь плавную ширину и расширяться в соответствии с размером окна.
  3. Нижний колонтитул должен быть закреплен в нижней части и иметь статическую высоту, плавную ширину.

Это код, который у меня сейчас есть:

 this.setLayout(new MigLayout("fill, wrap 2", "[30%][70%]", "grow"));

this.add(sourceList, "w 30%");
this.add(listView, "w 70%");
this.add(bottomBar.getComponent(), "growx, push, span");
  

Я пытался разобраться в инструкциях по использованию, но их трудно понять. Я надеялся, что кто-нибудь здесь знает о работе с MigLayout и мог бы мне помочь.

Комментарии:

1. Вы можете сделать это с помощью GridBagLayout — не уверен, что MigLayout — лучший вариант здесь.

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

3. @Jonathon делай то, что ты делаешь. MigLayout и JGoodies FormLayout — два лучших из существующих. Не переходите к GridBag, который просто неудобен в использовании.

Ответ №1:

Я использую WindowBuilder Pro, который очень помогает в их создании. Это бесплатно и также поддерживает MigLayout.

Выполнение того, что вы только что описали в нем, заставляет меня:

 setLayout(new MigLayout("", "[220][grow]", "[grow][]"));
add(sidebar, "cell 0 0,grow");
add(main, "cell 1 0,grow");
add(bottom, "cell 0 1 2 1,grow");
  

Это позволяет сохранить боковую панель на фиксированном уровне 220 (из спецификации столбца в конструкторе), а нижнюю часть — на статической высоте с предпочтительным размером. Ширина столбца 2 и высота столбца 1 будут увеличиваться для заполнения, как и компоненты в каждой ячейке.

Комментарии:

1. Здравствуйте, спасибо за комментарий. Я попробовал приведенный выше код, и он работает хорошо, за исключением одной незначительной детали. Я получаю интервал справа от боковой панели, а также интервал сверху снизу. Есть ли какой-либо способ удалить их? Кроме того, я загляну в WindowBuilder!

2. Создайте конструктор MigLayout(«gap 0px 0px», «[220][grow]», «[grow][]»)); и я думаю, что это должно сработать.