java Vaadin组合盒分离器

ajsxfq5m  于 2023-03-16  发布在  Java
关注(0)|答案(2)|浏览(389)

我目前正在开发一个Vaadin应用程序,我需要一个ComboBox,在项目之间有一些分隔符。我一直在四处寻找,似乎目前没有办法实现这一点。
更具体地说:

separator 是什么意思?**separator是ComboBox中的一个项,大概是不能选择的。该项的标题应该是可定制的,以达到类似这样的效果:第1节内容1、内容2第2节**内容3、内容4*
***必须加粗吗?**不,这只是一个例子。我可以用“-- Section 1 --"这样的词,没有问题。

  • 由于主要思想是使用ComboBox任何答案都应至少提供与ComboBox相同的功能。* 即:筛选、添加元素... *
  • 到目前为止,我所尝试的 *

我重写了ComboBoxsetInternalValue方法,使其无法选择如下分隔符:

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

这是可行的,但是当你选择一个分隔符时,它会在选中的框中显示几分之一秒,然后被旧的元素覆盖。

**因此,我真正的问题是:***是否有办法不允许在ComboBox * 中选择项目?

vktxenjb

vktxenjb1#

目前还没有办法在Vaadin中获得带分隔符的ComboBox,但有一些变通方法可以替代它:

该组件支持分隔符、分类和启用/禁用项。缺点是它不允许像ComboBox这样的过滤,但你可以为常规选择添加快捷方式。

  • 确认ComboBox

这样你就可以按类型或/和项目进行过滤,但你不能看到你拥有的每一个项目,因为它们是按类别/类型过滤的。当然,你可以添加一个包含所有元素的类别来绕过这个限制。

  • 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覆盖将恢复旧的元素,这可能会导致奇怪的行为。

此选项提供的功能与 * ComboBox(无可选项目)* 相同,但更好,因为它突出显示禁用的项目,并完全禁止选择其中之一。

vu8f3i0k

vu8f3i0k2#

下面是不可选分隔符的代码示例:https://vaadin.com/forum/thread/18441538/vaadin-14-combo-box-with-nonselectable-separators
诀窍是...

  • (a)禁用(不可选)选项组件(仅用于可视化)
  • (B)扩展valueChangeListener,以便每当用户选择不可选选项时,它都清除ComboBox。

它看起来像这样:

相关问题