I'm trying to write a program that uses sliders to change the RGB values of a rectangle's color. I started trying with listeners, but as soon as I try to change a different slider, it resets to color so I don't know if listeners are the best option.
Here is the relevant portion of my code:
redSlider.valueProperty().addListener((ObservableValue<? extends Number>
ov, Number old_val, Number new_val) -> {
double redLevel1 = 0;
redLevel1 = (double) new_val;
Color c1 = Color.rgb((int) redLevel1, 0, 0);
rectangle.setFill(c1);
});
greenSlider.valueProperty().addListener((ObservableValue<? extends Number>
ov, Number old_val, Number new_val) -> {
double greenLevel = 0;
greenLevel = (double) new_val;
Color c1 = Color.rgb(0, (int) greenLevel, 0);
rectangle.setFill(c1);
});
blueSlider.valueProperty().addListener((ObservableValue<? extends Number>
ov, Number old_val, Number new_val) -> {
double blueLevel = 0;
blueLevel = (double) new_val;
Color c1 = Color.rgb(0, 0, (int) blueLevel);
rectangle.setFill(c1);
});
EDIT: I ended up using a ChangeListener to get it working.
Here is the code I used:
redSlider.valueProperty().addListener(new ChangeListener<Number>() {
public void changed(ObservableValue<? extends Number> ov, Number
old_val, Number new_val) {
rectangle.setFill(Color.rgb((int) redSlider.getValue(),
(int) greenSlider.getValue(),
(int) blueSlider.getValue()));
}
});
greenSlider.valueProperty().addListener(new ChangeListener<Number>() {
public void changed(ObservableValue<? extends Number> ov, Number
old_val, Number new_val) {
rectangle.setFill(Color.rgb((int) redSlider.getValue(),
(int) greenSlider.getValue(),
(int) blueSlider.getValue()));
}
});
blueSlider.valueProperty().addListener(new ChangeListener<Number>() {
public void changed(ObservableValue<? extends Number> ov, Number
old_val, Number new_val) {
rectangle.setFill(Color.rgb((int) redSlider.getValue(),
(int) greenSlider.getValue(),
(int) blueSlider.getValue()));
}
});
I prefer to use bindings instead of ChangeListeners for stuff like this. The following class will demonstrate the desired action:
Use the following main() to run it: