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

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

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

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

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

Возможно, вы могли бы объяснить, что такое групповой ящик.

Geo 10.01.2009 23:20

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

Uri 10.01.2009 23:23
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
59
2
73 006
7
Перейти к ответу Данный вопрос помечен как решенный

Ответы 7

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

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

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

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

Uri: I think he means the control group you see in many dialog boxes, where you have a square around a bunch of widgets such as radio buttons, for example.

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

Я хочу иметь границу вокруг нескольких JComponents ... кроме того, наличие только одного элемента в групповом поле обычно является плохой практикой.

Thorsten 10.01.2009 23:37

Вы можете добавить более одного компонента в JPanel.

Geo 10.01.2009 23:49

Я знаю .. Наверное, я неправильно понял твой ответ.

Thorsten 10.01.2009 23:52

Эм-м-м? Какой комментарий? Это все еще ответ на исходный вопрос? Я этого не вижу.

Kissaki 22.09.2014 19:49
Ответ принят как подходящий

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

Тогда звоните panel.setBorder(BorderFactory.createTitledBorder(name));

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

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

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

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

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

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

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

Ref. «Первая помощь при качелях»

Существуют ли руководящие принципы Oracle или системы, поддерживающие это утверждение? Этот ярлык + разделитель должен быть предпочтительнее группового бокса? JGoodies - это просто компания один, реализующая Java.

Kissaki 15.09.2014 18:42

@Kissaki Я упоминал, что это хорошая практика, а не официальное руководство. Дело в том, что с системой менеджеров компоновки Swing вы НЕ МОЖЕТЕ выровнять компоненты на двух панелях. Следовательно, использование границ означает потерю выравнивания компонентов материала.

jfpoilpret 29.10.2016 11:21

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

An implementation of a radio button -- an item that can be selected or deselected, and which displays its state to the user. Used with a ButtonGroup object to create a group of buttons in which only one button at a time can be selected. (Create a ButtonGroup object and use its add method to include the JRadioButton objects in the group.)

Note: The ButtonGroup object is a logical grouping -- not a physical grouping. To create a button panel, you should still create a JPanel or similar container-object and add a Border to it to set it off from surrounding components.

Спасибо, но, как вы правильно заметили, моей главной целью был "визуальный" аспект.

Thorsten 12.01.2009 21:18

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

Другие вопросы по теме