2017-12-10 17 views
-1

javafx.scene.text.TextStringPropertyにバインドする必要があるObjectPropertyインスタンスでカスタムオブジェクトを保持しています。JavaFX 8:カスタムオブジェクトのプロパティバインディング

私が明白なことをしてtext.textProperty().bind(..);を使用すると、オブジェクトプロパティがバインドされ、Textが実際にコンテンツを表示します(私はtoStringの結果と信じています)。

しかし、私は実際にtextにdisplaydさStringを変更する必要があります。

実際にバインディングに提供される値はどこで変更できますか?私はこの単純なテスト・アプリケーションを作成した最初のanwer後

== EDIT ==

:私は二つ目は、 'バー' であると予想されるのに対し、

import javafx.beans.binding.Bindings; 
import javafx.beans.property.ObjectProperty; 
import javafx.beans.property.SimpleObjectProperty; 
import javafx.beans.property.SimpleStringProperty; 
import javafx.beans.property.StringProperty; 


public class BindingsTest { 
    public static void main(String... args) { 
     final ObjectProperty<Foo> foo = new SimpleObjectProperty<>(); 
     foo.set(Foo.FOO); 

     final StringProperty textProperty = new SimpleStringProperty(); 
     textProperty.bind(Bindings.createStringBinding(() -> foo.get().name().toLowerCase())); 

     System.out.println(textProperty.get()); 

     foo.set(Foo.BAR); 

     System.out.println(textProperty.get()); 

    } 

    private enum Foo { 
     FOO, BAR 
    } 
} 

は、両方の出力が 'foo' であります。だからおそらくすべてBindings.createStringBinding(..)私が探しているものではない?

+0

答えで行われる方法を試してみませんか?私。 'createStringBinding()'の2番目の引数として 'foo'を指定しますか? –

+0

@James_Dああ、私もそれを見たことはない - このラムダのことはまだ私を混乱させる。私は解決策を正しく再現したと思ったので、ここに投稿しました:-) – Hannes

+0

あなたは依存関係として 'foo'を指定しませんでした。 'Bindings.createStringBinding()'は、 'foo'の変更を監視して、いつ無効にするのかを知る必要があります。 – Jai

答えて

1

あなたはBindings.createStringBinding()を探しています。

final ObjectProperty<CustomObject> objProperty; 
text.textProperty.bind(Bindings.createStringBinding(() -> { 
    final CustomObject value = objProperty.getValue(); 
    return value != null ? value.toString().toUpperCase() : ""; 
}, objProperty)); 
+0

私はそれが私が探しているものではないと信じています。私は自分の質問を修正しました。 – Hannes

関連する問題