我定义了一个像这样的ComboBox:
ComboBox myCombo = new ComboBox();
myCombo.addValueChangeListener(event -> {
//Some code
});
然后,在向ComboBox添加项目后,我选择一个:
myCombo.select(someItem);
有什么方法可以让我知道是否由于调用myCombo.select(someItem)
或者因为用户更改了ComboBox的值而执行了值更改侦听器中的代码?
答案 0 :(得分:1)
我们只使用_internalChange
这样的标志,然后在侦听器函数中检查它。不够酷,但它的工作原理:)可重用的解决方案是创建一个新的组件。
boolean _internalChange = false;
void init(){
ComboBox myCombo = new ComboBox();
myCombo.addValueChangeListener(event -> {
if(_internalChange) {
// do something
} else {
// do something else
}
});
}
void selectMyCombo(Object value){
_internalChange = true;
myCombo.select(stuff)
_internalChange = false;
}
答案 1 :(得分:0)
我认为你需要做的就是这个。如果您在选择初始值时未添加ValueChangeListener,则听众不会被触发。
ComboBox myCombo = new ComboBox();
// add items to the ComboBo
myCombo.select(someItem);
myCombo.addValueChangeListener(event -> {
//Some code
});