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

时间:2012-12-19 05:59:38

标签: css stylesheet javafx

语言:JavaFX

IDE:Netbeans

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

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

我尝试用完整路径替换“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 个答案:

答案 0 :(得分:16)

将您的yourname.css文件直接放在 src 目录下。

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

清理并构建必需的

答案 1 :(得分:11)

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

例如:

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

将是:

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

答案 2 :(得分:7)

我遇到了同样的问题。我在Win7上使用NetBeans 7.3和JavaFX 2.2.7,JDK 7.0_21。

我的解决方案是将.css放在 SAME 文件夹中作为包含 void start(舞台阶段)的Java文件。所以Project视图如下所示:

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

(所以CSS文件是 IN 这个包,我觉得这很奇怪而且很有悖意。有些文档告诉我把它放在项目的根目录中,以便在运行时找到它,但是在NB中对我不起作用。我的应用程序现在运行,无论我是否通过点击 Ctrl + 启动包含“ start(..)”的文件U 或点击项目上下文菜单上的Run。无论我是否让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");

希望这有帮助。

答案 3 :(得分:4)

我遇到了同样的问题(在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("\\", "/"));

希望这有帮助。

答案 4 :(得分:2)

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

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

答案 5 :(得分:1)

我做了一个小的登录示例,这就是我链接我的styleshet.css

的方式。
@Override
public void start(Stage stage) throws Exception {
    Parent root = FXMLLoader.load(getClass().getResource("LoginUI.fxml"));


    Scene scene = new Scene(root);

    scene.getStylesheets().add(JavaFXLogin.class.getResource("stylesheet.css").toExternalForm());

    stage.setScene(scene);
    stage.show();

}

您可以使用此代码行链接您的CSS文件。但是css文件应该在您的软件包中。

scene.getStylesheets().add(JavaFXLogin.class.getResource("stylesheet.css").toExternalForm());

答案 6 :(得分: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关键字。

我希望这对你有用。 :)

答案 7 :(得分:0)

在Maven项目中,您必须在javafx-plugin部分的file.pom中定义资源的路径:类似这样:

let paragraphs =document.querySelectorAll('p'); 
let checkBoxInput = document.querySelectorAll('input[type=checkbox]');
        
          for(var i=0; i < paragraphs.length; i++){
            paragraphs[i].addEventListener('click', function () {
           
                this.style.color = "rgb(228 233 253)";
                this.style.borderRadius = "10%";
                this.style.backgroundColor = "#0c0b07";
                this.previousElementSibling.checked = true;
        
              }, false);
             }

答案 8 :(得分:0)

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

答案 9 :(得分:0)

尝试将“ @”作为文件名。它为我工作。

例如: '@ main.css'

答案 10 :(得分:0)

所有答案都缺少一个非常重要的部分,即css文件名称之前的' / ':

文件夹结构:

src
  resources
    stylesheet.css

像这样加载它,请注意在css文件之前开始斜杠

scene.getStylesheets().add(getClass().getResource("/stylesheet.css").toExternalForm())

答案 11 :(得分:0)

scene.getStylesheets().add("file:///home/fullpathname/file.css");

scene.getStylesheets().add("file:/home/fullpathname/file.css");

但之后:

运行/清理并构建项目

为我工作

NetBeans IDE 8.2; Java:1.8.0_201; Linux 16.04

答案 12 :(得分:0)

假设文件结构是这样的:
-root
--src
---资源
---- double_slider.css
---包装
---- JavaFXFile.java

这对我有用:

scene.getStylesheets().add((new File("src/resources/double_slider.css")).toURI().toString());

答案 13 :(得分: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());

答案 14 :(得分:0)

在您的文件 .java 中使用此

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

答案 15 :(得分:0)

这非常简单。

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

这对我有用 -

答案 16 :(得分:0)

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

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

答案 17 :(得分:-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;
 }