2014-02-26 15 views
4

我在使用Java 8/JavaFX和FXML的NetBeans 8中工作。我的語法從FXML文件調用樣式表(css)有什麼問題?

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

(這裏我把個副本e css文件在它所在的子目錄中)

...以及可能的其他排列組合。每次我得到相同的錯誤。

我關心的原因是我有第二個問題。在第一個版本中,在我的機器上工作...當我將我的jar文件傳送到另一臺機器時,應用程序運行時不會應用css ...這就像不會複製資源文件。

幫助?

謝謝!

-Adeena

回答

5

讓我考慮你的項目結構如下

MyApp 
    | 
    |_ src 
     | 
     |_controllers (Controllers) 
     |_view (FXML) 
     |_style (css) 
      |_myStyle.css 

您可以將特定使用

<stylesheets> 
    <URL value="@../style/myStyle.css" /> 
</stylesheets> 

在控制器中FXML的相對路徑,你可以按照如下

layout.getStylesheets().add(getClass(). 
     getResource("/style/myStyle.css")).toExternalForm(); 
添加它
+0

謝謝!這適用於樣式表。有關一般引用文件的任何其他建議?我與引用文件有不同但相似的問題。我的文件與src java位於同一位置,但是「filename.jpg」(它不是jpg,但是是專有的)不起作用,但是引用絕對路徑。 – adeena

+0

你能給我看一段代碼嗎?對於在styles文件夾中加載圖像,我會使用類似的'Image image = new Image(getClass()。getResourceAsStream(「/ style/edit.png」));' – ItachiUchiha

+0

不幸的是,我無法發送這段代碼。 getClass()。getResourceAsStream(「style/edit.png」)的概念不起作用,因爲它只是期望一個String。 – adeena

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,查找「位置分辨率」瞭解詳情。