如何使用JavaFX 9(替换StyleManager)为应用程序设置几个默认的CSS样式表?

Sap*_*Sap 6 java javafx fxml java-9 javafx-9

在没有直接和明确替换的情况下排除StyleManager的想法真是太棒了 - 我看到它打破了许多程序!

我需要为整个应用程序(自定义组件,自定义伪类,自定义平台特定的补丁等)进行一些重新设计.在JavaFX 8中,我可以使用:com.sun.javafx.css.StyleManager.getInstance().addUserAgentStylesheet("MyShit.css");

但是在Java 9中,StyleManager不可用.那么有没有办法为每个场景设置CSS?

使用"Application.setUserAgentStylesheet"不是一个选项,因为我不想丢失默认的lookandfeel,我已经调用它来设置MODENA样式.我想扩展默认CSS而不是替换它.我也不想重写整个MODENA(显然).

我真的不想手动为应用程序中的每个表单/场景设置相同的样式表(或将其添加到每个FXML文件).有许多形式,动态构造的对话框.主要原因是,有几个应用程序之间共享的部分(和库),所以我不想硬编码任何样式表(可能有不同的应用程序的名称和路径).

所以我需要一种方法在程序的一个点为应用程序的每个可能场景设置一个额外的样式表.FX9有可能吗?

PS我研究了自定义FXML加载器,CSS加载器,场景加载器和拦截场景创建的其他方法 - 没有办法!

小智 2

这只是 JavaFX 的另一个缺陷 - 只需使用下面的 JVM 参数即可访问 StyleManager。

--add-exports=javafx.graphics/com.sun.javafx.css=ALL-UNNAMED
Run Code Online (Sandbox Code Playgroud)

  • 我不认为当前有一个路线图可以根据 JavaOne 上详细说明的方向将其他任何内容放入公共包中 (2认同)