我目前正在开发一个Vaadin应用程序,而且我已经满足了ComboBox
项之间需要一些分隔符的需求。我一直在寻找周围,似乎目前没有办法实现这一目标。
更具体:
ComboBox
中可能无法选择的项目。此项目的标题应该是可自定义的,以达到类似这样的效果:第1部分 第1部分,第2部分 第2部分 事情3,事情4 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);
}
}
中选择项目?
答案 0 :(得分:0)
目前在Vaadin中无法获得带有分隔符的ComboBox
这样的东西,但是有一些变通办法可以用来代替它:
此组件支持分隔符,类别和启用/禁用项目。该问题是它不允许像ComboBox
那样进行过滤,但您可以添加常用选项的快捷方式。
Anidated 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
相同的功能和不可选项但更好,因为它突出显示禁用的项目,并完全禁止选择其中一项。