2017-07-02 98 views
-1

根据下面的示例代码Java FX绑定默认情况下似乎不是贪婪。Javafx贪婪绑定

assertEquals(2,calledEffect); 

不起作用 但

assertEquals(2,keepBinding.get()) 

一样。

我怎样才能确保绑定是自动激活 - 获得贪婪的行为?

long calledEffect=0; 
private LongBinding keepBinding; 
public long callMe(long value) { 
    calledEffect=value+1; 
    return calledEffect; 
} 

@Test 
public void testBinding() { 
    SimpleLongProperty lp = new SimpleLongProperty(); 
    lp.setValue(4711); 
    keepBinding=Bindings.createLongBinding(()->callMe(lp.get()),lp); 
    lp.setValue(1); 
    //assertEquals(2,calledEffect); 
    assertEquals(2,keepBinding.get()); 
} 

回答

1

只有当您需要获取其值时才计算绑定。如果你想调用代码每当价值的变化,利用变化监听器:

lp.addListener((obs, oldValue, newValue) -> callMe(newValue)); 

那么你的代码需要改为:

long calledEffect=0; 
private LongBinding keepBinding; 
public long callMe(Number newValue) { 
    calledEffect=newValue.longValue()+1; 
    return calledEffect; 
} 

@Test 
public void testBinding() { 
    SimpleLongProperty lp = new SimpleLongProperty(); 
    lp.setValue(4711); 
    keepBinding=Bindings.createLongBinding(()->callMe(lp.get()),lp); 
    lp.addListener((obs, oldValue, newValue) -> callMe(newValue)); 
    lp.setValue(1); 
    assertEquals(2,calledEffect); 
    assertEquals(2,keepBinding.get()); 
}