From 5ae9bbe3583384afab8eb95a134ccb74aee6487a Mon Sep 17 00:00:00 2001
From: 张世豪 <979909237@qq.com>
Date: 星期四, 25 十二月 2025 13:46:38 +0800
Subject: [PATCH] 曾加修改密码功能

---
 src/set/Sets.java |  160 ++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 156 insertions(+), 4 deletions(-)

diff --git a/src/set/Sets.java b/src/set/Sets.java
index ab09098..bbc0160 100644
--- a/src/set/Sets.java
+++ b/src/set/Sets.java
@@ -17,6 +17,8 @@
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Locale;
+import denglu.Denglu;
+import denglu.UserChuShiHua;
 
 /**
  * 璁剧疆瀵硅瘽妗� - 鍙傝�僑houye.java鏍峰紡
@@ -97,15 +99,22 @@
         // 鍒涘缓璁剧疆椤归潰鏉匡紙鍦嗚鐧借壊闈㈡澘锛�
         JPanel settingsPanel = createSettingsPanel();
         
+        // 鍒涘缓婊氬姩闈㈡澘
+        JScrollPane scrollPane = new JScrollPane(settingsPanel);
+        scrollPane.setBorder(null); // 鍘婚櫎杈规
+        scrollPane.getViewport().setBackground(BACKGROUND_COLOR); // 璁剧疆瑙嗗彛鑳屾櫙鑹蹭笌涓昏儗鏅竴鑷�
+        scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); // 绂佹姘村钩婊氬姩
+        scrollPane.getVerticalScrollBar().setUnitIncrement(16); // 澧炲姞婊氬姩閫熷害
+        
         // 娣诲姞缁勪欢鍒颁富闈㈡澘
-        mainPanel.add(settingsPanel, BorderLayout.CENTER);
+        mainPanel.add(scrollPane, BorderLayout.CENTER);
         
         add(mainPanel, BorderLayout.CENTER);
     }
     
     private JPanel createSettingsPanel() {
         // 鍒涘缓鍦嗚鐧借壊闈㈡澘瀹瑰櫒
-        JPanel container = new JPanel() {
+        JPanel container = new ScrollablePanel() {
             @Override
             protected void paintComponent(Graphics g) {
                 Graphics2D g2d = (Graphics2D) g.create();
@@ -184,11 +193,17 @@
         JPanel manualBoundaryDrawingPanel = createManualBoundaryDrawingPanel();
         manualBoundaryDrawingModeLabel = (JLabel) manualBoundaryDrawingPanel.getClientProperty("valueLabel");
 
+        // 淇敼瀵嗙爜璁剧疆椤�
+        JPanel changePasswordPanel = createChangePasswordPanel();
+
         JPanel feedbackPanel = createFeedbackPanel();
         
         // APP鐗堟湰
         JPanel appVersionPanel = createAppVersionPanel();
         
+        // 閫�鍑虹櫥褰�
+        JPanel logoutPanel = createLogoutPanel();
+        
         // 娣诲姞璁剧疆椤癸紝浣跨敤鍒嗗壊绾垮垎闅�
         addSettingItem(panel, mowerIdPanel, true);
         addSettingItem(panel, mowerSizePanel, true);
@@ -202,8 +217,10 @@
         addSettingItem(panel, boundaryLengthPanel, true);
         addSettingItem(panel, measurementModePanel, true);
         addSettingItem(panel, manualBoundaryDrawingPanel, true);
+        addSettingItem(panel, changePasswordPanel, true);
         addSettingItem(panel, feedbackPanel, true);
-        addSettingItem(panel, appVersionPanel, false);  // 鏈�鍚庝竴椤逛笉鍔犲垎鍓茬嚎
+        addSettingItem(panel, appVersionPanel, true);
+        addSettingItem(panel, logoutPanel, false);  // 鏈�鍚庝竴椤逛笉鍔犲垎鍓茬嚎
         
         container.add(panel, BorderLayout.CENTER);
         return container;
@@ -1756,6 +1773,38 @@
         timer.start();
     }
     
+    /**
+     * 鍙粴鍔ㄧ殑闈㈡澘锛屽己鍒跺搴﹂�傚簲瑙嗗彛
+     */
+    private class ScrollablePanel extends JPanel implements Scrollable {
+        private static final long serialVersionUID = 1L;
+
+        @Override
+        public Dimension getPreferredScrollableViewportSize() {
+            return getPreferredSize();
+        }
+
+        @Override
+        public int getScrollableUnitIncrement(Rectangle visibleRect, int orientation, int direction) {
+            return 16;
+        }
+
+        @Override
+        public int getScrollableBlockIncrement(Rectangle visibleRect, int orientation, int direction) {
+            return 16;
+        }
+
+        @Override
+        public boolean getScrollableTracksViewportWidth() {
+            return true; // 寮哄埗瀹藉害閫傚簲瑙嗗彛锛岄槻姝㈡按骞虫粴鍔�
+        }
+
+        @Override
+        public boolean getScrollableTracksViewportHeight() {
+            return false;
+        }
+    }
+    
     @Override
     public void setVisible(boolean visible) {
         if (visible) {
@@ -1764,5 +1813,108 @@
         }
         super.setVisible(visible);
     }
-       
+    
+    private JPanel createLogoutPanel() {
+        JPanel panel = new JPanel(new GridBagLayout());
+        panel.setOpaque(false);
+        panel.setAlignmentX(Component.LEFT_ALIGNMENT);
+        panel.setMaximumSize(new Dimension(Integer.MAX_VALUE, ROW_HEIGHT + 20));
+        panel.setBorder(BorderFactory.createEmptyBorder(ITEM_PADDING, ITEM_PADDING, ITEM_PADDING, ITEM_PADDING));
+
+        JButton logoutBtn = new JButton("閫�鍑虹櫥褰�");
+        logoutBtn.setFont(new Font("寰蒋闆呴粦", Font.BOLD, 14));
+        logoutBtn.setForeground(Color.WHITE);
+        logoutBtn.setBackground(new Color(220, 53, 69)); // Red color
+        logoutBtn.setFocusPainted(false);
+        logoutBtn.setBorderPainted(false);
+        logoutBtn.setCursor(new Cursor(Cursor.HAND_CURSOR));
+        logoutBtn.setPreferredSize(new Dimension(200, 40));
+        
+        logoutBtn.addActionListener(e -> {
+            int confirm = JOptionPane.showConfirmDialog(this, 
+                "纭畾瑕侀��鍑虹櫥褰曞悧锛�", "閫�鍑虹‘璁�", 
+                JOptionPane.YES_NO_OPTION);
+                
+            if (confirm == JOptionPane.YES_OPTION) {
+                // Reset Remember Me
+                UserChuShiHua.updateProperty("rememberPassword", "0");
+                
+                // Close current dialog
+                dispose();
+                
+                // Close all windows and open Login
+                for (Window window : Window.getWindows()) {
+                    if (window.isDisplayable()) {
+                        window.dispose();
+                    }
+                }
+                
+                SwingUtilities.invokeLater(() -> {
+                    new Denglu().setVisible(true);
+                });
+            }
+        });
+
+        GridBagConstraints gbc = new GridBagConstraints();
+        gbc.gridx = 0;
+        gbc.gridy = 0;
+        gbc.weightx = 1.0;
+        gbc.anchor = GridBagConstraints.CENTER;
+        panel.add(logoutBtn, gbc);
+        
+        return panel;
+    }
+
+    /**
+     * 鍒涘缓淇敼瀵嗙爜璁剧疆闈㈡澘
+     */
+    private JPanel createChangePasswordPanel() {
+        JPanel panel = new JPanel(new GridBagLayout());
+        panel.setOpaque(false);
+        panel.setAlignmentX(Component.LEFT_ALIGNMENT);
+        panel.setMaximumSize(new Dimension(Integer.MAX_VALUE, ROW_HEIGHT));
+        panel.setPreferredSize(new Dimension(Integer.MAX_VALUE, ROW_HEIGHT));
+        panel.setMinimumSize(new Dimension(0, ROW_HEIGHT));
+        panel.setBorder(BorderFactory.createEmptyBorder(ITEM_PADDING, ITEM_PADDING, ITEM_PADDING, ITEM_PADDING));
+
+        GridBagConstraints gbc = new GridBagConstraints();
+
+        JLabel titleLabel = new JLabel("淇敼瀵嗙爜");
+        titleLabel.setFont(new Font("寰蒋闆呴粦", Font.BOLD, 14));
+        titleLabel.setForeground(Color.BLACK);
+        titleLabel.setHorizontalAlignment(SwingConstants.RIGHT);
+        gbc.gridx = 0;
+        gbc.gridy = 0;
+        gbc.weightx = 0;
+        gbc.anchor = GridBagConstraints.EAST;
+        gbc.insets = new Insets(0, 0, 0, 12);
+        panel.add(titleLabel, gbc);
+
+        JLabel valueLabel = new JLabel("******");
+        valueLabel.setFont(new Font("寰蒋闆呴粦", Font.PLAIN, 14));
+        valueLabel.setForeground(Color.DARK_GRAY);
+        gbc = new GridBagConstraints();
+        gbc.gridx = 1;
+        gbc.gridy = 0;
+        gbc.weightx = 1.0;
+        gbc.anchor = GridBagConstraints.EAST;
+        panel.add(valueLabel, gbc);
+
+        JButton editBtn = createEditButton();
+        editBtn.addActionListener(e -> {
+            SwingUtilities.invokeLater(() -> {
+                xiugaimima dialog = new xiugaimima((Frame) SwingUtilities.getWindowAncestor(this));
+                dialog.setVisible(true);
+            });
+        });
+        
+        gbc = new GridBagConstraints();
+        gbc.gridx = 2;
+        gbc.gridy = 0;
+        gbc.weightx = 0;
+        gbc.anchor = GridBagConstraints.EAST;
+        panel.add(editBtn, gbc);
+
+        return panel;
+    }
 }
\ No newline at end of file

--
Gitblit v1.10.0