我的语法从FXML文件调用样式表(css)有什么问题?

时间:2014-02-26 14:00:24

标签: javafx fxml java-8

我在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

2 个答案:

答案 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,搜索“位置分辨率”了解详情。