radioButtonGroup
Компонент radioButtonGroup позволяет пользователям выбирать одно значение из предопределенного списка элементов с помощью радиокнопок.
| XML-элемент | 
 | 
|---|---|
| Java Class | 
 | 
| Атрибуты | id - alignSelf - ariaLabel - ariaLabelledBy - classNames - colspan - css - dataContainer - datatype - enabled - errorMessage - height - helperText - itemsContainer - itemsEnum - label - maxHeight - maxWidth - minHeight - minWidth - property - readOnly - required - requiredMessage - themeNames - visible - width | 
| Обработчики | AttachEvent - ClientValidatedEvent - ComponentValueChangeEvent - DetachEvent - itemEnabledProvider - itemLabelGenerator - renderer - statusChangeHandler - validator | 
| Элементы | 
Основы
Простейший случай использования radioButtonGroup - выбор значения перечисления для атрибута сущности.
 
<data>
    <instance class="com.company.onboarding.entity.User" id="userDc">
        <fetchPlan extends="_base"/>
        <loader id="userDl"/>
    </instance>
</data>
<layout>
    <radioButtonGroup id="statusRadioButtonGroup"
                      dataContainer="userDc"
                      property="onboardingStatus"
                      themeNames="vertical"
            label="Select the onboarding status"/>
</layout>В приведенном выше примере сущность User имеет атрибут onboardingStatus типа OnboardingStatus, который является перечислением.
Привязка данных
radioButtonGroup может получить список элементов из контейнера данных с помощью атрибута itemsContainer. Например:
<data>
    <collection id="hobbiesDc" class="com.company.onboarding.entity.Hobby">
        <loader id="hobbiesDl" readOnly="true">
            <query>
                <![CDATA[select e from Hobby e]]>
            </query>
        </loader>
        <fetchPlan extends="_base"/>
    </collection>
</data>
<layout>
    <radioButtonGroup id="hobbiesRadioButtonGroup"
                      itemsContainer="hobbiesDc"
                      themeNames="vertical"/>
</layout>В этом случае radioButtonGroup будет отображать имена экземпляров сущности Hobby, расположенных в контейнере данных hobbiesDc, а его метод getValue() будет возвращать выбранный в данный момент экземпляр сущности.
Формирование списка опций
Для установки списка элементов radioButtonGroup используйте следующие методы:
Список элементов
<radioButtonGroup id="radioButtonGroupInt"
                  datatype="int"/>Метод setItems() позволяет вам программно задать элементы компонента.
@ViewComponent
private JmixRadioButtonGroup<Integer> radioButtonGroupInt;
@Subscribe
public void onInit(final InitEvent event) {
    radioButtonGroupInt.setItems(1, 2, 3, 4, 5);
}Список элементов с описаниями
<radioButtonGroup id="ratingRadioButtonGroup"
                  datatype="int"/>ComponentUtils.setItemsMap() позволяет вам явно указать строковое описание для каждого значения элемента.
@ViewComponent
private JmixRadioButtonGroup<Integer> ratingRadioButtonGroup;
@Subscribe
public void onInit(final InitEvent event) {
    Map<Integer, String> map = new LinkedHashMap<>();
    map.put(2, "Poor");
    map.put(3, "Average");
    map.put(4, "Good");
    map.put(5, "Excellent");
    ComponentUtils.setItemsMap(ratingRadioButtonGroup, map);
}Список значений перечисления
Вы можете использовать либо декларативный, либо программный подход для установки значений перечисления в качестве элементов radioButtonGroup.
В следующем примере показан декларативный подход.
<radioButtonGroup id="radioButtonGroup"
                  itemsEnum="com.company.onboarding.entity.OnboardingStatus"/>Пример ниже использует программный подход.
@ViewComponent
private JmixRadioButtonGroup<OnboardingStatus> enumRadioButtonGroup;
@Subscribe
public void onInit(final InitEvent event) {
    enumRadioButtonGroup.setItems(OnboardingStatus.class);
}Настройка активности элементов
itemEnabledProvider позволяет вам динамически управлять состоянием включения отдельных радиокнопок в зависимости от конкретных условий. Отключенные элементы отображаются серым цветом и не могут быть выбраны пользователем. По умолчанию все элементы включены.
@Install(to = "radioButtonGroup", subject = "itemEnabledProvider")
private boolean radioButtonGroupItemEnabledProvider(OnboardingStatus onboardingStatus) {
    if (onboardingStatus != null) {
        return onboardingStatus.getId() != 30;
    }
    return true;
}Настройка отображения элементов
itemLabelGenerator позволяет вам настроить отображение элементов radioButtonGroup. Это дает вам контроль над текстом, который видят пользователи, позволяя представлять информацию более удобным для пользователя или контекстно-специфичным образом.
@Install(to = "statusRadioButtonGroup", subject = "itemLabelGenerator")
private String statusRadioButtonGroupItemLabelGenerator(
        final OnboardingStatus t) {
    return metadataTools.format(t).toUpperCase();
}Рендеринг элементов
Можно настроить рендеринг элементов. Рендерер применяется к каждому элементу для создания компонента, который представляет этот элемент.
Для этого можно использовать метод setRenderer() или аннотацию @Supply.
@Autowired
private UiComponents uiComponents;
@Autowired
private FileStorage fileStorage;
@Supply(to = "rbgRenderer", subject = "renderer")
private ComponentRenderer<HorizontalLayout, User> rbgRendererRenderer() {
    return new ComponentRenderer<>(user -> {
        FileRef fileRef = user.getPicture();
        HorizontalLayout row = uiComponents.create(HorizontalLayout.class);
        row.setAlignItems(FlexComponent.Alignment.END);
        if (fileRef != null) {
            Image image = uiComponents.create(Image.class);
            image.setWidth("30px");
            image.setHeight("30px");
            image.setClassName("user-picture");
            StreamResource streamResource = new StreamResource(
                    fileRef.getFileName(),
                    () -> fileStorage.openStream(fileRef));
            image.setSrc(streamResource);
            row.add(image);
        }
        row.add(new Span(user.getFirstName() + ", " + user.getLastName()));
        return row;
    });
} 
В качестве альтернативы вы можете отображать элементы, используя вложенный элемент fragmentRenderer. Дополнительную информацию смотрите в разделе Рендерер фрагментов.
Варианты оформления
Чтобы настроить расположение элементов и местоположение вспомогательного текста, используйте атрибут themeNames.
Ориентация
По умолчанию элементы расположены горизонтально. Чтобы изменить расположение на вертикальное, можно использовать тему vertical.
 
Код XML
<radioButtonGroup themeNames="vertical"
                  itemsEnum="com.company.onboarding.entity.OnboardingStatus"
                  label="Vertical orientation"/>
<radioButtonGroup itemsEnum="com.company.onboarding.entity.OnboardingStatus"
                  label="Horizontal orientation"/>Позиция вспомогательного текста
Установка helper-above-field переместит вспомогательный текст из его стандартного положения под полем в положение над ним.
 
Код XML
<radioButtonGroup themeNames="helper-above-field"
                  itemsEnum="com.company.onboarding.entity.OnboardingStatus"
                  helperText="Helper text with helper-above-field"/>
<radioButtonGroup itemsEnum="com.company.onboarding.entity.OnboardingStatus"
                  helperText="Helper text without helper-above-field"/>Атрибуты
В Jmix есть множество общих атрибутов, которые выполняют одну и ту же функцию для всех компонентов.
Ниже приведены атрибуты, специфичные для radioButtonGroup:
| Название | Описание | Значение по умолчанию | 
|---|---|---|
| Определяет контейнер данных, содержащий список элементов. Компонент отображает имя экземпляра сущности. Смотрите Привязка данных. | ||
| Определяет класс перечисления для создания списка элементов. Смотрите Список значений перечисления. | 
Обработчики
В Jmix существует множество общих обработчиков, которые конфигурируются одинаково для всех компонентов.
Ниже приведены обработчики, специфичные для radioButtonGroup.
| Чтобы сгенерировать заглушку обработчика в Jmix Studio, используйте вкладку Handlers панели инспектора Jmix UI, или команду Generate Handler, доступную на верхней панели контроллера экрана и через меню Code → Generate (Alt+Insert / Cmd+N). | 
| Название | Описание | 
|---|---|
| 
 | |
| Позволяет вам настроить метки, отображаемые для каждой радиокнопки. Смотрите Настройка отображения элементов. | |
| Устанавливает рендерер элементов для данного  | 
Смотрите также
Смотрите документацию Vaadin для получения дополнительной информации.