如何知道是否从select或用户

时间:2017-01-05 08:56:31

标签: java combobox vaadin

我定义了一个像这样的ComboBox:

ComboBox myCombo = new ComboBox();
myCombo.addValueChangeListener(event -> {
    //Some code
});

然后,在向ComboBox添加项目后,我选择一个:

myCombo.select(someItem);

有什么方法可以让我知道是否由于调用myCombo.select(someItem)或者因为用户更改了ComboBox的值而执行了值更改侦听器中的代码?

2 个答案:

答案 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
});