今天分享java FX 2.0中 Bindings class中四則運算(以加法為例,其餘比照辦理),四則運算的結果於還有Fluent style寫法(Pro Java FX書中提的),孤陋寡聞的我沒聽過,不過簡單說就是一直append運算式
當然簡單的變數加減透過z=x+y就可以了,但如果x改變了、y改變了,原本的z除非重新執行z=x+y,否則值還是保持舊的,但若有了Binding的概念後,每當變數重新指定新值,Binding的變數,本例為NumberBinding,會接受invalidate event,告知原binding的值須重新計算,範例如下:
import javafx.beans.binding.Bindings;
import javafx.beans.binding.NumberBinding;
import javafx.beans.property.IntegerProperty;
import javafx.beans.property.SimpleIntegerProperty;
public class BindingsTest {
public void CalSum(){
int x=5;
int y=8;
int z=0;
z=x+y;
System.out.println(z); //13
x=8;
y=10;
System.out.println(z); //還是13,並沒有改變
IntegerProperty iv=new SimpleIntegerProperty(5);
IntegerProperty iv2=new SimpleIntegerProperty(8);
NumberBinding sum=Bindings.add(iv, iv2);
System.out.println(sum.getValue()); //13
iv.set(8);
iv2.set(10);
System.out.println(sum.getValue()); //18
//梯形面積
IntegerProperty l=new SimpleIntegerProperty(4); //上底
IntegerProperty w=new SimpleIntegerProperty(8); //下底
IntegerProperty h=new SimpleIntegerProperty(10);//高
NumberBinding sum2=Bindings.add(l, w);
NumberBinding area_t=Bindings.multiply(sum2, h);
NumberBinding area_T=Bindings.divide(area_t, 2);
System.out.println(area_T.getValue()); //60
NumberBinding area_T2=l.add(w).multiply(h).divide(2); //Fluent Style
System.out.println(area_T2.getValue()); //60
l.set(10);
w.set(20);
h.set(30);
System.out.println(area_T.getValue()); //450
System.out.println(area_T2.getValue()); //450
}