Reputation: 4167
I am working in NetBeans 8, with Java 8 / JavaFX and FXML.
In the first controller (an AnchorPane) in my FXML document, I have this, that works:
stylesheets="file:///C:/Users/me/Documents/NetBeansProjects/MyApp/src/myApp/myStyle.css"
However, when I attempt to replace that with any type of relative path, I get the following error at runtime:
com.sun.javafx.css.StyleManager loadStylesheetUnPrivileged
WARNING: Resource "myStyle.css" not found.
I tried
stylesheets="myStyle.css"
stylesheets="file://myStyle.css"
stylesheets="./myStyle.css"
stylesheets="css/myStyle.css"
(where I put a copy of the css file in a subdirectory from where it was)
...and maybe 50 other permutations. Every time I get the same error.
The reason I care is that I am having a second problem. In the first version, that works on my machine... when I take my jar file to another machine, the css is not applied when the application is run... It's like the resource file isn't copied.
Help?
Thanks!
-Adeena
Upvotes: 5
Views: 14847
Reputation: 36722
Let me consider your project structure as follows
MyApp
|
|_ src
|
|_controllers (Controllers)
|_view (FXML)
|_style (css)
|_myStyle.css
You can specific the relative path in the FXML using
<stylesheets>
<URL value="@../style/myStyle.css" />
</stylesheets>
In your controller, you can add it as follows
layout.getStylesheets().add(getClass().
getResource("/style/myStyle.css")).toExternalForm();
Upvotes: 6
Reputation: 40296
This is how it works for me:
<?import java.net.*?>
<fx:root type="javafx.scene.layout.BorderPane" ... xmlns:fx="http://javafx.com/fxml">
<stylesheets>
<URL value="@myStyle.css" />
</stylesheets>
</fx:root>
The css file is in the same package (folder) as the FXML. Also my root happens to be <fx:root>
, I expect it to work the same for your <AnchorPane>
.
Check out the docs, search for "Location Resolution" for details.
Upvotes: 1