Vaadin 14 radiobuttongroup отображать пользовательские строки в качестве параметров - PullRequest
2 голосов
/ 03 апреля 2020

Я использую Vaadin 14.1.21 + Java JDK / JRE 1.8

У меня есть отдельная радиобутгруппа с логическим полем в DataClass.

Не знаю я не хочу отображать «true» / «false» как параметры для пользователя, но пользовательские строки, скажем, «red option» для true и «green option» для false.

Я вижу в API, что там это функция с именем setRenderer, но я не уверен, как ее использовать. Я уже понял, как это сделать в сетке, но не в поле выбора ...

Поле выбора (todo):

rbgroup = new RadioButtonGroup<>();
rbgroup.setRequired(true);
rbgroup.setLabel("Title of radiobuttongroup");
rbgroup.setItems(true, false); // how to display them in the frontend as "Green option" / "Red option"?

....

binder.forField(rbgroup).bind("mybooleanField");

Сетка: (сделано)

addColumn((mn) -> { // custom display
            final String displayAS;
            if (mn.getBoolValue()) {
                displayAS = "Option Red";
            } else {
                displayAS = "Option Green";
            }
            return displayAS;
        })
.setHeader("Columntitle")
.setFlexGrow(1)
.setSortable(true)
.setKey("Color Option");

1 Ответ

4 голосов
/ 03 апреля 2020

Как показано в примерах кода RadioButtonGroup , установка средства визуализации для отображения текста может быть выполнена следующим образом (сочетание кода примера и вашего кода):

RadioButtonGroup<Boolean> rbgroup = new RadioButtonGroup<>();
rbgroup.setRequired(true);
rbgroup.setLabel("Title of radiobuttongroup");
rbgroup.setItems(true, false);
rbgroup.setRenderer(new TextRenderer<>((mn) -> {
    if (mn) {
        return "Option Red";
    } else {
        return "Option Green";
    }
}));

Если Вы хотите отобразить любой компонент Vaadin вместо только текста, вы можете использовать ComponentRenderer вместо TextRenderer. Я использую простой Span в качестве примера, но вы можете построить сложные макеты и вернуть их вместо этого.

RadioButtonGroup<Boolean> rbgroup = new RadioButtonGroup<>();
rbgroup.setRequired(true);
rbgroup.setLabel("Title of radiobuttongroup");
rbgroup.setItems(true, false);
rbgroup.setRenderer(new ComponentRenderer<>((mn) -> {
    if (mn) {
        return new Span("Option Green");
    } else {
        return new Span("Option Red");
    }
}));
...