首页 文章

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

提问于
浏览
11

语言:JavaFX

IDE:Netbeans

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

String css = this.getClass().getResource("double_slider.css").toExternalForm(); 
scene.getStylesheets().add(css);

我've tried replacing 1761611 with the full path. double_slider.css is currently located in the same package as the class that makes this call. I'也尝试了在http://introjava.wordpress.com/2012/03/21/linking-a-css-style-sheet-to-javafx-scene-graph/找到的所有变种,没有成功 . 清洁和构建也没有帮助 .

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

12 回答

  • 13

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

    我的资源文件spreadsheet.css在这里:

    MyApp
    -resources
    --spreadsheet.css
    -source packages
    --fr.ccc.myapp.view
    ---mainView.java
    ---FXMLMain.fxml
    

    在mainView.java中:

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

    希望这可以帮助 .

  • 3

    您可以将.cxml文件中的style.css作为属性直接添加到根元素中,因为此样式表=“@ your_relative_path / style.css” .

    如果要访问src文件夹中的css文件,可以使用@ .. / style.css

  • 6

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

    scene.getStylesheets().add("yourname.css")
    

    清洁和建造所需

  • 0

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

    例如:

    -root
    --app/Main.java
    --assets/double_slider.css
    

    将会:

    String css = this.getClass().getResource("/assets/double_slider.css").toExternalForm();
    
  • 11

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

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

    • ProjectName

    • 源包

    • pkg无论如何

    • Main.java

    • MyCssFile.css

    (所以CSS文件是 IN 这个软件包,我发现这个软件非常奇怪且具有矛盾性 . 有些文档告诉我把它放在项目的根目录中,以便在运行时找到它,但这对我来说不适用于NB . 我的应用程序现在运行,无论我是通过按Ctrl U启动包含“ start(..) ”的文件,还是单击项目上的Run 's context menu. And it doesn'无论我是否让NB将所有内容都放入JAR中 . )

    这是在上述情况下加载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);
    

    虽然这不起作用:

    scene.getStylesheets().add("controlStyle1.css");
    

    希望这可以帮助 .

  • 1

    考虑你的旧代码:

    String css =this.getClass().getResource("double_slider.css").toExternalForm(); 
    scene.getStylesheets().add(css);
    

    尝试将其更改为此新代码,它将起作用:

    screen.getStylesheets().add(getClass().getResource("double_slider.css").toExternalForm());
    

    使用 getClass() 时,不需要使用 this 关键字 .

    我希望这对你有用 . :)

  • 0

    嗯,你在Netbeans吗?尝试“清理并构建”项目 .

  • 0

    您是否在设置样式表之前初始化了场景对象?

    scene = new Scene(myRootLayout,600,600); // 例如

  • 0

    这很简单 .

    this.scene.setUserAgentStylesheet(/resources/blabla.css);
    

    这对我有用 -

  • 2

    在你的文件.java中使用它

    Application.setUserAgentStylesheet(getClass().getResource("application.css")
                    .toExternalForm());
    
  • 0

    Folder Structure

    在MedicalLibraryFx.java中

    scene.getStylesheets().add(getClass().getResource("/css/style.css").toString());
    

    Folder structure when css is in the same directory as controller

    scene.getStylesheets().add(getClass().getResource("style.css").toString());
    
  • -1
    .root {
    /* background color for selected checkbox */
    -fx-background-color:white;
     }
    .check-box:selected > .box {
    /* background color for selected checkbox */
    -fx-background-color: lime;
     }
    
    .check-box > .box {
    /* background color of unselected checkbox */
    -fx-background-color:grey;
     }
    
    .check-box:selected > .box > .mark,
    .check-box:indeterminate  > .box > .mark {
    /* modify mark color */
    -fx-background-color: blue;
     }
    

相关问题