8

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

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

Application.setUserAgentStylesheet(Application.STYLESHEET_MODENA);

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

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

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

StyleManager2012 年初曾有过关于公开上市 API的讨论,但我不确定这方面发生了什么。

有谁知道添加公共方法以styleSheets使其适用于整个JavaFX应用程序?还有一个人将如何删除它们?

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

4

1 回答 1

4

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

// 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 平台中。


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

于 2013-05-01T16:45:01.293 回答