【发布时间】:2018-04-26 17:22:43
【问题描述】:
谁该死的想法是在没有直接和明确的替换的情况下排除 StyleManager - 我看到它破坏了许多程序!
我需要对整个应用程序进行一些重新设计(自定义组件、自定义伪类、自定义平台特定补丁等)。
在 JavaFX 8 中,我可以使用:com.sun.javafx.css.StyleManager.getInstance().addUserAgentStylesheet("MyShit.css");
但在 Java 9 中 StyleManager 不可用。那么有没有办法为每个场景设置 CSS 呢?
使用“Application.setUserAgentStylesheet”不是一个选项,因为我不想失去默认的外观,我已经调用它来设置 MODENA 样式。我想扩展默认 CSS 而不是替换它。 而且我也不想重写整个 MODENA(显然)。
我真的不想为应用程序中的每个表单/场景手动设置相同的样式表(或将其添加到每个 FXML 文件中)。有许多形式,动态构造的对话框。主要原因是多个应用程序之间共享了一些部分(和库),所以我不想硬编码任何样式表(对于不同的应用程序可能有不同的名称和路径)。
所以我需要一种方法在程序的一个点为应用程序的每个可能场景设置一个额外的样式表。这在 FX9 中可能吗?
附:我研究了自定义 FXML 加载器、CSS 加载器、场景加载器和其他拦截场景创建的方法 - 没有办法!
【问题讨论】:
-
我的意思并不是听起来无情,但 Java 的文档多年来一直在警告 com.sun.* 包使用不安全,因为它们最终会消失。在 Java 8 中,编译器甚至会发出警告。也许您可以为这些共享 UI 创建自己的(可能是静态的)属性?
-
舒尔他们确实警告过,但他们没有任何替代方案。
-
静态属性有什么用?对于 CSS 文件名?有几个共享的 GUI 组件和样式。我还修改了基本样式表等的一些样式。我不必将我的 CSS 的本地路径添加到所有 FXML 中,但它依赖于项目,依赖于表单位置,如果你在 FXML 中更改根组件,你会默默地丢失这个引用(因为它在根组件的标签中描述)。此外,我必须为自定义/修改对话框等添加许多加载器和 cinstruuctors。如果明天(实际上是今天)我不需要一个应用程序范围的 CSS,而是两个......而且这也是制作自定义皮肤的一种简单方法。跨度>
标签: java javafx fxml java-9 javafx-9