强制JavaFX属性无效
我有一个包含getter/setter的类,用于与底层设备驱动程序交互。getter从设备读取数据,setter将数据写入设备。为了绑定到GUI控件,我将向这个类添加一个FX属性。我使用JavaBeanPropertyBuilder及其works构建属性。但是属性值不仅可以在GUI端更改,也可以在设备端更改,因此我需要通过计时器更新属性,并且我希望强制使属性无效以更新所有绑定。可能吗 UPD带有代码示例:强制JavaFX属性无效,java,javafx,binding,properties,invalidation,Java,Javafx,Binding,Properties,Invalidation,我有一个包含getter/setter的类,用于与底层设备驱动程序交互。getter从设备读取数据,setter将数据写入设备。为了绑定到GUI控件,我将向这个类添加一个FX属性。我使用JavaBeanPropertyBuilder及其works构建属性。但是属性值不仅可以在GUI端更改,也可以在设备端更改,因此我需要通过计时器更新属性,并且我希望强制使属性无效以更新所有绑定。可能吗 UPD带有代码示例: class MyDevice { public double getSpeed()
class MyDevice {
public double getSpeed() {
return (double)driver.getParameter("speed");
}
public void setSpeed(double value) {
driver.setParameter("speed", value);
}
private DoubleProperty speed = new JavaBeanDoublePropertyBuilder().bean(this).name("speed").build();
public DoubleProperty speedProperty() {
return speed;
}
}
现在,我将
MyDevice::speedProperty
绑定到GUI控件,如果在驱动程序端更改了一个值,我需要类似speedProperty.invalidate()
的内容来强制处理所有注册的侦听器并更新绑定。(例如,通过定时器查询设备状态,我知道驾驶员侧的变化,但不是所有可用参数。)简短的回答是肯定的。但是,如果您没有更具体地说明您的用例,那么这里只有一些一般性的建议:
- 您可以向属性中添加`,只要绑定属性的值发生更改,就会调用该属性
- 但是,双向绑定可能并不可取,在这种情况下,您可以将注册到
JavaBeanDoubleProperty
基础数据已更改
private JavaBeanDoubleProperty speed = new JavaBeanDoublePropertyBuilder().bean(this).name("speed").build();
但这种方法是受保护的。如何使属于类成员的属性无效?@kerner1000此方法不受
保护
,但公共
,请参见,它是JavaBeanProperty。对不起,我没看到。
speed.fireValueChangedEvent();