创建按钮时 JavaFX 场景失去颜色

标签 javafx colors scene

谁能解释为什么我在 JavaFX 中创建按钮时我的场景会失去颜色?

以下代码有效,场景背景变为红色

@Override
public void start(Stage primaryStage){

    //Set Primary stage title and create a rootNode
    primaryStage.setTitle("Hello World");
    FlowPane rootNode = new FlowPane();

    //Create a scene and add it to the rootNode
    Scene myScene = new Scene(rootNode, 300, 200, Color.RED);

    //Add the scene to the stage
    primaryStage.setScene(myScene);

    //Show the stage
    primaryStage.show();
}

但是,当我创建另一个控件时,例如下面示例中的按钮(我什至不必将其添加到流程 Pane 中),颜色将恢复为灰色。
@Override
public void start(Stage primaryStage){

    //Set Primary stage title and create a rootNode
    primaryStage.setTitle("Hello World");
    FlowPane rootNode = new FlowPane();

    //Create a scene and add it to the rootNode
    Scene myScene = new Scene(rootNode, 300, 200, Color.CORAL);

    Button newBtn = new Button();

    //Add the scene to the stage
    primaryStage.setScene(myScene);

    //Show the stage
    primaryStage.show();
}

有谁知道这是为什么?我是否试图错误地更改背景颜色?

最佳答案

您的场景背景颜色根本不应该是可见的,因为 rootNode覆盖整个场景,rootNode有自己的背景颜色,在默认 JavaFx 主题中设置(即您看到的灰色):

//modena.css

.root {
  ... 

  /***************************************************************************
   *                                                                         *
   * Set the default background color for the scene                          *
   *                                                                         *
   **************************************************************************/

   -fx-background-color: -fx-background;
}

因此,您需要更改 rootNode 的背景颜色,正如另一个答案已经建议的那样。

剩下的问题是,为什么在您的第一个示例中,默认根背景颜色未应用于 rootNode (它是透明的,不应该是透明的)并且您会看到场景的背景颜色。

答案 - 这可能是一个错误。在 JavaFx 中,默认主题是通过 PlatformImpl.setDefaultPlatformUserAgentStylesheet() 方法设置的。仅在以下情况下调用:
  • 当您调用 Application.setUserAgentStylesheet ( source )
  • Control 的静态初始化 block 中和 PopupControl类(sourcesource)
  • FlowPane不扩展Control也不是 PopupControl ,所以 JavaFx 甚至不加载默认主题和您的 rootNode保持透明(您会看到场景的背景颜色)。

    在您的其他示例中,您创建一个 Button控制,扩展 Control类,所以 Control 的静态初始化 block 执行类并加载默认的 modena 主题 - 您的 rootPane从默认主题获取默认灰色,您不再看到场景的背景颜色。

    关于创建按钮时 JavaFX 场景失去颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52531243/

    相关文章:

    java - ScrollPane 不允许向下滚动查看其内容

    java - 在Java中将灰度转换为颜色渐变?

    python - 用于 Python 的 3D 场景渲染器

    Javafx如何通过函数创建按钮?

    ios - (Cocos2D) 检测显示的是哪个CCScene?

    JavaFX 如何从 TableView 中获取一列的所有值?

    java - 如何使用数据库中的数据填充 JavaFX ChoiceBox?

    java - 在 JavaFX 中使用大括号进行父组织

    r - 在 R 中绘制多条线(数据系列),每条线具有唯一的颜色

    c# - 更改 DataGridView CellMouseClick 上的单元格背景色