2013-11-22 21 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

相关问题