我目前正在开发一个Vaadin应用程序,我需要一个ComboBox
,在项目之间有一些分隔符。我一直在四处寻找,似乎目前没有办法实现这一点。
更具体地说:
separator 是什么意思?**separator是ComboBox
中的一个项,大概是不能选择的。该项的标题应该是可定制的,以达到类似这样的效果:第1节内容1、内容2第2节**内容3、内容4*
***必须加粗吗?**不,这只是一个例子。我可以用“-- Section 1 --"这样的词,没有问题。
- 由于主要思想是使用
ComboBox
,任何答案都应至少提供与ComboBox
相同的功能。* 即:筛选、添加元素... * - 到目前为止,我所尝试的 *
我重写了ComboBox
的setInternalValue
方法,使其无法选择如下分隔符:
public class ComboBoxWithSeparators() {
@Override
protected void setInternalValue(Object newValue) {
Object oldValue = super.getValue();
if(isSeparator)
super.setInternalValue(oldValue);
else
super.setInternalValue(newValue);
}
}
这是可行的,但是当你选择一个分隔符时,它会在选中的框中显示几分之一秒,然后被旧的元素覆盖。
**因此,我真正的问题是:***是否有办法不允许在ComboBox
* 中选择项目?
2条答案
按热度按时间vktxenjb1#
目前还没有办法在Vaadin中获得带分隔符的
ComboBox
,但有一些变通方法可以替代它:该组件支持分隔符、分类和启用/禁用项。缺点是它不允许像
ComboBox
这样的过滤,但你可以为常规选择添加快捷方式。ComboBox
:这样你就可以按类型或/和项目进行过滤,但你不能看到你拥有的每一个项目,因为它们是按类别/类型过滤的。当然,你可以添加一个包含所有元素的类别来绕过这个限制。
ComboBox
,无可选项目:此解决方法的作用类似于常用的
ComboBox
,但您要重写#setInternalValue
以使某些元素不可选,例如:这里的问题是你可以 * 实际上 * 选择分隔符,但是
#setInternalValue
覆盖将恢复旧的元素,这可能会导致奇怪的行为。此选项提供的功能与 *
ComboBox
(无可选项目)* 相同,但更好,因为它突出显示禁用的项目,并完全禁止选择其中之一。vu8f3i0k2#
下面是不可选分隔符的代码示例:https://vaadin.com/forum/thread/18441538/vaadin-14-combo-box-with-nonselectable-separators
诀窍是...
它看起来像这样: