是否可以从远程css文件向JavaFX Scene添加样式表?

时间:2013-11-22 23:42:17

标签: java javafx-2 javafx stylesheet

我尝试将外部样式表添加到我的javaFX应用程序

示例:

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

但它没有用,所以有没有办法从外部资源加载css文件,并将其内容添加到场景css类?或将其css文件添加到场景样式表文件?

谢谢,

1 个答案:

答案 0 :(得分:3)

我认为JavaFX用户认为可以这样做是合理的。 The documentation确实指定add方法将URL作为字符串。

  

从JavaFX 2.1开始,Parent类有一个样式表   属性,允许在容器上设置样式表。这允许   对于场景图的一个分支,有一组不同的样式。   Parent的任何实例都可以有样式表。一个孩子会接受它   来自其内嵌样式的样式,其所有样式表   祖先和场景中的任何样式表。

     

样式表URL可以是绝对URL或相对URL。如果一个   给出相对URL,它是根据的基本URL解析的   具体Application类的ClassLoader。例如,如果那里   是一个扩展Application的主要类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的&#34)。toExternalForm()

     

请注意,从JavaFX 2.1开始,只包含一个URL   绝对路径(没有方案或权限)相对于   扩展Application的类的ClassLoader的基本URL。在   换句话说," /com/wicked/cool/resources/styles.css"被视为   " COM /邪恶/冷却/资源/ styles.css的&#34 ;.这与FXML一致。   该实现允许设计者通过使用来设置应用程序样式   样式表覆盖从代码设置的属性值。这有   对级联的影响;特别是,什么时候从一个风格   样式表覆盖代码中的值集? JavaFX CSS   实现应用以下优先顺序;来自的风格   用户代理样式表的优先级低于设置的值   代码,其优先级低于场景或父样式表。   内联样式具有最高优先级。来自父母的样式表   实例被认为比那些样式更具体   场景样式表。

文档讨论了与类加载器相关的绝对和相对URL。因此,如果使用指向互联网上的某些资源的URL不起作用,我认为您可以做的最好的事情是提交错误报告。指向Internet上资源的URL应该可以工作,或者文档应该明确指定只有本地资源(类加载器的本地资源)才有效。