java - 在 JavaFX 中切换主题

标签 java css javafx javafx-8

我开发了一个 Java FX 应用程序,并使用 CSS 进行样式设置。 该应用程序几乎对所有内容都使用默认颜色,所以我发现只需在 .css 中添加一个较暗的底色即可:

/* DarkTheme*/
.root {
   -fx-base: rgba(60, 60, 60, 255);   
}

我得到了深色主题效果,所有颜色都相应调整。 我只是找不到通过添加带有 #setStyle 的行来以编程方式执行此操作的方法,事实上:

1) 我应该使用什么节点 setStyle on? 此规则将影响所有节点。

2) 我要传递给什么字符串 setStyle? 我假设:

<node>.setStyle("-fx-base: rgba(60, 60, 60, 255);"); //dark theme
<node>.setStyle("-fx-base: <something>");            //back to light def. theme

3) 一旦我找到了正确的元素,如果我想返回,我该怎么做? 我是否需要再次调用设置样式,传递基色(我需要从一些元数据中提取?),或者我可以以某种方式删除之前添加的样式吗?**

最终结果应该是一个允许在深色和浅色主题之间快速切换的控件(按钮、radiob 等)。

最佳答案

将样式应用于您希望设置样式的节点(包括后代)。在您的情况下,它可能是您场景的根。

您可以通过将 style 属性设置回其旧值(默认为 "")来撤消更改:

Parent sceneRoot = ...

// enable style
sceneRoot.setStyle("-fx-base: rgba(60, 60, 60, 255);");

// disable style
sceneRoot.setStyle("");

或者,您可以在场景/节点的样式表中使用包含 CSS 样式表。这将使您的风格更加个性化:

String styleSheetURL = ...

// enable style
scene.getStylesheets().add(styleSheetURL);

// disable style
scene.getStylesheets().remove(styleSheetURL);;

关于java - 在 JavaFX 中切换主题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49475076/

相关文章:

java - 应用程序管理 JPA,何时需要事务

java - 如何使用不相交的集合来实现迷宫?

html - 如何将图像 float 在div之上

javascript - jQuery - 将数据从 jQuery 函数传递到特定的 div?

Java获取Long大于1000000000

java - 预期位置参数计数 : 2, 实际参数:

javafx - 如何为标签设置滚动 Pane 的滚动条

java - 多任务 JavaFX

css - dompdf [v0.7.0-beta3] 使用内联 css 的表格

java - 需要帮助显示来自 url 或文件选择器的图像