如何映射 JavaFX observables 的值?

Chr*_*ris 7 java javafx javafx-8

我有一个SimpleIntegerProperty并想从中派生出一个SimpleObjectProperty<Color>
为此,我想象了一些机制,比如流和可选:

SimpleIntegerProperty intProp;
ObjectProperty<Color> colorProp = intProp.map(i -> convertIntToColor(i), c -> convertColorToInt(c));
Run Code Online (Sandbox Code Playgroud)

是否已经内置了一些东西,还是我真的需要自己推出它?
如果没有这样的东西,这似乎很奇怪,因为查看 的所有Bindings功能会让您强烈地感觉到该功能也应该存在。

谢谢!

Wim*_*uwe 6

不确定这是否是最好的方法,但这似乎可以使用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;
    }
Run Code Online (Sandbox Code Playgroud)