Java Swing MigLayout, центрирование двух элементов внутри натянутой строки - PullRequest
4 голосов
/ 09 апреля 2010

Я работаю над формой MigLayout с 3 столбцами и 4 строками, например:

"wrap 3",
"[15%] 15px [45%] 15px [40%]",
"20 [] 15 [] 15 [grow,fill] 15 []"

Теперь моя цель, чтобы это выглядело так:

.------------------------------------.
| 15% |     45%      |     40%       |
|------------------------------------|
|     |              |               |
|------------------------------------|
|     |              |               |
|------------------------------------|
|           button,button            |
`------------------------------------´

Я хочу, чтобы кнопки в последнем ряду были отцентрированы, поэтому я предположил, что сначала требуется, чтобы я разделил 3 столбца 4-го ряда в один с ограничением компонента "span 3, center" для кнопки.

Это прекрасно работает только с одной кнопкой, но у меня возникают проблемы с выяснением того, как добавить вторую кнопку, при этом обе эти кнопки должны находиться в центре одной строки одновременно. Если я добавлю те же ограничения на вторую кнопку, она окажется идеально по центру ниже первой кнопки в следующем ряду.

Ответы [ 3 ]

4 голосов
/ 23 ноября 2012

Решение состоит в том, чтобы охватить и разделение одновременно: разделение определяет количество компонентов, которые должны находиться в охватываемой ячейке:

panel.add(firstButton, "span, split 2, center");
panel.add(secondButton);

В стороне: диапазон безпо умолчанию считается большое число, которое фактически означает «все»

2 голосов
/ 09 апреля 2010

Это не идеально, но вы можете добавить две кнопки в новую JPanel, а затем вложить эту JPanel в существующий макет с помощью «span 3, center»

Я изо всех сил пытаюсь придумать другой путь.

0 голосов
/ 23 ноября 2012

Вы можете попытаться поместить два прямоугольника справа и слева, которые будут расти, или нажать кнопки посередине, как это:

pane.setLayout(new MigLayout("fill"));
pane.add(Box.createHorizontalBox(), "push");
pane.add(new JButton("asdf"));
pane.add(new JButton("zxcv"));
pane.add(Box.createHorizontalBox(), "push,wrap");
...