52 lines
1.6 KiB
Java
52 lines
1.6 KiB
Java
package com.aiclient.service;
|
|
|
|
import javafx.scene.Scene;
|
|
import java.util.Objects;
|
|
|
|
public class ThemeService {
|
|
private static final String LIGHT_THEME = "/css/light-theme.css";
|
|
private static final String DARK_THEME = "/css/dark-theme.css";
|
|
private static final String BASE_STYLE = "/css/style.css";
|
|
|
|
private Scene scene;
|
|
public boolean isDarkTheme = false;
|
|
|
|
public void setScene(Scene scene) {
|
|
if (scene == null) return;
|
|
this.scene = scene;
|
|
applyBaseStyle();
|
|
applyTheme(isDarkTheme);
|
|
}
|
|
|
|
private void applyBaseStyle() {
|
|
if (scene == null) return;
|
|
String baseStyle = Objects.requireNonNull(getClass().getResource(BASE_STYLE)).toExternalForm();
|
|
if (!scene.getStylesheets().contains(baseStyle)) {
|
|
scene.getStylesheets().add(baseStyle);
|
|
}
|
|
}
|
|
|
|
public void toggleTheme() {
|
|
if (scene == null) return;
|
|
isDarkTheme = !isDarkTheme;
|
|
applyTheme(isDarkTheme);
|
|
}
|
|
|
|
private void applyTheme(boolean dark) {
|
|
if (scene == null) return;
|
|
|
|
// 移除现有主题
|
|
scene.getStylesheets().removeIf(style ->
|
|
style.endsWith("light-theme.css") || style.endsWith("dark-theme.css")
|
|
);
|
|
|
|
// 应用新主题
|
|
String theme = dark ? DARK_THEME : LIGHT_THEME;
|
|
String themeStyle = Objects.requireNonNull(getClass().getResource(theme)).toExternalForm();
|
|
scene.getStylesheets().add(themeStyle);
|
|
}
|
|
|
|
public boolean isDarkTheme() {
|
|
return isDarkTheme;
|
|
}
|
|
} |