Я пытаюсь написать программу, которая использует ползунки для изменения значений RGB цвета прямоугольника. Я начал пробовать со слушателями, но как только я пытаюсь изменить другой слайдер, он сбрасывает цвет, поэтому я не знаю, являются ли слушатели лучшим вариантом.
Вот соответствующая часть моего кода:
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);
});
РЕДАКТИРОВАТЬ: я закончил с использованием ChangeListener
, чтобы заставить его работать. Вот код, который я использовал:
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()));
}
});