在JavaFX中切换主题

时间:2018-03-25 11:01:23

标签: java css javafx javafx-8

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

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

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

1)我应该使用哪个节点 setStyle 此规则将影响所有节点。

2)我传递的字符串 setStyle 我认为:

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

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

最终结果应该是一个控制(按钮,无线电,......),可以在黑暗和光明主题之间快速切换。

1 个答案:

答案 0 :(得分:2)

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

您可以通过将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);;