复杂属性绑定

时间:2017-05-18 16:53:19

标签: java javafx properties

我想双向绑定color属性rgb字段以及ColorPicker。这就是我所拥有的:

private IntegerProperty r = new SimpleIntegerProperty();
private IntegerProperty g = new SimpleIntegerProperty();
private IntegerProperty b = new SimpleIntegerProperty();
private ObjectProperty<Color> color = new SimpleObjectProperty<>();

ColorPicker colorPicker = new ColorPicker();
// Bind the colorPicker and 'color'
colorPicker.valueProperty().bindBidirectional(color);

现在我需要绑定color并将其拆分为rgb。我知道我可以从这样的事情开始(单向):

color.bind(Bindings.createObjectBinding(
        () -> Color.rgb(r.get(), g.get(), b.get()),
        r, g, b
));

但Java抛出异常无法设置绑定值。 还有其他方法可以做到这一点,还是应该使用听众? 谢谢!

1 个答案:

答案 0 :(得分:1)

如果您希望所有这些属性保持一致,并希望能够独立更改其中任何属性(并根据需要更新其他属性),那么您只能使用双向绑定和侦听器(而不是单向绑定) ,不允许将绑定值设置为违反绑定的值。一种可能的方式是:

viewDidLoad