【问题标题】:Is it possible to add stylesheet to JavaFX Scene from remote css file?是否可以从远程 css 文件将样式表添加到 JavaFX 场景?
【发布时间】:2013-12-08 00:31:30
【问题描述】:

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

例子:

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

但它不起作用,那么有什么办法可以从外部资源加载 css 文件,并将其内容添加到场景 css 类中?还是将其 css 文件添加到场景样式表文件中?

【问题讨论】:

    标签: java javafx-2 javafx stylesheet


    【解决方案1】:

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

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

    样式表 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").toExternalForm()

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

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

    【讨论】:

    • 在我在 URL 中的样式文件名中添加“.css”后它起作用了,我之前没有添加 .css 扩展名..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-26
    • 2017-12-25
    相关资源
    最近更新 更多