java - What makes a model change get propagated via JFace databinding? -


in order understand how jface databindings working, have model object 2 properties. changing 1 property should set other same value:

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;     } } 

now in separate class define 2 text widgets, xtext , ytext, bound object this:

    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())); 

i have found if change text in ytext, setter automatically called expected, , sets both y , x in model. however, xtext not updated. why this? shouldn't firepropertychange() call arrange text updated?

thanks, graham.

the compiler optimising away initial value of this.x , this.y, led propertychangesupport instance discard change notification. didn't think had changed. if introduce temporary variable this:

public void setx(double x) {     double oldvalue = this.x;     this.x = x;     propertychangesupport.firepropertychange("x", oldvalue, x); } 

then notifications occur might expect.


Comments

Popular posts from this blog

android - Spacing between the stars of a rating bar? -

html - Instapaper-like algorithm -

c# - How to execute a particular part of code asynchronously in a class -