Я пытаюсь создать программу, которая позволяет пользователю выбирать цвета RGB с помощью переключателей и изменять значение от 0 до 255 с помощью ползунка. Изменения цвета должны применяться к тексту. Когда выбраны R, G или B, в тексте должен присутствовать только выбранный цвет (т. Е. Если выбрано зеленое, красные и синие значения равны 0).Изменение цвета текста с помощью слайдера
В настоящий момент программа работает в некоторой степени. Например, если ползунок находится в значении 150, и я выбрал новый цвет, а затем переместил ползунок, цвет текста будет равен 150 или в любом случае значение, заданное слайдером, прежде чем пытаться переместить его на новое значение. Я должен выбрать новый цвет перед перемещением слайдера, если я хочу его обновить. Он обновляется только один раз для каждого выбранного цвета. Я хочу, чтобы он легко обновлял выбранный цвет. Пример кода ниже:
public class Oblig5 extends Application {
static int colorValue = 0;
static int red = 0;
static int green = 0;
static int blue = 0;
public static void main(String[] args) {
launch(args);
}
public void start(Stage primaryStage) {
// Create panes
BorderPane bPane = new BorderPane();
VBox vBox = new VBox();
bPane.setLeft(vBox);
// Create text and place it in the pane
Text text = new Text("Oblig 5");
text.setFont(Font.font("Times New Roman", FontWeight.NORMAL, FontPosture.REGULAR, 40));
bPane.setCenter(text);
// Create radio buttons and place them in the VBox
RadioButton rbRed = new RadioButton("Red");
RadioButton rbGreen = new RadioButton("Green");
RadioButton rbBlue = new RadioButton("Blue");
ToggleGroup group = new ToggleGroup();
rbRed.setToggleGroup(group);
rbGreen.setToggleGroup(group);
rbBlue.setToggleGroup(group);
// Create handlers for radiobuttons
rbRed.setOnAction(e -> {
if (rbRed.isSelected()) {
red = colorValue;
green = 0;
blue = 0;
}
});
rbGreen.setOnAction(e -> {
if (rbGreen.isSelected()) {
red = 0;
green = colorValue;
blue = 0;
}
});
rbBlue.setOnAction(e -> {
if (rbBlue.isSelected()) {
red = 0;
green = 0;
blue = colorValue;
}
});
vBox.getChildren().addAll(rbRed, rbGreen, rbBlue);
// Create a slider and place it in the BorderPane
Slider slider = new Slider(0, 255, 135);
slider.setShowTickLabels(true);
slider.setShowTickMarks(true);
bPane.setBottom(slider);
bPane.setAlignment(slider, Pos.CENTER);
// Create a handler for the slider
slider.valueProperty().addListener(ov -> {
colorValue = (int) slider.getValue();
text.setFill(Color.rgb(red, green, blue));
});
// Create a scene and place it in the stage
Scene scene = new Scene(bPane, 400, 400);
primaryStage.setScene(scene);
primaryStage.setTitle("Oblig 5");
primaryStage.show();
}
}
Любые материалы приветствуются!
Спасибо за ответ! Поскольку это школьное задание, в котором учатся слушатели, другой ответ был более подходящим для выбора в качестве решения. Во всяком случае, я дал взнос, так как ваш ответ также кажется хорошим способом. – Esben86