将css文件添加到javafx中的样式表

Dan*_*lle 12 css javafx stylesheet

语言:JavaFX

IDE:Netbeans

问题:我正在尝试将css文件添加到样式表中,但以下代码的第一行始终生成NullPointerException:

String css = this.getClass().getResource("double_slider.css").toExternalForm(); 
scene.getStylesheets().add(css);
Run Code Online (Sandbox Code Playgroud)

我试过用完整的路径替换"double_slider.css".double_slider.css当前位于与进行此调用的类相同的包中.我还尝试了http://introjava.wordpress.com/2012/03/21/linking-a-css-style-sheet-to-javafx-scene-graph/上找到的所有变体,但没有成功.清洁和构建也没有帮助.

如果我将css文件放在转储.class文件的build文件夹中,NullPointerException就会消失.但是后来css文件无法正常工作,因为它引用了我项目中的其他文件.

小智 18

把你的yourname.css文件直接放在src目录下.

scene.getStylesheets().add("yourname.css")
Run Code Online (Sandbox Code Playgroud)

清洁和建造所需

  • 我认为如果你把它放在子目录中它会更漂亮和清晰。不直接在`/src`下 (2认同)

Kor*_*kig 12

我认为你错过了导致无法找到CSS文件的斜杠.尝试更正您的路径参考.

例如:

-root
--app/Main.java
--assets/double_slider.css
Run Code Online (Sandbox Code Playgroud)

将会:

String css = this.getClass().getResource("/assets/double_slider.css").toExternalForm();
Run Code Online (Sandbox Code Playgroud)


小智 8

我有同样的问题.我在Win7上使用NetBeans 7.3和JavaFX 2.2.7,JDK 7.0_21.

我的解决方案是将.css放在SAME文件夹中作为我的包含void start(舞台阶段)的 Java文件.所以Project视图看起来像这样:

  • 项目名
    • 源包
      • pkgWhatever
        • Main.java
        • MyCssFile.css

(所以CSS文件是包中,我发现它非常奇怪和禁忌.有些文档告诉我把它放在项目的根目录中,所以它可以在运行时找到,但这对我来说不适用于NB.我的应用程序现在运行,无论我是通过点击+ 或点击项目的上下文菜单上的Run来启动包含" start(..) " 的文件.而且我是否让NB将所有内容放入JAR中并不重要.)CtrlU

这是在上述情况下加载CSS的代码:

  URL url = this.getClass().getResource("controlStyle1.css");
    if (url == null) {
        System.out.println("Resource not found. Aborting.");
        System.exit(-1);
    }
    String css = url.toExternalForm(); 
    scene.getStylesheets().add(css);
Run Code Online (Sandbox Code Playgroud)

虽然这不起作用:

    scene.getStylesheets().add("controlStyle1.css");
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.


xym*_*man 8

所有答案都缺少一个非常重要的部分,那就是css 文件名称之前的“ / ”:

文件夹结构:

src
  resources
    stylesheet.css
Run Code Online (Sandbox Code Playgroud)

像这样加载它,注意css 文件之前的起始斜杠:

scene.getStylesheets().add(getClass().getResource("/stylesheet.css").toExternalForm())
Run Code Online (Sandbox Code Playgroud)


fan*_*tek 6

我遇到了同样的问题(在 NetBeans 8 中)。我在这里找到了一个解决方案:https : //blog.idrsolutions.com/2014/04/use-external-css-files-javafx/

我的资源文件电子表格.css 在这里:

MyApp
-resources
--spreadsheet.css
-source packages
--fr.ccc.myapp.view
---mainView.java
---FXMLMain.fxml
Run Code Online (Sandbox Code Playgroud)

在 mainView.java 中:

File f = new File("resources/spreadsheet.css");
spreadsheet.getStylesheets().add("file:///" + f.getAbsolutePath().replace("\\", "/"));
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助。


Ulu*_*Biy 0

嗯,您在使用 Netbeans 吗?尝试“清理并构建”该项目。