如何为整个JavaFX应用程序动态添加和删除css?

Boo*_*mah 8 java javafx-2 javafx-8

我正在使用JDK8 build 87并希望动态添加和删除css stylesheets它们,以便我的整个JavaFX应用程序可以使用它们.

目前我正在styleSheet使用此命令设置默认值:

Application.setUserAgentStylesheet(Application.STYLESHEET_MODENA);
Run Code Online (Sandbox Code Playgroud)

然后,当我想添加一个额外的CSS样式表时,我这样做:

com.sun.javafx.css.StyleManager.getInstance.addUserAgentStylesheet(styleSheet);
Run Code Online (Sandbox Code Playgroud)

这有效,但我有两个问题.首先,它使用的是私有 API,其次,一旦完成它,似乎没有办法删除它(我正在使用,OSGI因此模块来去经常).

有人谈到2012年初公众搬家StyleManager,但我不确定是否发生过任何事情. API

有没有人知道要添加的公共方法,styleSheets以便它们适用于整个JavaFX应用程序?如何删除它们?

(我没有权限创建新的javafx-8标记)

jew*_*sea 4

根据GUI 应用程序的全局样式表

// load default global stylesheet
Application.setUserAgentStylesheet(null);
// add custom global stylesheet
StyleManager.getInstance().addUserAgentStylesheet(AQUA_CSS_NAME);
Run Code Online (Sandbox Code Playgroud)

然而,正如 Boomah 指出的那样,StyleManager.getInstance().addUserAgentStylesheet它不是 JavaFX API 的一部分,因此确实不建议直接从用户代码中使用此方法。此外,它仅适用于添加全局样式表,而不能在添加样式表后删除此类样式表。


更具冒险精神的人可以创建一个补丁来添加 Boomah 的建议功能,方法是修改StyleManager代码以支持删除全局样式表并修改Application类源代码以为使用更新的新功能提供公共 API StyleManager,然后将补丁提交到openjfx-dev包含在 JavaFX 平台中。


与此同时,您可以在应用程序的每个场景上手动设置用户样式表 - 有点痛苦,但您就可以了。。。

  • @Boomah StyleManager 似乎没有将其纳入公共 9 api:https://bugs.openjdk.java.net/browse/JDK-8076423 - 所以即使在将来也没有干净的方法来全局添加样式(它'会变得更糟,因为脏访问是不可能的) (2认同)