Jas*_*ver 4 java javafx stylesheet javafx-2
我试图将外部样式表添加到我的JavaFX应用程序中。
例子:
scene.getStylesheets().add("http://localhost/css/style.css");
Run Code Online (Sandbox Code Playgroud)
但它不起作用,那么有什么方法可以从外部资源加载 css 文件,并将其内容添加到场景 css 类中?或将其 css 文件添加到场景样式表文件中?
我认为 JavaFX 用户认为可以这样做是合理的。该文档确实指定 add 方法将 URL 作为字符串。
从 JavaFX 2.1 开始,Parent 类有一个 stylesheets 属性,允许在容器上设置样式表。这允许场景图的一个分支具有一组不同的样式。Parent 的任何实例都可以有一个样式表。子项将从其自己的内联样式、其所有祖先的样式表以及场景中的任何样式表中获取其样式。
样式表 URL 可以是绝对 URL 或相对 URL。如果给出了一个相对 URL,它会根据具体 Application 类的 ClassLoader 的基 URL 进行解析。例如,如果有一个扩展 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 开始,相对于扩展 Application 的类的 ClassLoader 的基 URL 解析仅包含绝对路径(没有方案或权限)的 URL。换句话说,“/com/wicked/cool/resources/styles.css”被视为“com/wicked/cool/resources/styles.css”。这与 FXML 一致。该实现允许设计人员通过使用样式表覆盖从代码设置的属性值来设置应用程序的样式。这对级联有影响;特别是,样式表中的样式何时会覆盖代码中设置的值?JavaFX CSS 实现应用以下优先顺序;用户代理样式表中的样式的优先级低于代码中设置的值,后者的优先级低于场景或父样式表。内联样式具有最高优先级。来自 Parent 实例的样式表被认为比来自 Scene 样式表的样式更具体。
不过,文档讨论了与类加载器相关的绝对 URL 和相对 URL。因此,如果使用指向 Internet 上某些资源的 URL 不起作用,我认为您能做的最好的事情就是提交错误报告。指向 Internet 上资源的 URL 应该可以工作,或者文档应该明确指定只有本地资源(类加载器的本地资源)才有效。