Настройка цвета фона в JavaFX не работает - PullRequest
0 голосов
/ 06 декабря 2018

Я пытаюсь закодировать программу, которая принимает пользовательский ввод в одной сцене, чтобы установить цвет фона во второй сцене.Все работает, кроме фона, цвет не меняется, он остается белым.Кто-нибудь знает, почему это может происходить?

public class Project extends Application {

    Scene scene1, scene2;

    final int WIDTH = 600;
    final int HEIGHT = 600;

    Label labelLightOrDark;

    TextField tfLightOrDark;

    private GridPane createTextFieldPane() {
        GridPane gPane = new GridPane();
        labelLightOrDark = new Label("Is it light or dark? ");

        tfLightOrDark = new TextField();

        gPane.add(labelLightOrDark, 0, 2);
        gPane.add(tfLightOrDark, 1, 2);

        return gPane;
    }

    @Override
    public void start(Stage primaryStage) {
        //first scene
        Button btGenerate = new Button("Generate My Background!");

        GridPane gPane = createTextFieldPane();
        gPane.add(btGenerate, 0, 6);
        Scene scene1 = new Scene(gPane, 600, 600);

        //second scene
        Button btReturn = new Button("Try Again!");
        btReturn.setOnAction((ActionEvent event2) -> {
        primaryStage.setScene(scene1);});

        Pane root = new Pane();
        String bColor = tfLightOrDark.getText();

        if (bColor.equalsIgnoreCase("light")) {
            root.setStyle("-fx-background-color: lightblue;");}
        else if (bColor.equalsIgnoreCase("dark")) {
            root.setStyle("-fx-background-color: darkblue;");}

        root.getChildren().add(btReturn);
        Scene scene2 = new Scene(root, 600, 600);
        btGenerate.setOnAction((ActionEvent event) -> {
            primaryStage.setScene(scene2);
        });

        primaryStage.setTitle("Create Your Own Background!");
        primaryStage.setScene(scene1);
        primaryStage.show();

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

Я полагаю, что проблема связана с моими утверждениями if, else if, потому что, когда я закомментирую эти строки, фон второй сцены становится светло-голубым.

    //if (bColor.equalsIgnoreCase("light")) {
        root.setStyle("-fx-background-color: lightblue;");}
    //else if (bColor.equalsIgnoreCase("dark")) {
        //root.setStyle("-fx-background-color: darkblue;");}

Ответы [ 2 ]

0 голосов
/ 06 декабря 2018

Все в порядке, но сохраните ссылку на то, что нажали.Вот код.

    Scene scene1, scene2;

    final int WIDTH = 600;
    final int HEIGHT = 600;

    Label labelLightOrDark;

    TextField tfLightOrDark;


    private GridPane createTextFieldPane() {
        GridPane gPane = new GridPane();
        labelLightOrDark = new Label("Is it light or dark? ");

        tfLightOrDark = new TextField();

        gPane.add(labelLightOrDark, 0, 2);
        gPane.add(tfLightOrDark, 1, 2);

        return gPane;
    }

    @Override
    public void start(Stage primaryStage) {
        //first scene
        Button btGenerate = new Button("Generate My Background!");

        GridPane gPane = createTextFieldPane();
        gPane.add(btGenerate, 0, 6);
        Scene scene1 = new Scene(gPane, 600, 600);

        //second scene
        Button btReturn = new Button("Try Again!");
        btReturn.setOnAction((ActionEvent event2) -> {
            primaryStage.setScene(scene1);
        });

        Pane root = new Pane();


        root.getChildren().add(btReturn);
        Scene scene2 = new Scene(root, 600, 600);
        btGenerate.setOnAction((ActionEvent event) -> {
            primaryStage.setScene(scene2);
            if (tfLightOrDark.getText().contains("light")) {
                root.setStyle("-fx-background-color: lightblue;");
            } 
            else if (tfLightOrDark.getText().contains("dark")) {
                root.setStyle("-fx-background-color: darkblue;");
            }
        });

        primaryStage.setTitle("Create Your Own Background!");
        primaryStage.setScene(scene1);
        primaryStage.show();

    }

    public static void main(String[] args) {
        launch(args);
    }
}
0 голосов
/ 06 декабря 2018

Проблема с кодом заключается в том, что вы проверяете значение в текстовом поле перед визуализацией графа сцены.Вам нужно переместить логику if-else на кнопку onAction.

btGenerate.setOnAction((ActionEvent event) -> {
            String bColor = tfLightOrDark.getText();
            if (bColor.equalsIgnoreCase("light")) {
                root.setStyle("-fx-background-color: lightblue;");
            } else if (bColor.equalsIgnoreCase("dark")) {
                root.setStyle("-fx-background-color: darkblue;");
            }
            primaryStage.setScene(scene2);
        });
...