Как сделать аккуратный отступ для некоторых компонентов с помощью макетов Java Swing

Используя Swing, как лучше всего сделать отступ для некоторых компонентов под флажком или переключателем? Мне нужно сделать что-то в стиле диалогового окна «Параметры-> Конфиденциальность» Firefox 3.6, где некоторые флажки расположены под «основным» флажком. Я могу использовать любой стандартный макет AWT/Swing, включая GroupLayout. У меня также есть JGoodies FormLayout. Сначала я пытался использовать смещение setLeadingColumn в FormLayout, но казалось, что это не сработает, если только я не делаю отступ под разделителем. Может я просто неправильно делал?

Есть ли что-нибудь похожее на настройку HorizontalIndent в SWT GridLayout? Это было бы замечательно.

Я работаю с JDK1.6.0_23.


person Jason    schedule 08.01.2011    source источник


Ответы (4)


Есть несколько способов сделать это:

  1. Установите границу каждого компонента на: new EmptyBorder (0, 10, 0, 0).

  2. Используйте GridBagLayout и используйте Inset (0, 10, 0, 0), чтобы заполнить левую сторону.

  3. Используйте GridBagLayout и поместите основной флажок в два столбца, а дополнительные флажки сместите, поместив их в крайний правый столбец.

  4. Предоставьте пользовательские значки флажков, к левому краю которых добавлено пустое пространство.

и т.п.

Я бы посоветовал изучить GridBagLayout - он несколько громоздкий в использовании, но он дает вам почти все возможности компоновки, которые вы могли бы пожелать. Материал JGoodies полезен, когда вам нужно особое поведение автоматического изменения размера столбца, которое GBL не предоставит вам без дополнительного кода с вашей стороны.

person Stewart Murrie    schedule 08.01.2011

Создайте JPanel для подкомпонентов. Затем вы можете добавить EmptyBorder на панель с нужным отступом.

person camickr    schedule 08.01.2011
comment
Гораздо проще для простых исправлений, чем GridBagLayout, и он не будет путаться с индикатором фокуса, как EmptyBorder. - person 2rs2ts; 09.04.2014

Вы должны быть в состоянии сделать это просто с помощью FormLayout, просто добавьте еще один столбец для подэлементов и сделайте так, чтобы основной элемент занимал 2 столбца.

person MeBigFatGuy    schedule 08.01.2011

Другой вариант — использовать SpringLayout и добавить отступы.

person jzd    schedule 08.01.2011