java - 更改 CSS 主题

标签 java css javafx themes

我已经使用 java 和 javafx 制作了一个不错的小应用程序,并且最近开始使用 CSS 来设计它的样式。我想到了拥有不同主题(一个黄色、一个蓝色等)的想法,但后来意识到我不知道这样做的好方法。在 Java 中,如果我想改变一些东西,我会简单地改变一个变量的值,但在 CSS 中,我认为这是不可能的。所以对于我的问题,通过单击按钮(在应用程序内部)更改主题的最佳方法是什么?是否如我担心的那样,是否必须为每个主题制作单独的样式表并在样式表之间切换?感谢您的帮助。

最佳答案

JavaFX-CSS 中的正确方法是使用颜色变量(可能还有派生/梯形图函数)。所以你很可能有 3 个 CSS 文件:

  • style.css - 包含组件的选择器和对颜色变量的引用
  • theme-default.css - 带有默认颜色变量
  • theme-blue.css - 带有蓝色变量

您的 style.css 可能如下所示:

.button {
  -fx-background-color: my-button-background-color;
}

你的 theme-default.css 将是

.root {
  my-button-background-color: #f00;
}

你的 theme-blue.css 将是:

.root {
  my-button-background-color: #00f;
}

如果你想翻转主题,你只需从场景中删除 theme-default.css 并在伪代码中添加 theme-blue.css(切换回来你会做相反的事情):

Scene s = ...
s.getStylesheet().addAll( "style.css", "theme-default.css" );

// ...
button.setOnAction( e -> {
   if( s.getStylesheet().contains( "theme-default.css" ) ) {
     s.getStylesheet().remove("theme-default.css");
     s.getStylesheet().add("theme-blue.css");
   } else {
     s.getStylesheet().remove("theme-blue.css");
     s.getStylesheet().add("theme-default.css");
   }
} );

关于java - 更改 CSS 主题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36240807/

相关文章:

CSS, 溢出 safari, chrome 和 IE 6

javascript - 按需提供非缩小的 CSS/javascript

javafx - 使用 fx :id as CSS id in FXML

java - 获取秒值并显示到控制台窗口

javafx - 单击按钮时移动 ScrollPane 的视点

java - 从当前文件夹运行java类

java - 使用生成的 Id 安全地持久保存新 JPA 实体的最佳实践

java - 将 32 位整数拆分为 4 个 8 位整数

java - 在 jpa 中使用命名查询更新查询无法正常工作

html - 如何创建只是轮廓的框阴影?