2016-09-02 5 views
2

私はSimpleIntegerPropertyを持っており、それからSimpleObjectProperty<Color>を派生させたいと思っています。そのために
私はストリームとoptionalsと同じように、いくつかのメカニズムを想像:JavaFX観測値の値をマップする方法は?

SimpleIntegerProperty intProp; 
ObjectProperty<Color> colorProp = intProp.map(i -> convertIntToColor(i), c -> convertColorToInt(c)); 

はビルトインすでに何かあるのか、私は本当に自分でこれを展開する必要がありますか?
このようなことがなければ、Bindingsのすべての力を見れば、この機能もそこにあるはずの強い感触が得られるので、奇妙に思えるでしょう。

ありがとうございます!

答えて

2

わからないこれが最良の方法ですが、これはBindings.createObjectBindingを使用して動作しているようならば:

@Test 
    public void test() { 
     SimpleIntegerProperty simpleIntegerProperty = new SimpleIntegerProperty(1); 
     ObjectBinding<Color> binding = Bindings 
       .createObjectBinding(() -> converToColor(simpleIntegerProperty.get()), simpleIntegerProperty); 
     System.out.println(binding.get()); 
     binding.addListener(new ChangeListener<Color>() { 
      @Override 
      public void changed(ObservableValue<? extends Color> observable, Color oldValue, Color newValue) { 
       System.out.println(newValue); 
      } 
     }); 
     simpleIntegerProperty.set(2); 
    } 

    private Color converToColor(int i) { 
     switch (i) { 
      case 1: 
       return Color.RED; 
      case 2: 
       return Color.BLUE; 
     } 
     return null; 
    } 
1

ヴィムの答えはあなたが唯一の標準のJavaFXライブラリを使用したい場合は、これを行うための最善の方法です。プロジェクトにサードパーティのライブラリを追加するために満足している場合は、トマスMikulaのReactFX(バージョン2.0以降)は、箱から出して、この機能を提供します。

IntegerProperty rgba = new SimpleIntegerProperty(); 
Property<Color> color = Var.mapBidirectional(rgba.asObject(), 
    this::convertIntToColor, this::convertColorToInt); 

// ... 

private Color convertIntToColor(Integer rgba) { 
    // ... 
} 

private Integer convertColorToInt(Color c) { 
    // ... 
} 
+0

私ちょっとこのような、しかし、このライブラリは "いないようです私がここで使うことができるものはまったくありません:(。 – Chris

+0

歴史は彼が別のプロジェクト[EasyBind](https:/)から機能をロールしたことです。 EasyBindは当初[JavaFX機能要求](https://bugs.openjdk.java.net/browse/JDK)の概念実証として書かれていましたが、 -8091544)。その機能リクエストはまだ正式にJDK9向けに予定されていますが、現在解決されていないため、そこには存在しないと思われます。 r点。もちろん、ソースコードはすべて入手可能ですので、あなたがそれを十分に気に入っているのであれば、重要な部分を独自の実装にロールバックすることができます:)。 –

関連する問題