2

我正在使用 Vaadin 14.1.21 + Java JDK/JRE 1.8

我在 DataClass 中有一个单选单选按钮组,后面有一个布尔字段。

我不想将“真”/“假”显示为用户的选项,而是自定义字符串,让我们说“红色选项”表示真,“绿色选项”表示假。

我在 API 中看到有一个名为 setRenderer 的函数,但我不知道如何使用它。我已经想出了如何在网格中做到这一点,但不是在选择框中......

选择框(待办事项):

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");
4

1 回答 1

4

正如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 组件而不仅仅是文本,您可以使用 aComponentRenderer而不是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");
    }
}));
于 2020-04-03T09:02:07.597 回答