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

如何为整个JavaFX应用程序动态添加和删除css?,java,javafx-2,javafx-8,Java,Javafx 2,Javafx 8,我使用的是JDK8 build 87,我想动态添加和删除css样式表,这样我的整个JavaFX应用程序都可以使用它们 目前,我正在使用以下命令设置默认的样式表: Application.setUserAgentStylesheet(Application.STYLESHEET_MODENA); 然后,当我想添加一个额外的css样式表时,我会这样做: com.sun.javafx.css.StyleManager.getInstance.addUserAgentStylesheet(styleS

我使用的是
JDK8 build 87
,我想动态添加和删除
css样式表
,这样我的整个
JavaFX
应用程序都可以使用它们

目前,我正在使用以下命令设置默认的
样式表

Application.setUserAgentStylesheet(Application.STYLESHEET_MODENA);
然后,当我想添加一个额外的css样式表时,我会这样做:

com.sun.javafx.css.StyleManager.getInstance.addUserAgentStylesheet(styleSheet);
这是可行的,但我有两个问题。首先,它使用的是一个私有的
API
,其次,在我使用完它之后,似乎没有办法删除它(我使用的是
OSGI
,所以模块来来去去很常见)

2012年初,有人谈论将
StyleManager
迁移到public
API
,但我不确定这方面发生了什么

有没有人知道有一种公共方法可以添加
样式表
,从而将它们应用于整个
JavaFX
应用程序?还有,如何移除它们

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

根据:

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


更大胆的人可以创建一个补丁来添加Boomah建议的功能,方法是修改代码以支持删除全局样式表,修改类源代码以提供新功能的公共API,该新功能使用更新的
StyleManager
,然后将补丁提交给JavaFX平台



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

添加了新标签,感谢您的建议。顺便说一句,如果您找不到合适的解决方案,您可以尝试在javafx jira bugtracker上查找tweak或RFE,如果您找不到任何一个,请将您的tweak归档,虽然还不晚。我很高兴将顶级样式表设置为STYLESHEET_MODENA,如上面的示例所示。StyleManager是私有api,即使在设置了其他样式表之后,它也无法删除这些样式表。正确,要获得您想要的功能,您需要提交一个补丁来实现该功能,或者,好的,我与Jonathan Giles谈过这一点。他建议把所有的场景都加进去。这不是一个大问题,因为我确实可以接触到所有这些,只是似乎应该有更好的方法来做到这一点。Thanks@BoomahStyleManager似乎还没有进入公共9API:-因此,即使在将来,也没有一种干净的方式来全局添加样式(这会变得更糟,因为不可能进行脏访问)@kleopatra感谢大家的提醒。如果这是唯一缺少的东西,我就不会这么烦恼,因为有一个解决办法。我目前的烦恼是没有解决办法,这让任何JavaFX应用程序都感觉笨重。除了我,似乎没有人关心这件事:(
// load default global stylesheet
Application.setUserAgentStylesheet(null);
// add custom global stylesheet
StyleManager.getInstance().addUserAgentStylesheet(AQUA_CSS_NAME);