我有一个带有ValueChangeListener的PopupDateField。
有没有办法区分是否从.setValue() - Call或User-Input触发了Event?
我希望仅在用户更改值时才会执行事件,而不是由程序更改事件。
我在设置新值之前删除了ValueChangListener,并在之后添加了它,我做了一个脏的解决方法,但我感谢更好的解决方案......
private static void setDateFieldValue(final PopupDateField dateField, Date value) {
Collection<Property.ValueChangeListener> listeners = (Collection<Property.ValueChangeListener>)dateField.getListeners(Property.ValueChangeEvent.class);
listeners.forEach(new Consumer<Property.ValueChangeListener>() {
@Override
public void accept(Property.ValueChangeListener listener) {
dateField.removeValueChangeListener(listener);
}
});
dateField.setValue(value);
listeners.forEach(new Consumer<Property.ValueChangeListener>() {
@Override
public void accept(Property.ValueChangeListener listener) {
dateField.addValueChangeListener(listener);
}
});
}