我在NetBeans 8中使用Java 8 / JavaFX和FXML。
在我的FXML文档中的第一个控制器(一个AnchorPane)中,我有这个,它有效:
stylesheets="file:///C:/Users/me/Documents/NetBeansProjects/MyApp/src/myApp/myStyle.css"
但是,当我尝试用任何类型的相对路径替换它时,我在运行时遇到以下错误:
com.sun.javafx.css.StyleManager loadStylesheetUnPrivileged
WARNING: Resource "myStyle.css" not found.
我试过
stylesheets="myStyle.css"
stylesheets="file://myStyle.css"
stylesheets="./myStyle.css"
stylesheets="css/myStyle.css"
(我把css文件的副本放在一个子目录中)
......也许还有其他50种排列。每次我得到同样的错误。
我关心的原因是我遇到了第二个问题。在第一个版本中,它可以在我的机器上运行...当我将我的jar文件带到另一台机器时,运行应用程序时不会应用css ...就像资源文件没有被复制一样。
帮助?
谢谢!
-Adeena
答案 0 :(得分:5)
让我考虑您的项目结构如下
MyApp
|
|_ src
|
|_controllers (Controllers)
|_view (FXML)
|_style (css)
|_myStyle.css
您可以使用
指定FXML中的相对路径<stylesheets>
<URL value="@../style/myStyle.css" />
</stylesheets>
在您的控制器中,您可以按如下方式添加
layout.getStylesheets().add(getClass().
getResource("/style/myStyle.css")).toExternalForm();
答案 1 :(得分:0)
这就是我的工作方式:
<?import java.net.*?>
<fx:root type="javafx.scene.layout.BorderPane" ... xmlns:fx="http://javafx.com/fxml">
<stylesheets>
<URL value="@myStyle.css" />
</stylesheets>
</fx:root>
css文件与FXML位于同一个包(文件夹)中。我的根也恰好是<fx:root>
,我希望它对<AnchorPane>
的工作方式相同。
查看docs,搜索“位置分辨率”了解详情。