2016-08-27 9 views
1

私は、基礎となるデバイスドライバと対話するためのgetters/setterを持つクラスを持っています。 getterはデバイスからデータを読み込み、setterはデバイスにデータを書き込みます。 GUIコントロールにバインドするために、このクラスにFXプロパティを追加します。私はJavaBeanPropertyBuilderを使用してプロパティをビルドし、それは動作します。しかし、プロパティ値はGUI側だけでなくデバイス側でも変更できるので、タイマーでプロパティを更新する必要があり、すべてのバインディングを更新するためにプロパティを無効にしたいとします。出来ますか?コード例でJavaFXプロパティの強制無効化

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

、私は、GUIコントロールにMyDevice::speedPropertyを結合して、値は、ドライバ側で変更された場合、私はすべての登録済みリスナーおよび更新を取り扱う強制的にspeedProperty.invalidate()ような何かをしたいですバインディング(私は、デバイスの状態をタイマーが問い合わせるなどして、ドライバ側の変更について知っていますが、すべての利用可能なパラメータではありません)

答えて

1

fireValueChangedEventメソッドを使用して、基礎データが変更されたことをJavaBeanDoublePropertyに通知することができます。

private JavaBeanDoubleProperty speed = new JavaBeanDoublePropertyBuilder().bean(this).name("speed").build(); 
speed.fireValueChangedEvent(); 
0

短い答えは「はい」です。

  • あなたはあなたの財産に `InvalidationListenerを追加することができ、バウンドプロパティが、それはあなたが考えるかもしれない値
  • です変更するたびに呼び出されます。しかし、あなたのユースケースについて、より具体的なことなく、単にいくつかの一般的なアドバイスがありますプロパティbidirectionalをバインドすると、どちらの方向からの変更も反対側に反映されます。
  • ただし、双方向バインディングは好ましくない場合があり、その場合はChangeListenerPropertyに登録できます。
関連する問題