语言: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文件无法正常工作,因为它引用了我项目中的其他文件。
答案 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视图如下所示:
(所以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)
答案 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)
在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;
}