Как использовать ползунки для изменения значений RGB? - PullRequest
0 голосов
/ 10 апреля 2020

Я пытаюсь написать программу, которая использует ползунки для изменения значений 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()));
            }
        });
...