【发布时间】:2010-11-15 15:49:34
【问题描述】:
为了了解 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;
}
}
现在在一个单独的类中,我定义了两个 Text 小部件,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 中的文本,那么setter 会按预期自动调用,这会在模型中同时设置y 和x。但是,xText 没有更新。为什么是这样? firePropertyChange() 呼叫不应该安排更新文本吗?
谢谢, 格雷厄姆。
【问题讨论】:
标签: java data-binding jface