Переключатель не отображает цветной текст - PullRequest
1 голос
/ 30 апреля 2019

Мне нужно использовать переключатель, чтобы сделать три переключателя: красный, синий и зеленый. Радиокнопки не меняются на эти цвета. В дополнение к этим изменениям, остальные должны остаться черным шрифтом. Я закомментировал красный шрифт setTextFill, и никакого эффекта не было. Я также прокомментировал Черные шрифты, и они не дали эффекта. IsSelection работает.

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.RadioButton;
import javafx.scene.control.ToggleGroup;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.stage.Stage;

public class ButtonRadio extends Application {

    @Override
    public void start(Stage primaryStage) {
        // primary stage

        primaryStage.setTitle("javaFX");
        // label for text

        Label labelfirst = new Label("Choose a button");

        // vBox for buttons
        VBox layout = new VBox(3);
        // radio buttons

        RadioButton radio1, radio2, radio3;
        radio1 = new RadioButton("Red");
        radio2 = new RadioButton("Blue");
        radio3 = new RadioButton("Green");
        // ToggleGroup for entering

        ToggleGroup group = new ToggleGroup();
        // radio button variables of toggle groups 

        radio1.setToggleGroup(group);
        radio2.setToggleGroup(group);
        radio3.setToggleGroup(group);
        // if statements for radio buttons and fonts red, blue, green
        if (group.getSelectedToggle() != null) {

            if (radio1.isSelected()) {
                radio1.setTextFill(Color.RED); 
                radio2.setTextFill(Color.BLACK);
            radio3.setTextFill(Color.BLACK);

        } else if (radio2.isSelected()) {
            radio2.setTextFill(Color.BLUE);
            radio1.setTextFill(Color.BLACK);
            radio3.setTextFill(Color.BLACK);
        }
        else if (radio3.isSelected())
        {
            radio3.setTextFill(Color.GREEN);
            radio1.setTextFill(Color.BLACK);
            radio2.setTextFill(Color.BLACK);
        }
        }
        // layout to put in parent
        layout.getChildren().addAll(labelfirst, radio1, radio2, radio3);
        // put in scene and stage to show
        Scene scene1 = new Scene(layout, 400, 250);
        primaryStage.setScene(scene1);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }

}

Edit:

Я попытался добавить слушателя. Это все еще не работает.

                if (radio1.isSelected()) {
                radio1.setOnAction((event) -> {
                radio1.setTextFill(Color.RED);
                });

1 Ответ

1 голос
/ 30 апреля 2019

Ваш оператор if будет выполняться только один раз, проверяя выбранный статус вашего RadioButtons только при первом запуске приложения.

Вам необходимо прослушать изменения для выбранного RadioButton и действовать согласованно. Это легко сделать, добавив слушателя к ToggleGroup selectedToggleProperty().

Снимите блок if и замените его следующим образом:

    group.selectedToggleProperty().addListener((observable, oldValue, newValue) -> {

        // Set the previously-selected RadioButton text to BLACK
        if (oldValue != null) ((RadioButton) oldValue).setTextFill(Color.BLACK);

        // Set the color for the newly-selected RadioButton
        if (newValue.equals(radio1)) {
            ((RadioButton) newValue).setTextFill(Color.RED);
        } else if (newValue.equals(radio2)) {
            ((RadioButton) newValue).setTextFill(Color.BLUE);

        } else if (newValue.equals(radio3)) {
            ((RadioButton) newValue).setTextFill(Color.GREEN);

        }

    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...