Проблема между фоном сцены и новой меткой в ​​JavaFX - PullRequest
0 голосов
/ 01 февраля 2019

Я подхожу к разработке Snake Game с JavaFX (я Беннигер).В основном методе я установил scene.setFill (Color.BLACK), и поэтому фон полностью черный.Когда я добавляю ярлык, когда я пытаюсь создать его экземпляр, фон исчезает, и ярлык не отображается на экране.Этого не произойдет, если я добавлю Прямоугольник или Круг, но только с метками, кнопками и т. Д.

Как я могу решить эту проблему?Я думаю, что это простой вопрос, но я не могу решить его самостоятельно.

/ Main.java

        GamePanel g = new GamePanel();

        BorderPane root = new BorderPane();
        //Scene scene = new Scene(root,400,400, Color.BLACK);
        Scene scene = new Scene(root,400,400);
        scene.setFill(Color.BLACK);
        scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
        primaryStage.setScene(scene);
        primaryStage.setTitle("SnakeFX");

        primaryStage.show();


        root.getChildren().add(g);

        g.requestFocus();

/ GamePanel.java (я ставлю только часть функции initialize () это первая функция конструктора, которая инициализирует игровую графику и должна содержать мою метку)

    void initialize() {     

    /* IF I PUT THIS LINE THE BLACK COLOR  ON THE BACKGROUND DISAPPEAR                                   
    AND LABEL DOES NOT APPEAR ON THE SCREEN.
     WITHOUT THIS LINE THE GAME RUNS PERFECTLY B BUT I NEED THIS LINE TO ADD 
        THE SCORE EHEH */

    Label l = new Label("TEST"); //this is the line 


    for(int i=0;i<WIDTH;i=i+WIDTH/40) {
        Line line = new Line();
        line.setStartX((double)i);
        line.setStartY(0.0);
        line.setEndX((double)i);
        line.setEndY((double)HEIGHT);
        line.setVisible(true);
        super.getChildren().add(line);
    }

    for(int j=0;j<HEIGHT;j=j+HEIGHT/40) {
        Line line = new Line();
        line.setStartY((double)j);
        line.setStartX(0.0);
        line.setEndY((double)j);
        line.setEndX((double)WIDTH);
        line.setVisible(true);
        super.getChildren().add(line);
    }
  ....
   ...
 .   .. 
    }

Первое изображение без создания метки.Второе изображение с экземпляром метки (цвет фона не отображается и метка не отображается)

enter image description here

enter image description here

1 Ответ

0 голосов
/ 02 февраля 2019

Это ошибка JavaFx (см. этот ответ ).

То, что вы видите на втором изображении, - это цвет фона корневого узла (BorderPane) (который определен в теме по умолчанию для javafx).и это не прозрачно).Это правильное состояние - первое изображение показывает ошибку, описанную в ответе, связанном выше.

Вы можете легко решить вашу проблему:

  1. уберите цвет фона изкорневой узел, поэтому цвет фона сцены становится видимым:

    root.setBackground(Background.EMPTY);
    
  2. или установите цвет фона корневого узла на черный:

    root.setBackground(new Background(new BackgroundFill(Color.BLACK, null, null)));
    
...