Есть ли эквивалент Group Box в Java Swing?

Попытка создать приложение с графическим интерфейсом на Java/Swing. В основном я привык "рисовать" GUI на стороне Windows с помощью таких инструментов, как VB (или, если быть более точным, Gupta SQLWindows... интересно, сколько людей знают, что это такое ;-)).

Я не могу найти эквивалент Group Box в Swing...

С групповым полем у вас есть квадратное поле (обычно с заголовком) вокруг пары связанных виджетов. Одним из примеров является групповое поле вокруг нескольких переключателей (с заголовком, объясняющим назначение переключателей, например, групповое поле под названием «Пол» с переключателями «Мужской» и «Женский»).

Я немного поискал ... единственный способ, который я нашел, - это добавить подпанель, установить границу на подпанели, а затем добавить все виджеты в «группе» на подпанель. Есть ли более элегантный способ сделать это?


person Thorsten    schedule 10.01.2009    source источник
comment
Возможно, вы могли бы объяснить, что такое групповой ящик.   -  person Geo    schedule 10.01.2009
comment
Я думаю, он имеет в виду группу управления, которую вы видите во многих диалоговых окнах, где у вас есть квадрат вокруг набора виджетов, таких как переключатели, например.   -  person Uri    schedule 10.01.2009


Ответы (7)


Создайте JPanel и добавьте в него свои радиокнопки. Не забудьте настроить макет JPanel на что-то подходящее.

Затем позвоните panel.setBorder(BorderFactory.createTitledBorder(name));

person David Koelle    schedule 10.01.2009

Другие уже комментировали JPanel и использование TitledBorder, это нормально.

Однако при игре с Swing LayoutManagers вас может раздражать, что компоненты в разных JPanel не могут правильно выровняться (каждая панель имеет свой собственный LayoutManager).

По этой причине рекомендуется (см. "JGoodies" в Интернете для получения более подробной информации) в графических интерфейсах Swing НЕ использовать TitledBorders, а скорее разделять группы компонентов в JPanel с помощью JLabel, за которым следует горизонтальный JSeparator.

Ссылка "Первая помощь для Swing"

person jfpoilpret    schedule 12.01.2009
comment
Существуют ли специальные рекомендации Oracle или системы, поддерживающие это утверждение? Эта метка + разделитель должна быть предпочтительнее группового бокса? JGoodies — это всего лишь одна компания, внедряющая Java. - person Kissaki; 15.09.2014
comment
@Kissaki Я упомянул, что это хорошая практика, а не официальное руководство от кого бы то ни было. Дело в том, что с системой менеджеров макетов Swing вы НЕ МОЖЕТЕ выровнять компоненты на двух панелях. Следовательно, использование границ означает потерю выравнивания двух компонентов. - person jfpoilpret; 29.10.2016

Поле группы — это просто набор «логически сгруппированных виджетов». В мире свинга это JPanel.

Добавьте свои виджеты в файл JPanel.

Установите тип границы на «Граница с заголовком» и дайте заголовок, такой же, как имя «фрейма» VB6.

Вуаля. У вас есть групповой ящик.

person Nivas    schedule 10.01.2009

Вот цитата из javadocs JRadioButton, поскольку вы подняли переключатели.

Реализация переключателя — элемента, который можно выбрать или отменить выбор и который отображает свое состояние для пользователя. Используется с объектом ButtonGroup для создания группы кнопок, в которой одновременно может быть выбрана только одна кнопка. (Создайте объект ButtonGroup и используйте его метод add для включения объектов JRadioButton в группу.)

Примечание. Объект ButtonGroup представляет собой логическую группу, а не физическую группу. Чтобы создать кнопочную панель, вы все равно должны создать JPanel или аналогичный объект-контейнер и добавить к нему границу, чтобы отделить его от окружающих компонентов.

person Bill    schedule 12.01.2009
comment
Спасибо, но, как вы правильно заметили, моей главной целью был визуальный аспект. - person Thorsten; 12.01.2009

Не AFAIK, по крайней мере, не со стандартными виджетами качания.

В VB у вас есть групповой виджет, который по сути представляет собой панель + граница.

В Swing у вас есть JPanel, который является виджетом-контейнером, и вы создаете и устанавливаете на нем объект границы, только если он вам нужен. Можно утверждать, что это более элегантно, поскольку вы не платите за то, что не используете (например, бордюр).

person Uri    schedule 10.01.2009

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

введите здесь описание изображения

person Gaurang    schedule 26.01.2019

Я отвечаю на основе комментария Ури, в котором объясняется, что ОП имел в виду под Group Box:

Ури: Я думаю, он имеет в виду группу управления, которую вы видите во многих диалоговых окнах, где у вас есть квадрат вокруг набора виджетов, таких как переключатели, например.

Насколько я знаю, каждая JComponent может установить себе границу, так что вторая панель не нужна.

person Geo    schedule 10.01.2009
comment
Я хочу иметь границу вокруг нескольких JComponents. Кроме того, наличие только одного элемента в групповом поле обычно является плохой практикой. - person Thorsten; 10.01.2009
comment
Вы можете добавить более одного компонента в JPanel. - person Geo; 10.01.2009
comment
Я знаю.. Я, вероятно, неправильно понял ваш ответ. - person Thorsten; 10.01.2009
comment
Эм-м-м? Какой комментарий? Это все еще ответ на исходный вопрос? Я этого не вижу. - person Kissaki; 22.09.2014