Есть ли в Java Swing «групповой блок»? - PullRequest
57 голосов
/ 10 января 2009

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

Я не могу найти эквивалент группы в Swing ...

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

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

Ответы [ 7 ]

114 голосов
/ 11 января 2009

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

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

7 голосов
/ 12 января 2009

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

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

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

Ref. " Первая помощь для Swing "

3 голосов
/ 11 января 2009

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

Добавьте ваши виджеты в JPanel.

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

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

2 голосов
/ 12 января 2009

Вот цитата из Javadocs JRadioButton с тех пор, как вы открыли переключатели.

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

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

1 голос
/ 26 января 2019

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

enter image description here

1 голос
/ 10 января 2009

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

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

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

0 голосов
/ 10 января 2009

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...