ai-chat-client/src/main/java/com/aiclient/service/ThemeService.java

52 lines
1.6 KiB
Java
Raw Normal View History

2025-04-03 10:14:12 +00:00
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;
}
}