2013-11-22 20 views
3

我試圖外部樣式表添加到我的JavaFX應用程序是否可以從遠程css文件向JavaFX Scene添加樣式表?

例如:

scene.getStylesheets().add("http://localhost/css/style.css"); 

,但它沒有工作,那麼有沒有什麼方法來加載來自外部資源的CSS文件,並添加其內容到現場的CSS類?或者將其css文件添加到場景樣式表文件中?

謝謝

回答

3

我認爲這是合理的JavaFX的用戶會覺得它可能做到這一點。 The documentation確實指定add方法將URL作爲字符串。

從JavaFX 2.1開始,Parent類具有樣式表 屬性,允許在容器上設置樣式表。這允許 場景圖的一個分支具有不同的樣式集。 Parent的任何實例都可以有樣式表。小孩將從其自己的內聯樣式,其所有 祖先的樣式表以及場景中的任何樣式表中取得 樣式。

樣式表網址可能是絕對URL或相對URL。如果給出了一個 相對URL,它會根據具體Application類的 ClassLoader的基本URL進行解析。例如,如果 是擴展應用程序的主類com.wicked.cool.ui.Main,則 相對URL「com/wicked/cool/resources/styles.css」將正確解析 。相對URL「../resources/styles.css」不會從 開始,相對於根的路徑「..」不是有效的路徑。它通常是 更容易使用某些類的ClassLoader來查找資源。例如,如果「styles.css」文件與Main, 位於相同的包中,則以下代碼將提供正確的URL: com.wicked.cool.ui.Main.class.getResource(「styles.css」 ).toExternalForm()

。注意,使用JavaFX 2.1開始,僅由一個 絕對路徑的URL(不具有方案或機構)相對於延伸應用程序的類的類加載器的基本URL解析爲 。在 中換句話說,「/com/wicked/cool/resources/styles.css」被視爲 「com/wicked/cool/resources/styles.css」。這與FXML一致。 該實現允許設計人員通過使用 樣式表來覆蓋從代碼設置的屬性值來設置應用程序的樣式。這對於級聯有影響 ;特別是, 樣式表中的樣式何時覆蓋從代碼設置的值? JavaFX CSS 實現應用以下優先順序;來自 的樣式用戶代理樣式表的優先級低於從 代碼中設置的值,該代碼的優先級低於場景或父類樣式表。 內聯樣式的優先級最高。來自父 實例的樣式表被認爲比來自 場景樣式表的樣式更具體。

該文檔討論了與類加載器相關的絕對URL和相對URL。因此,如果使用指向Internet上某些資源的URL不起作用,我認爲您可以做的最好的事情是提交錯誤報告。指向Internet上資源的URL應該可以正常工作,或者文檔應明確指定只有本地資源(本地類加載器)纔有效。

+2

它在我向URL中的樣式文件名添加「.css」之後起作用,之前我沒有添加.css擴展名。 – Jason4Ever

相關問題