#java #layout #grid #alignment #miglayout
#java #макет #сетка #выравнивание #miglayout
Вопрос:
Я пытался выровнять некоторые объекты в моем Java-проекте определенным образом, но безуспешно. Я использую MigLayout для макета, и вот как я хотел бы, чтобы это выглядело:
- Боковая панель должна иметь статическую ширину (220 пикселей) и быть закреплена слева.
- Правый столбец должен иметь плавную ширину и расширяться в соответствии с размером окна.
- Нижний колонтитул должен быть закреплен в нижней части и иметь статическую высоту, плавную ширину.
Это код, который у меня сейчас есть:
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][]»)); и я думаю, что это должно сработать.