2

我正在使用 Vaadin 14 + Java。

我有一个带有枚举的组合框作为可能的选择项。

我想在组合框中显示枚举作为可能的选择,但我想在鼠标悬停/工具提示上显示更长的属性“名称”。

我看到旧版本的 Vaadin 也有同样的问题(显然没有解决方案),我想知道现在是否可以选择这样做。

组合框

ComboBox<MyEnum> cb = new ComboBox<>();
cb.setLabel("MyComboBox");
cb.setItems(MyEnum.values());

//cb.setDescription --> does not exist for ComboBox?

我的枚举类:

public enum MyEnum {

    HIGH("High long name explanation"),
    MEDIOCRE("Mediocre long name explanation"),
    LOW("Low long name explanation");

    private final String name;

    private MyEnum(String name) {
        this.name = name;
    }

    public String getValue(){
      return name;
    }

}
4

1 回答 1

5

title在 HTML 级别上,通过在元素上定义属性来创建工具提示。

但是该标题属性必须放在选项上,而不是组合框本身,并且ComboBox没有用于执行此操作的 java API,例如comboBox.setItemTooltipProvider(..).

但是,有一个用于定义渲染器的 java API,然后将应用于每个项目。除了使用简单地将选项名称作为字符串返回的 Renderer 之外,我们还可以使用 aComponentRenderer来应用于每个项目。在那里您创建一个Span包含显示项目名称的组件(例如“HIGH”),并在该 Span 元素上定义标题属性。

ComboBox<MyEnum> comboBox = new ComboBox<>();
comboBox.setLabel("MyComboBox");
comboBox.setItems(MyEnum.values());
comboBox.setRenderer(new ComponentRenderer<>(item -> {
    Span span = new Span(item.name());
    span.getElement().setProperty("title", item.getValue());
    return span;
}));

在此处输入图像描述

于 2020-04-14T08:30:47.033 回答