场景背景与JavaFX中的新标签之间的问题

时间:2019-02-01 14:31:32

标签: java javafx graphics label

我正在开发JavaFX的Snake游戏(我是个更好的人)。 在主要方法中,我设置了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 :(得分:0)

这是JavaFx错误(请参见this answer)。

在第二张图像中看到的是根节点的(BorderPane)背景颜色(该颜色在javafx默认主题中定义,并且不是透明的)。这是正确的状态-第一张图片显示了上面链接的答案中描述的错误。

您可以轻松解决问题:

  1. 从根节点删除背景色,因此场景的背景色变得可见:

    root.setBackground(Background.EMPTY);
    
  2. 或将根节点的背景色设置为黑色:

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