Java Swing: выбор правильного LayoutManager - PullRequest
5 голосов
/ 23 июня 2011

Я строю PropertyPanel.В настоящее время я использую GridLayout для управления JLabels и соответствующими им полями, где я могу указать значение.Но проблема в том, что GridLayout автоматически управляет размером столбцов: он делает их одинаковой ширины.

Это означает, что когда у меня поле большого значения, столбец становится больше (чтоэто хорошо), но другой столбец (со всеми моими JLabel s) также становится больше.Вот скриншот:

enter image description here

Как видите, свойство image имеет огромное значение, которое увеличивает оба столбца, иУ меня много места после JLabel s.

Итак, я ищу LayoutManager, который делает каждый столбец настолько большим, насколько это необходимо.
Мне нужен такой макет(отредактировано с помощью Gimp):

enter image description here <ХОРОШО </strong>

Спасибо

Ответы [ 6 ]

5 голосов
/ 23 июня 2011

Вы можете использовать SpringLayout для этого.См. Как использовать SpringLayout .

Пример макета:

enter image description here

Помните, что вы также можете вкладывать макеты.

2 голосов
/ 24 июня 2011

Хотя на это ответили 11 часов назад, я просто подумал, что зайду и сделаю предложение. Я предлагаю GroupLayout .

Недавно я искал разрыв во вложенных макетах для диалога имя / значение и посмотрел оба значения GroupLayout & SpringLayout. Казалось, единственное преимущество, предлагаемое SpringLayout, заключалось в том, что он мог добиться правильного выравнивания текста надписей (возможно, есть способ сделать это с помощью GL, но я не мог понять, как). С другой стороны, примеры Java Tutorial для SpringLayout использовали колоссальный «вспомогательный класс» для определения ограничений макета.

В конце (это было только очень короткое «исследование») я решил использовать GroupLayout.

2 голосов
/ 23 июня 2011

Я стараюсь взломать все, смешав GridLayout и BorderLayout, так что, возможно, это не лучшее решение, но ...

Создайте два GridLayouts, оба имеют один столбец. Один для меток, другой для элементов управления.

Теперь создайте BorderLayout в качестве родителя.

Добавьте левую сетку в BorderLayout.WEST и правую сетку в BorderLayout.CENTER.

2 голосов
/ 23 июня 2011

SpringLayout - это то, что я обычно использую для подобных форм. Хотя я думаю, что GridBagLayout также будет хорошо работать.

1 голос
/ 23 июня 2011

Вот краткий обзор стандартных LayoutManagers: http://download.oracle.com/javase/tutorial/uiswing/layout/visual.html

Вы можете, например, использовать GridBagLayout или нестандартный MigLayout, если вы хотите кодировать GUI вручную.

Если вывы хотите использовать конструктор GUI (например, тот, что в NetBeans), вы можете использовать GroupLayout.

0 голосов
/ 23 июня 2011

Рассмотрите возможность использования MigLayout . Если ограничено текущим JDK, GridBagLayout .

...