Java 复杂属性绑定
我想将Java 复杂属性绑定,java,javafx,properties,Java,Javafx,Properties,我想将color属性与r、g、b字段以及颜色选择器进行双向绑定。以下是我所拥有的: private IntegerProperty r = new SimpleIntegerProperty(); private IntegerProperty g = new SimpleIntegerProperty(); private IntegerProperty b = new SimpleIntegerProperty(); private ObjectProperty<Color> c
color
属性与r
、g
、b
字段以及颜色选择器进行双向绑定。以下是我所拥有的:
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);
但是Java抛出异常无法设置绑定值。
还有其他方法吗?或者我应该使用侦听器吗?
谢谢大家! 如果您希望所有这些属性保持一致,并且希望能够独立地更改其中任何属性(并根据需要更新其他属性),则只能使用双向绑定和侦听器(而不是单向绑定,它不允许将绑定值设置为违反绑定)。一种可能的方法是:
ChangeListener<Number> componentListener = (obs, oldValue, newValue) ->
color.set(Color.rgb(r.get(), g.get(), b.get());
r.addListener(componentListener);
g.addListener(componentListener);
b.addListener(componentListener);
color.addListener((obs, oldColor, newColor) -> {
r.set((int)/(256*newColor.getRed()));
g.set((int)/(256*newColor.getGren()));
b.set((int)/(256*newColor.getBlue()));
});
colorPicker.valueProperty().bindBidirectional(color);
ChangeListener组件Listener=(obs、oldValue、newValue)->
color.set(color.rgb(r.get(),g.get(),b.get());
r、 addListener(componentListener);
g、 addListener(componentListener);
b、 addListener(componentListener);
addListener((obs、oldColor、newColor)->{
r、 set((int)/(256*newColor.getRed());
g、 set((int)/(256*newColor.getGren());
b、 set((int)/(256*newColor.getBlue());
});
colorPicker.valueProperty().BindDirective(颜色);
你的目标是什么?你是否希望能够做到,例如,r.set(128)
,并拥有颜色(以及相应的颜色选择器)更新?如果用户在颜色选择器中选择了一种颜色,你想更新r
、g
、和b
?我想你至少需要使用一些侦听器来实现这一点。@James\u D是的,没错。我知道有r
、g
和b
,因为我可以通过color
但我有特殊需要。谢谢你,我会找一个倾听者。
ChangeListener<Number> componentListener = (obs, oldValue, newValue) ->
color.set(Color.rgb(r.get(), g.get(), b.get());
r.addListener(componentListener);
g.addListener(componentListener);
b.addListener(componentListener);
color.addListener((obs, oldColor, newColor) -> {
r.set((int)/(256*newColor.getRed()));
g.set((int)/(256*newColor.getGren()));
b.set((int)/(256*newColor.getBlue()));
});
colorPicker.valueProperty().bindBidirectional(color);