From 6b1447fb1794e08f8e5f580b83ae5eabe4e617d8 Mon Sep 17 00:00:00 2001
From: 张世豪 <979909237@qq.com>
Date: 星期三, 24 十二月 2025 16:28:46 +0800
Subject: [PATCH] 登录页面启用
---
src/denglu/Denglu.java | 211 ++++++++++++++++++++++++++++++++++++++--------------
1 files changed, 154 insertions(+), 57 deletions(-)
diff --git a/src/denglu/Denglu.java b/src/denglu/Denglu.java
index 93078df..d1af97c 100644
--- a/src/denglu/Denglu.java
+++ b/src/denglu/Denglu.java
@@ -1,6 +1,13 @@
package denglu;
import homein.WenJianSuo;
+import ui.UIConfig;
+import zhuye.Shouye;
+import gecaoji.Device;
+import chuankou.SerialPortNativeLoader;
+import set.Setsys;
+import udpdell.UDPServer;
+import user.Usrdell;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
@@ -35,7 +42,7 @@
private void initializeTranslations() {
translations = new HashMap<>();
-
+
// 涓枃缈昏瘧
Map<String, String> zh = new HashMap<>();
zh.put("username_label", "鐢ㄦ埛鍚嶆垨閭");
@@ -45,7 +52,9 @@
zh.put("login_button", "鐧诲綍");
zh.put("no_account", "杩樻病鏈夎处鎴凤紵");
zh.put("sign_up", "绔嬪嵆娉ㄥ唽");
- zh.put("app_info", "AutoMow 漏 2023 - 鏅鸿兘鍓茶崏瑙e喅鏂规");
+ zh.put("app_title", "鏅鸿兘鍓茶崏绯荤粺");
+ zh.put("window_title", "鏅鸿兘鍓茶崏绯荤粺 - 鐧诲綍");
+ zh.put("app_info", "鏅鸿兘鍓茶崏绯荤粺 漏 2023 - 鏅鸿兘鍓茶崏瑙e喅鏂规");
zh.put("register_button", "娉ㄥ唽鏂拌处鎴�");
translations.put("zh", zh);
@@ -58,7 +67,9 @@
en.put("login_button", "Sign In");
en.put("no_account", "Don't have an account?");
en.put("sign_up", "Sign Up");
- en.put("app_info", "AutoMow 漏 2023 - Smart Mowing Solutions");
+ en.put("app_title", "Smart Mowing System");
+ en.put("window_title", "Smart Mowing System - Login");
+ en.put("app_info", "Smart Mowing System 漏 2023 - Intelligent Lawn Care");
en.put("register_button", "Create New Account");
translations.put("en", en);
@@ -71,7 +82,9 @@
es.put("login_button", "Iniciar Sesi贸n");
es.put("no_account", "驴No tienes una cuenta?");
es.put("sign_up", "Reg铆strate");
- es.put("app_info", "AutoMow 漏 2023 - Soluciones de Corte Inteligente");
+ es.put("app_title", "Sistema de Corte Inteligente");
+ es.put("window_title", "Sistema de Corte Inteligente - Iniciar Sesi贸n");
+ es.put("app_info", "Sistema de Corte Inteligente 漏 2023 - Soluciones Inteligentes");
es.put("register_button", "Crear Nueva Cuenta");
translations.put("es", es);
@@ -84,8 +97,10 @@
fr.put("login_button", "Se connecter");
fr.put("no_account", "Vous n'avez pas de compte?");
fr.put("sign_up", "S'inscrire");
- fr.put("app_info", "AutoMow 漏 2023 - Solutions de Tonte Intelligente");
- es.put("register_button", "Cr茅er un Nouveau Compte");
+ fr.put("app_title", "Syst猫me de Tonte Intelligent");
+ fr.put("window_title", "Syst猫me de Tonte Intelligent - Connexion");
+ fr.put("app_info", "Syst猫me de Tonte Intelligent 漏 2023 - Solutions de Tonte");
+ fr.put("register_button", "Cr茅er un Nouveau Compte");
translations.put("fr", fr);
// 寰疯缈昏瘧
@@ -97,18 +112,20 @@
de.put("login_button", "Anmelden");
de.put("no_account", "Sie haben noch kein Konto?");
de.put("sign_up", "Registrieren");
- de.put("app_info", "AutoMow 漏 2023 - Intelligente M盲h-L枚sungen");
+ de.put("app_title", "Intelligentes M盲hsystem");
+ de.put("window_title", "Intelligentes M盲hsystem - Anmeldung");
+ de.put("app_info", "Intelligentes M盲hsystem 漏 2023 - M盲hl枚sungen");
de.put("register_button", "Neues Konto Erstellen");
translations.put("de", de);
}
private void initializeUI() {
- setTitle("AutoMow - 鐧诲綍");
+ setTitle(getTranslationValue(currentLanguageCode, "window_title", "绯荤粺鐧诲綍"));
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 璁剧疆绱у噾甯冨眬灏哄
- setSize(320, 520);
- setMinimumSize(new Dimension(300, 500));
+ setSize(UIConfig.DIALOG_WIDTH, UIConfig.DIALOG_HEIGHT);
+ setMinimumSize(new Dimension(UIConfig.DIALOG_WIDTH, UIConfig.DIALOG_HEIGHT));
setResizable(false);
setupCompactLayout();
@@ -139,11 +156,17 @@
// 涓昏〃鍗曞尯鍩�
JPanel formPanel = createFormPanel();
+ // 鍖呰鍦ㄦ粴鍔ㄧ獥鏍间腑锛屼互闃插唴瀹规樉绀轰笉鍏�
+ JScrollPane scrollPane = new JScrollPane(formPanel);
+ scrollPane.setBorder(null);
+ scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
+ scrollPane.getVerticalScrollBar().setUnitIncrement(16);
+
// 搴曢儴搴旂敤淇℃伅
JPanel appInfoPanel = createAppInfoPanel();
mainPanel.add(topPanel, BorderLayout.NORTH);
- mainPanel.add(formPanel, BorderLayout.CENTER);
+ mainPanel.add(scrollPane, BorderLayout.CENTER);
mainPanel.add(appInfoPanel, BorderLayout.SOUTH);
add(mainPanel);
@@ -159,11 +182,6 @@
));
// 鐧诲綍鏍囬
- JLabel loginTitle = new JLabel("AutoMow", SwingConstants.CENTER);
- loginTitle.setFont(new Font("PingFang SC", Font.BOLD, 24));
- loginTitle.setForeground(THEME_COLOR);
- loginTitle.setAlignmentX(Component.CENTER_ALIGNMENT);
-
// 鐢ㄦ埛鍚嶈緭鍏�
usernameLabel = new JLabel("鐢ㄦ埛鍚嶆垨閭", SwingConstants.CENTER);
usernameLabel.setFont(new Font("PingFang SC", Font.BOLD, 13));
@@ -212,7 +230,7 @@
rememberForgotPanel.add(rememberMe, BorderLayout.WEST);
rememberForgotPanel.add(forgotPassword, BorderLayout.EAST);
- // 鐧诲綍鎸夐挳 - 姘村钩灞呬腑锛岄暱搴︿笌鏂囨湰妗嗙浉鍚�
+ // 鐧诲綍鎸夐挳 - 姘村钩灞呬腑锛岄暱搴︿笌鏂囨湰妗嗗搴︿繚鎸佺浉杩�
JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
buttonPanel.setBackground(Color.WHITE);
buttonPanel.setMaximumSize(new Dimension(Integer.MAX_VALUE, 50));
@@ -221,8 +239,8 @@
loginButton.setBackground(THEME_COLOR);
loginButton.setForeground(Color.WHITE);
loginButton.setFont(new Font("PingFang SC", Font.BOLD, 15));
- // 璁剧疆鐧诲綍鎸夐挳闀垮害涓庢枃鏈鐩稿悓
- loginButton.setPreferredSize(new Dimension(260, 42));
+ // 璁剧疆鐧诲綍鎸夐挳闀垮害鎺ヨ繎鏂囨湰妗嗗搴�
+ loginButton.setPreferredSize(new Dimension(300, 48));
loginButton.setBorderPainted(false);
loginButton.setFocusPainted(false);
loginButton.setCursor(new Cursor(Cursor.HAND_CURSOR));
@@ -248,7 +266,7 @@
registerButton.setBackground(Color.WHITE);
registerButton.setForeground(THEME_COLOR);
registerButton.setFont(new Font("PingFang SC", Font.BOLD, 14));
- registerButton.setPreferredSize(new Dimension(140, 38));
+ registerButton.setPreferredSize(new Dimension(180, 42));
registerButton.setBorder(BorderFactory.createCompoundBorder(
BorderFactory.createLineBorder(THEME_COLOR),
BorderFactory.createEmptyBorder(5, 15, 5, 15)
@@ -282,12 +300,11 @@
signupPanel.add(signupLink);
// 缁勮琛ㄥ崟
- formPanel.add(loginTitle);
- formPanel.add(Box.createRigidArea(new Dimension(0, 25)));
+ formPanel.add(Box.createRigidArea(new Dimension(0, 15)));
formPanel.add(usernameLabel);
formPanel.add(Box.createRigidArea(new Dimension(0, 5)));
formPanel.add(usernameField);
- formPanel.add(Box.createRigidArea(new Dimension(0, 15)));
+ formPanel.add(Box.createRigidArea(new Dimension(0, 30)));
formPanel.add(passwordLabel);
formPanel.add(Box.createRigidArea(new Dimension(0, 5)));
formPanel.add(passwordField);
@@ -307,7 +324,9 @@
JPanel appInfoPanel = new JPanel();
appInfoPanel.setBackground(Color.WHITE);
appInfoPanel.setBorder(BorderFactory.createEmptyBorder(10, 0, 5, 0));
- appInfoLabel = new JLabel("AutoMow 漏 2023 - 鏅鸿兘鍓茶崏瑙e喅鏂规");
+ appInfoLabel = new JLabel(
+ getTranslationValue(currentLanguageCode, "app_info", "鏅鸿兘鍓茶崏绯荤粺 漏 2023")
+ );
appInfoLabel.setFont(new Font("PingFang SC", Font.PLAIN, 10));
appInfoLabel.setForeground(new Color(150, 150, 150));
appInfoPanel.add(appInfoLabel);
@@ -356,20 +375,20 @@
if (translation != null) {
// 鏇存柊鎵�鏈夌晫闈㈡枃鏈�
- usernameLabel.setText(translation.get("username_label"));
- passwordLabel.setText(translation.get("password_label"));
- rememberMe.setText(translation.get("remember_me"));
- forgotPassword.setText(translation.get("forgot_password"));
- loginButton.setText(translation.get("login_button"));
- noAccountLabel.setText(translation.get("no_account"));
- signupLink.setText(translation.get("sign_up"));
- appInfoLabel.setText(translation.get("app_info"));
-
+ usernameLabel.setText(getTranslationValue(langCode, "username_label", usernameLabel.getText()));
+ passwordLabel.setText(getTranslationValue(langCode, "password_label", passwordLabel.getText()));
+ rememberMe.setText(getTranslationValue(langCode, "remember_me", rememberMe.getText()));
+ forgotPassword.setText(getTranslationValue(langCode, "forgot_password", forgotPassword.getText()));
+ loginButton.setText(getTranslationValue(langCode, "login_button", loginButton.getText()));
+ noAccountLabel.setText(getTranslationValue(langCode, "no_account", noAccountLabel.getText()));
+ signupLink.setText(getTranslationValue(langCode, "sign_up", signupLink.getText()));
+ appInfoLabel.setText(getTranslationValue(langCode, "app_info", appInfoLabel.getText()));
+
// 鏇存柊娉ㄥ唽鎸夐挳鏂囨湰
- registerButton.setText(translation.get("register_button"));
-
+ registerButton.setText(getTranslationValue(langCode, "register_button", registerButton.getText()));
+
// 鏇存柊绐楀彛鏍囬
- setTitle("AutoMow - " + (langCode.equals("zh") ? "鐧诲綍" : "Login"));
+ setTitle(getTranslationValue(langCode, "window_title", getTitle()));
// 鏇存柊璇█璁剧疆鍒版枃浠�
updateLanguagePreference(langCode);
@@ -387,6 +406,17 @@
}
}
+ private String getTranslationValue(String languageCode, String key, String defaultValue) {
+ Map<String, String> translation = translations.get(languageCode);
+ if (translation != null) {
+ String value = translation.get(key);
+ if (value != null && !value.trim().isEmpty()) {
+ return value;
+ }
+ }
+ return defaultValue;
+ }
+
private void updateLanguagePreference(String languageCode) {
String currentLanguage = UserChuShiHua.getProperty("language");
if (!languageCode.equals(currentLanguage)) {
@@ -411,10 +441,17 @@
usernameField.setText("");
}
- // 濡傛灉瀵嗙爜涓�-1锛屾竻绌哄瘑鐮佹
- String savedPassword = UserChuShiHua.getProperty("password");
- if (savedPassword != null && savedPassword.equals("-1")) {
- passwordField.setText("");
+ // 鍔犺浇璁颁綇鎴戠姸鎬�
+ String rememberPwd = UserChuShiHua.getProperty("rememberPassword");
+ boolean isRemember = "1".equals(rememberPwd);
+ rememberMe.setSelected(isRemember);
+
+ // 濡傛灉璁颁綇鎴戣閫変腑锛屽~鍏呭瘑鐮�
+ if (isRemember) {
+ String savedPassword = UserChuShiHua.getProperty("password");
+ if (savedPassword != null && !savedPassword.equals("-1")) {
+ passwordField.setText(savedPassword);
+ }
}
}
@@ -454,20 +491,18 @@
// 楠岃瘉鐢ㄦ埛鍚嶅拰瀵嗙爜
if (validateLogin(username, password)) {
- JOptionPane.showMessageDialog(this,
- "鐧诲綍鎴愬姛锛�",
- "鎴愬姛",
- JOptionPane.INFORMATION_MESSAGE);
-
// 鏇存柊鏈�鍚庣櫥褰曟椂闂�
UserChuShiHua.updateProperty("lastLoginTime", String.valueOf(System.currentTimeMillis()));
- // 濡傛灉璁颁綇鎴戣閫変腑锛屼繚瀛樼敤鎴峰悕
+ // 淇濆瓨璁颁綇鎴戠姸鎬�
if (rememberMe.isSelected()) {
+ UserChuShiHua.updateProperty("rememberPassword", "1");
UserChuShiHua.updateProperty("userName", username);
+ } else {
+ UserChuShiHua.updateProperty("rememberPassword", "0");
}
- // 杩欓噷鍙互娣诲姞璺宠浆鍒颁富鐣岄潰鐨勪唬鐮�
+ // 鍏抽棴鐧诲綍绐楀彛骞舵墦寮�棣栭〉
openMainApplication();
} else {
@@ -494,16 +529,25 @@
}
private void openMainApplication() {
- // 杩欓噷鍙互鎵撳紑涓诲簲鐢ㄧ▼搴忕獥鍙�
System.out.println("鐧诲綍鎴愬姛锛屽噯澶囨墦寮�涓诲簲鐢ㄧ▼搴�...");
-
- // 婕旂ず锛�3绉掑悗鍏抽棴鐧诲綍绐楀彛
- Timer timer = new Timer(1000, e -> {
+
+ SwingUtilities.invokeLater(() -> {
+ JFrame mainFrame = new JFrame("鏅鸿兘鍓茶崏绯荤粺");
+ mainFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
+
+ Shouye homePanel = new Shouye();
+ mainFrame.setContentPane(homePanel);
+
+ // 璁剧疆涓庣櫥褰曢〉闈㈢浉鍚岀殑灏哄
+ mainFrame.setSize(UIConfig.DIALOG_WIDTH, UIConfig.DIALOG_HEIGHT);
+ mainFrame.setMinimumSize(new Dimension(UIConfig.DIALOG_WIDTH, UIConfig.DIALOG_HEIGHT));
+ mainFrame.setResizable(false);
+ mainFrame.setLocationRelativeTo(null);
+ mainFrame.setVisible(true);
+
dispose();
System.out.println("鐧诲綍绐楀彛宸插叧闂紝涓诲簲鐢ㄧ▼搴忓凡鍚姩");
});
- timer.setRepeats(false);
- timer.start();
}
// 娉ㄥ唽绐楀彛鏂规硶
@@ -512,10 +556,63 @@
RegistrationFrame registerFrame = new RegistrationFrame(this, currentLanguageCode);
registerFrame.setVisible(true);
}
-
+
+ /**
+ * 绋嬪簭鍏ュ彛鐐�
+ * 闆嗘垚Homein绫荤殑鍒濆鍖栭�昏緫
+ */
public static void main(String[] args) {
- SwingUtilities.invokeLater(() -> {
- new Denglu().setVisible(true);
- });
+ // 妫�鏌ョ▼搴忔槸鍚﹀凡缁忚繍琛�
+ if (WenJianSuo.isAlreadyRunning()) {
+ JOptionPane.showMessageDialog(null,
+ "绋嬪簭宸茬粡鍦ㄨ繍琛屼腑锛乗n涓嶈兘鍚屾椂鎵撳紑澶氫釜瀹炰緥銆�",
+ "璀﹀憡",
+ JOptionPane.WARNING_MESSAGE);
+ System.exit(0);
+ return;
+ }
+
+ // 娣诲姞鍏抽棴閽╁瓙锛岀‘淇濈▼搴忛��鍑烘椂閲婃斁閿�
+ Runtime.getRuntime().addShutdownHook(new Thread(() -> {
+ WenJianSuo.releaseLock();
+ }));
+
+ try {
+ SerialPortNativeLoader.ensureLibraryPresent();
+ // 鍒濆鍖栨暟鎹�
+ UserChuShiHua.initialize();
+ Usrdell.initialize(); // 鍒濆鍖栫敤鎴峰睘鎬�
+
+ Setsys setsys = new Setsys();
+ setsys.initializeFromProperties();
+ Device.initializeActiveDevice(setsys.getMowerId());
+
+ UDPServer.startAsync();//鍚姩鏁版嵁鎺ユ敹绾跨▼
+
+ // 鏄剧ず鍒濆鏁版嵁
+ System.out.println("鍒濆鐢ㄦ埛鍚�: " + UserChuShiHua.getProperty("userName"));
+ System.out.println("鍒濆瀵嗙爜: " + UserChuShiHua.getProperty("password"));
+
+ // 鍚姩鐧诲綍鐣岄潰
+ EventQueue.invokeLater(() -> {
+ try {
+ new Denglu().setVisible(true);
+ } catch (Exception e) {
+ e.printStackTrace();
+ JOptionPane.showMessageDialog(null,
+ "鐧诲綍鐣岄潰鍚姩澶辫触: " + e.getMessage(),
+ "閿欒",
+ JOptionPane.ERROR_MESSAGE);
+ }
+ });
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ JOptionPane.showMessageDialog(null,
+ "绋嬪簭鍚姩澶辫触: " + e.getMessage(),
+ "閿欒",
+ JOptionPane.ERROR_MESSAGE);
+ }
}
+
}
\ No newline at end of file
--
Gitblit v1.10.0