Vaadin组合框分离器

时间:2018-01-31 09:06:57

标签: java combobox vaadin vaadin7

我目前正在开发一个Vaadin应用程序,而且我已经满足了ComboBox项之间需要一些分隔符的需求。我一直在寻找周围,似乎目前没有办法实现这一目标。

更具体:

  • 分隔符是什么意思?分隔符是ComboBox中可能无法选择的项目。此项目的标题应该是可自定义的,以达到类似这样的效果:第1部分 第1部分,第2部分 第2部分 事情3,事情4
  • 一定要大胆吗? 不,这只是一个例子。我可以使用" - 第1节 - "之类的东西,那里没有问题。
  • 由于主要想法是使用ComboBox任何答案都应提供至少与其相同的功能 ie:过滤,添加元素......

到目前为止我尝试过的事情:
我覆盖了setInternalValue的{​​{1}}方法,无法选择这样的分隔符:

ComboBox

这种方法有效,但是当您选择一个分隔符时,它会在所选框中显示一小段时间,然后被旧元素覆盖。
所以,我的实际问题是: 有没有办法不在public class ComboBoxWithSeparators() { @Override protected void setInternalValue(Object newValue) { Object oldValue = super.getValue(); if(isSeparator) super.setInternalValue(oldValue); else super.setInternalValue(newValue); } } 中选择项目?

相关: Add an item in ComboBox and disable it with JS

1 个答案:

答案 0 :(得分:0)

目前在Vaadin中无法获得带有分隔符的ComboBox这样的东西,但是有一些变通办法可以用来代替它:

Vaadin Menu bar
此组件支持分隔符,类别和启用/禁用项目。该问题是它不允许像ComboBox那样进行过滤,但您可以添加常用选项的快捷方式。

  • Anidated ComboBox
    Anidated <code>ComboBox</code>
    这样您就可以按类型或/和项目进行过滤,但是您无法看到每个项目,因为它们按类别/类型进行过滤。当然,您可以添加包含所有元素的类别以绕过此限制。

  • ComboBox,不可选项:
    此解决方法与通常的ComboBox相同,但您要覆盖#setInternalValue以使某些元素无法选择,如:

    public class ComboBoxWithSeparators() {
        @Override
        protected void setInternalValue(Object newValue) {
            Object oldValue = super.getValue();
            if(isSeparator(newValue))
                super.setInternalValue(oldValue);
            else
                super.setInternalValue(newValue);
        }
    }
    

这里的问题是你可以实际选择分隔符,但#setInternalValue覆盖将恢复旧元素。这可能会导致奇怪的行为。

  • @AndréSchildnativeSelectExt7
    此选项提供与 ComboBox相同的功能和不可选项但更好,因为它突出显示禁用的项目,并完全禁止选择其中一项。 NativeSelectExt7