From b81f2a1801648b988dce4cf181b74f6eb699a567 Mon Sep 17 00:00:00 2001 From: qmstyle Date: Mon, 31 Mar 2025 15:08:22 +0800 Subject: [PATCH] =?UTF-8?q?=E7=99=BB=E5=BD=95=E9=A1=B5=E9=9D=A2=E6=94=B9?= =?UTF-8?q?=E4=B8=BAfxml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../online/exam/ui/OnlineExamApplication.java | 2 +- .../exam/ui/controller/LoginController.java | 208 ++++++++++++++++++ src/main/java/module-info.java | 6 +- src/main/resources/fxml/login.fxml | 25 ++- 4 files changed, 227 insertions(+), 14 deletions(-) create mode 100644 src/main/java/com/zhangmeng/online/exam/ui/controller/LoginController.java diff --git a/src/main/java/com/zhangmeng/online/exam/ui/OnlineExamApplication.java b/src/main/java/com/zhangmeng/online/exam/ui/OnlineExamApplication.java index 22ffa51..13bb993 100644 --- a/src/main/java/com/zhangmeng/online/exam/ui/OnlineExamApplication.java +++ b/src/main/java/com/zhangmeng/online/exam/ui/OnlineExamApplication.java @@ -22,7 +22,7 @@ public class OnlineExamApplication extends Application { public void start(Stage stage) throws IOException { FXMLLoader loader = new FXMLLoader(OnlineExamApplication.class.getResource("/fxml/login.fxml")); Parent root = loader.load(); - LoginPage loginPage = loader.getController(); + Scene scene = new Scene(root); // Scene scene = new Scene(new LoginPage()); stage.setScene(scene); diff --git a/src/main/java/com/zhangmeng/online/exam/ui/controller/LoginController.java b/src/main/java/com/zhangmeng/online/exam/ui/controller/LoginController.java new file mode 100644 index 0000000..cf0b10b --- /dev/null +++ b/src/main/java/com/zhangmeng/online/exam/ui/controller/LoginController.java @@ -0,0 +1,208 @@ +package com.zhangmeng.online.exam.ui.controller; + +import com.alibaba.fastjson2.JSONObject; +import com.zhangmeng.online.exam.ui.admin.IndexPage; +import com.zhangmeng.online.exam.ui.admin.LoginPage; +import com.zhangmeng.online.exam.ui.admin.PaperPage; +import com.zhangmeng.online.exam.ui.api.ApiUtils; +import com.zhangmeng.online.exam.ui.utils.AlertUtils; +import com.zhangmeng.online.exam.ui.utils.HttpUtils; +import javafx.beans.value.ChangeListener; +import javafx.beans.value.ObservableValue; +import javafx.concurrent.ScheduledService; +import javafx.concurrent.Task; +import javafx.fxml.FXML; +import javafx.scene.Scene; +import javafx.scene.control.Alert; +import javafx.scene.control.Button; +import javafx.scene.control.TextField; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; +import javafx.stage.Stage; +import javafx.util.Duration; + +import java.util.HashMap; +import java.util.Map; + +/** + * @author zm + * @date 2025/3/31 14:33 + * @version: 1.0 + */ +public class LoginController { + + @FXML + public TextField username; + + @FXML + public TextField password; + + //验证码 + @FXML + public ImageView captcha_image; + + @FXML + public TextField verificationCode; + + @FXML + public Button loginButton; + + @FXML + public void initialize() { + captcha_image.setImage(new Image(ApiUtils.API_URL + "/verificationCode/generate")); + captcha_image.setFitHeight(30); + captcha_image.setFitWidth(140); + + captcha_image.setOnMouseClicked(event -> { + captcha_image.setImage(new Image(ApiUtils.API_URL + "/verificationCode/generate")); + }); + + username.setText("admin"); + password.setText("123456"); + + loginButton.setOnAction(event -> { + login(); + }); + + } + + private void login() { + + //TODO 登录逻辑 + Map params = new HashMap<>(); + params.put("username", username.getText()); + params.put("password", password.getText()); + params.put("captcha", verificationCode.getText()); + String response = HttpUtils.POST(ApiUtils.API_URL + "/login", params); + JSONObject jsonObject = JSONObject.parseObject(response); + if (jsonObject.getIntValue("code") == 2001) { + Map data = (Map) jsonObject.get("data"); + Object token = data.get("token"); + HttpUtils.USER_INFO.put("token", token); + new Thread(this::user_type).start(); + Alert alert = AlertUtils.alert_msg(jsonObject.getString("message")); + + LoginController.MyScheduledService myService = new LoginController.MyScheduledService(); + //myService.setDelay(Duration.seconds(5));//延迟 + myService.setPeriod(Duration.millis(500));//时间周期 + myService.setRestartOnFailure(true); + myService.setMaximumFailureCount(4);//设置最大失败次数 + + myService.progressProperty().addListener(new ChangeListener() { + @Override + public void changed(ObservableValue observable, Number oldValue, Number newValue) { + System.out.println("progressProperty:" + newValue.intValue()); + } + }); + + myService.valueProperty().addListener(new ChangeListener() { + @Override + public void changed(ObservableValue observable, Number oldValue, Number newValue) { + if (newValue != null) { + System.out.println("progressProperty:" + newValue.intValue()); + } + } + }); + + myService.lastValueProperty().addListener(new ChangeListener() { + @Override + public void changed(ObservableValue observable, Number oldValue, Number newValue) { + + if (newValue != null) { + System.out.println("lastValueProperty:" + newValue.intValue()); + if (newValue.intValue() == 3) { + myService.cancel(); + alert.close(); + success(); + } + } + } + }); + + myService.start(); + + + } else { + AlertUtils.alert_warning(jsonObject.getString("message")); + } + } + + private void user_type() { + Map params = new HashMap<>(); + params.put("token", HttpUtils.USER_INFO.get("token")); + String response = HttpUtils.GET(ApiUtils.API_URL + "/user/getUserInfo", params); + JSONObject jsonObject = JSONObject.parseObject(response); + if (jsonObject.getIntValue("code") == 200) { + Map data = (Map) jsonObject.get("data"); + String type = data.get("type").toString(); + HttpUtils.USER_INFO.put("type", type); + } + } + + private void success() { + String type = HttpUtils.USER_INFO.get("type").toString(); + + switch (type) { + case "STUDENT" -> user_page(); + case "ADMIN" -> admin_page(); + } + } + + private void user_page() { + Scene scene = loginButton.getScene(); + Stage window = (Stage) scene.getWindow(); + window.close(); + + Stage stage = new Stage(); + + //判断 + PaperPage paperPage = new PaperPage(); + scene = new Scene(paperPage, 1280, 720); + stage.setScene(scene); + stage.setTitle("在线考试系统"); + stage.show(); + } + + private void admin_page() { + Scene scene = loginButton.getScene(); + Stage window = (Stage) scene.getWindow(); + window.close(); + + Stage stage = new Stage(); + IndexPage indexPage = new IndexPage(); + + scene = new Scene(indexPage, 1280, 720); + stage.setScene(scene); + stage.setTitle("在线考试系统"); + stage.show(); + } + + class MyScheduledService extends ScheduledService { + + int sum = 0; + + @Override + protected Task createTask() { + + return new Task() { + @Override + protected Number call() throws Exception { + sum = sum + 1; + + return sum; + } + + @Override + protected void updateValue(Number value) { + + super.updateValue(value); +// System.out.println("updateValue"); + if (value.intValue() == 10) { + LoginController.MyScheduledService.this.cancel(); + } + + } + }; + } + } +} diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java index a03a40a..6e08847 100644 --- a/src/main/java/module-info.java +++ b/src/main/java/module-info.java @@ -8,6 +8,8 @@ module com.zhangmeng.onlineexamui { requires PaginationPicker; - opens com.zhangmeng.online.exam.ui to javafx.fxml; - exports com.zhangmeng.online.exam.ui; + opens com.zhangmeng.online.exam.ui to javafx.graphics; + opens com.zhangmeng.online.exam.ui.controller to javafx.fxml; + + exports com.zhangmeng.online.exam.ui.controller; } \ No newline at end of file diff --git a/src/main/resources/fxml/login.fxml b/src/main/resources/fxml/login.fxml index e263be6..da08476 100644 --- a/src/main/resources/fxml/login.fxml +++ b/src/main/resources/fxml/login.fxml @@ -8,15 +8,15 @@ + - + - + - - - + + @@ -26,14 +26,17 @@ -