package com.wsf.mathapp.view; import com.wsf.mathapp.controller.SceneManager; import java.util.Objects; import javafx.geometry.Insets; import javafx.geometry.Pos; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.control.Label; import javafx.scene.image.Image; import javafx.scene.image.ImageView; import javafx.scene.layout.HBox; import javafx.scene.layout.Priority; import javafx.scene.layout.Region; import javafx.scene.layout.VBox; import javafx.scene.text.Font; public class ResultView { private Scene scene; private final SceneManager sceneManager; private double score; private String currentUsername; public ResultView(SceneManager sceneManager) { this.sceneManager = sceneManager; this.currentUsername = sceneManager.getCurrentUserName(); createScene(); } private void createScene() { // 创建主容器 VBox mainContainer = new VBox(); mainContainer.setPadding(new Insets(20)); // 创建顶部用户信息栏 HBox userInfoBar = createUserInfoBar(); // 创建结果内容区域 VBox resultContent = createResultContent(); mainContainer.getChildren().addAll(userInfoBar, resultContent); scene = new Scene(mainContainer, 500, 550); // 增加宽度和高度以适应新布局 } private HBox createUserInfoBar() { HBox userInfoBar = new HBox(10); userInfoBar.setAlignment(Pos.CENTER_LEFT); userInfoBar.setPadding(new Insets(0, 0, 20, 0)); return userInfoBar; } private VBox createResultContent() { VBox resultContent = new VBox(30); resultContent.setPadding(new Insets(20)); resultContent.setAlignment(Pos.CENTER); Label titleLabel = new Label("答题完成"); titleLabel.setFont(Font.font(24)); Label scoreLabel = new Label(); scoreLabel.setFont(Font.font(48)); Label messageLabel = new Label(); messageLabel.setFont(Font.font(18)); Button restartButton = new Button("再次练习"); restartButton.setStyle("-fx-background-color: #4CAF50; -fx-text-fill: white; -fx-font-size: 16px;"); restartButton.setPrefSize(200, 50); Button mainMenuButton = new Button("返回主菜单"); mainMenuButton.setStyle("-fx-background-color: #2196F3; -fx-text-fill: white; -fx-font-size: 16px;"); mainMenuButton.setPrefSize(200, 50); Button exitButton = new Button("退出系统"); exitButton.setStyle("-fx-background-color: #757575; -fx-text-fill: white; -fx-font-size: 16px;"); exitButton.setPrefSize(200, 50); restartButton.setOnAction(e -> { sceneManager.showLevelSelectionView(); }); mainMenuButton.setOnAction(e -> { sceneManager.showMainMenuView(); }); exitButton.setOnAction(e -> { System.exit(0); }); resultContent.getChildren().addAll( titleLabel, scoreLabel, messageLabel, restartButton, mainMenuButton, exitButton ); return resultContent; } public void setScore(double score) { this.score = score; updateScoreDisplay(); } private void updateScoreDisplay() { if (scene != null) { VBox mainContainer = (VBox) scene.getRoot(); VBox resultContent = (VBox) mainContainer.getChildren().get(1); Label scoreLabel = (Label) resultContent.getChildren().get(1); Label messageLabel = (Label) resultContent.getChildren().get(2); int percentage = (int) (score * 100); scoreLabel.setText(percentage + "分"); // 根据分数设置不同的颜色和评语 if (score >= 0.9) { scoreLabel.setStyle("-fx-text-fill: #4CAF50;"); messageLabel.setText("优秀!表现非常出色!"); } else if (score >= 0.7) { scoreLabel.setStyle("-fx-text-fill: #FF9800;"); messageLabel.setText("良好!继续加油!"); } else if (score >= 0.6) { scoreLabel.setStyle("-fx-text-fill: #FFC107;"); messageLabel.setText("及格!还有进步空间!"); } else { scoreLabel.setStyle("-fx-text-fill: #f44336;"); messageLabel.setText("需要多加练习!"); } } } public Scene getScene() { return scene; } }