Vaadin DropDown/Select/Spinner 最佳实践?

Vaadin DropDown/Select/Spinner best practice?

我正在查看 Vaadin 组件,Vaadin 中的“受欢迎的”Select 组件似乎没有 运行 索引。

使用此代码:

List<String> list = new ArrayList<>();
    list.add("A");
    list.add("B");
    list.add("A");
    
    Select<String> select = new Select<>();
    select.setItems(list);

所以当我有以下列表时:

  1. 一个
  2. B
  3. 一个

然后我选择第三个选项 A,它会显示为列表中的第一个选项,也是 A。是否有具有 java 实现的 Vaadin 组件或库,其中 运行 索引值?或者是否有解决方法。

最终用户如何区分这些相同的选项?

Select 组件依赖于 equalshashCode 方法来区分项目。在您的情况下,这两个字符串彼此相等,因此从组件的角度来看它们是相同的。

因此,如果您有一个有效的用例,则必须传递 equals 已针对该用例正确实施的项目。

有几种方法可以做到这一点:制作自定义 class、传入值映射、传入枚举等。在所有情况下,您可能都希望使用自定义项目标签生成器。

有了地图,它看起来像这样:

Map<Integer, String> values = new HashMap<>();
values.put(1, "A");
values.put(2, "B");
values.put(3, "A");

Select<Integer> select = new Select<>();
select.setItems(values.keySet());
select.setItemLabelGenerator(values::get);

add(select);

或者像 cfrick 建议的那样使用枚举:

enum Option {
    FIRST_A("A"), B("B"), SECOND_A("A");

    private final String name;

    Option(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
}

...

Select<Option> select = new Select<>();
select.setItems(Option.values());
select.setItemLabelGenerator(Option::getName);

add(select);