2017-01-26 15 views
1

私はこのようなコントローラーを持っています有効な値を持つ都市のプロパティへのバインドを作成しますが、テキストプロパティを空に設定しません(おそらくフィールドのバインドを解除しますが、わかりません)。フィールドを無効にしますが、それをするには、事前に任意のヘルプに感謝します。nullにすることができ、オブジェクトのJavaFXのプロパティにバインド

+0

あなたの結合は、 'city'がNULLでなかった場合でも、動作しないと行うことができます結合双方向について

@FXML public void initialize() { name.textProperty().bind(Val.flatMap(city, City::nameProperty).orElseConst("")); name.disableProperty().bind(city.isNull()); // ... } 

を行うことができます:あなたが変更されたときに'テキストフィールドは古い都市の名前にバインドされます。あなたは 'city'と観測可能なプロパティを作る必要があり、おそらく[EasyBind](https://github.com/TomasMikula/EasyBind)や[ReactFX]のバインディング機能(https:// github .com/TomasMikula/ReactFX)。 –

答えて

2

nameが変更された場合だけでなく、cityが変更された場合でもバインディングを変更する必要があります。これが起こるためには、cityそれ自体が観察可能でなければならない。

// private City city = null; 
private ObjectProperty<City> city = new SimpleObjectProperty<>(); 

ここで、テキストフィールドは「プロパティのプロパティ」にバインドする必要があります。標準ライブラリにはこのためのいくつかの限られたAPIがありますが、それはよく書かれておらず、null値を極端に悪く扱います。この種の機能にはサードパーティのライブラリを使用することをお勧めします。 ReactFXは内蔵この機能を持っており、あなたが

name.textProperty().bindBidirectional(Val.selectVar(city, City::nameProperty)); 
+0

私はflatMapが正確に何をしているのかよく分かりませんが、それは魅力のように機能します。最後の質問は、city.getCountry()。getName()のようなネストされたプロパティにバインドを作成する方法ですか? – user2005494

+0

'Val.flatMap(city、city :: countryProperty).flatMap(Country :: nameProperty).orElseConst(" ")'。 –

+0

ありがとう、それは私の問題を解決しました – user2005494

関連する問題