我尝试将外部样式表添加到我的javaFX应用程序
示例:
scene.getStylesheets().add("http://localhost/css/style.css");
但它没有用,所以有没有办法从外部资源加载css文件,并将其内容添加到场景css类?或将其css文件添加到场景样式表文件?
谢谢,
答案 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应该可以工作,或者文档应该明确指定只有本地资源(类加载器的本地资源)才有效。