JavaFX从资源文件夹加载CSS样式

3

项目结构:

项目结构

我正在使用Eclipse开发JavaFX应用程序,但无法从资源文件夹中加载.css样式表。

我已经将资源文件夹添加到了类路径中(项目属性 -> -> 添加文件夹

以下代码正在使用:

this.getStylesheets().add(getClass().getResource("/CSS/application-container.css").toExternalForm());

getResource() 抛出 NullPointerException,我已经阅读了其他帖子并尝试了所有方法,但似乎无法使其正常工作。

编辑:通过删除并恢复 bin 文件夹,我设法使其正常工作。现在 .css 已加载,但由于某种原因未应用,但使用相同内容的 javaFX 方法 .setStyle(...),它可以正常工作。

private void buildHeader() {
    this.header.setId("header-container");
    this.getStylesheets().add(getClass().getResource("/CSS/application-container.css").toExternalForm());
    // this.header.setStyle("-fx-background-color: #7b9bce;");      this way works
}

CSS:

@charset"utf-8";

#header-container {
    -fx-background-color: #7b9bce;
}

检查构建文件夹的内容,以查看CSS文件是否在预期位置。 - James_D
这里的 this 指的是什么? - Bo Halim
@James_D,.css文件被Eclipse复制到了bin/CSS/application-container.css,所以看起来没问题。不知道为什么bin文件夹里没有resources文件夹。 - Franch
@BoHalim 在这个上下文中指的是一个 BorderPane。 - Franch
bin文件夹内没有资源文件夹,因为它是一个源文件夹,而不是一个包。这看起来都是正确的。你确定getClass().getResource("/CSS/application-container.css")返回的不是null吗?(也就是说,你不是从其他地方得到了npe)。尝试使用System.out.println(getClass().getResource(...))进行检查。 - James_D
显示剩余3条评论
1个回答

1
最终使用外部 .css 文件成功,显然 JavaFX CSS 解析器 不允许 @charset "utf-8" 或任何 @ 注释。它没有显示任何警告。

解决方案:

将此更改为:

@charset"utf-8";

#header-container {
    -fx-background-color: #7b9bce;
}

这是一个HTML代码,内容为“将此转换为:”。
#header-container {
    -fx-background-color: #7b9bce;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接