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

时间:2013-05-01 12:57:24

标签: java javafx-2 javafx-8

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

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

Application.setUserAgentStylesheet(Application.STYLESHEET_MODENA);

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

com.sun.javafx.css.StyleManager.getInstance.addUserAgentStylesheet(styleSheet);

这有效,但我有两个问题。首先,它使用私有 API,其次,一旦完成它,似乎没有办法删除它(我正在使用OSGI所以模块的出入是很常见的。)

有人谈到在2012年初将StyleManager移至公开 API,但我不确定是否发生了任何事情。

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

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

1 个答案:

答案 0 :(得分:4)

根据Global Stylesheet for your GUI application

// load default global stylesheet
Application.setUserAgentStylesheet(null);
// add custom global stylesheet
StyleManager.getInstance().addUserAgentStylesheet(AQUA_CSS_NAME);

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


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


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