Чтобы понять, как работает привязка данных JFace, у меня есть объект модели с двумя свойствами. Изменение одного свойства должно установить другое для того же значения:
public class Model {
private double x;
private double y;
private PropertyChangeSupport changeSupport = new PropertyChangeSupport(this);
public void addPropertyChangeListener(String propertyName,
PropertyChangeListener listener) {
propertyChangeSupport.addPropertyChangeListener(propertyName, listener);
}
public void removePropertyChangeListener(PropertyChangeListener listener) {
propertyChangeSupport.removePropertyChangeListener(listener);
}
public void setX(double x) {
propertyChangeSupport.firePropertyChange("x", this.x, this.x = x);
}
public double getX() {
return x;
}
public void setY(double y) {
propertyChangeSupport.firePropertyChange("y", y, this.y = y);
setX(y);
}
public double y() {
return y;
}
}
Теперь в отдельном классе я определяю два текстовых виджета xText
и yText
, которые связаны с этим объектом следующим образом:
DataBindingContext bindingContext = new DataBindingContext();
bindingContext.bindValue(WidgetProperties.text(SWT.Modify).observe(xText),
BeanProperties.value(HumidityScanParameters.class,"x").observe(getModel()));
bindingContext.bindValue(WidgetProperties.text(SWT.Modify).observe(yText),
BeanProperties.value(HumidityScanParameters.class, "y").observe(getModel()));
Я обнаружил, что если я изменяю текст в yText
, то сеттер автоматически вызывается, как и ожидалось, и в модели устанавливаются y
и x
Однако xText
не обновляется . Почему это? Разве firePropertyChange()
не должен организовать обновление текста?
Спасибо,
Graham.