强制JavaFX属性无效

强制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()

我有一个包含getter/setter的类,用于与底层设备驱动程序交互。getter从设备读取数据,setter将数据写入设备。为了绑定到GUI控件,我将向这个类添加一个FX属性。我使用JavaBeanPropertyBuilder及其works构建属性。但是属性值不仅可以在GUI端更改,也可以在设备端更改,因此我需要通过计时器更新属性,并且我希望强制使属性无效以更新所有绑定。可能吗

UPD带有代码示例:

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