首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java Swing 書店管理系統(三):用戶增刪改查完整實現

     編輯:Java 相關知識

項目背景

基於 MVC 分層架構的桌面應用,本文完成用戶模塊的增、刪、改、查交互界面與業務邏輯串聯。

架構分層

  • UI 層:JPanel 子類,負責界面渲染與事件收集
  • Business 接口 (EBI):定義業務契約
  • 工廠模式:UserEbiFactory 獲取實現實例
  • VO:UserModel 攜帶數據

四大面板實現核心代碼

1. AddPanel - 新增用戶

public class AddPanel extends JPanel {
    private JFrame mainFrame;
    // 組件:tfdUuid, tfdName, tfdPwd, tfdPwd2, combType, btnAdd, btnBack

    private void btnAddActionPerformed(ActionEvent evt) {
        // 1. 參數收集與校驗
        String uuid = tfdUuid.getText().trim();
        String name = tfdName.getText().trim();
        String pwd = new String(tfdPwd.getPassword());
        String pwd2 = new String(tfdPwd2.getPassword());

        if (isEmpty(uuid)) { showError("用戶ID為空"); return; }
        if (isEmpty(name)) { showError("用戶名為空"); return; }
        if (!pwd.equals(pwd2) || isEmpty(pwd)) { showError("兩次密碼不一致或為空"); return; }

        int type;
        try { type = UserTypeEnum.getTypeByName(combType.getSelectedItem().toString()); }
        catch (Exception e) { showError("請選擇用戶類型"); return; }

        // 2. 組裝 VO
        UserModel user = new UserModel();
        user.setUuid(uuid); user.setName(name); user.setPwd(pwd); user.setType(type);

        // 3. 調用業務層
        if (UserEbiFactory.getUserEbi().create(user)) {
            backToList();  // 成功返回列表
        } else {
            showError("用戶已存在");
        }
    }
}

2. ListPanel - 用戶列表與導航

public class ListPanel extends JPanel {
    private JList userLists = new JList<>();

    private void myInitData() {
        List list = UserEbiFactory.getUserEbi().getAll();
        userLists.setListData(list.toArray());  // 默認調用 toString()
    }

    // 刪除按鈕事件
    private void btnToDeleteActionPerformed(ActionEvent evt) {
        UserModel user = userLists.getSelectedValue();
        if (user == null) { showError("請選擇要刪除的用戶"); return; }
        mainFrame.setContentPane(new DeletePanel(mainFrame, user.getUuid()));
        mainFrame.validate();
    }
    // 修改、新增按鈕同理跳轉對應面板
}

3. DeletePanel - 刪除確認

public class DeletePanel extends JPanel {
    private final String uuid;  // 構造器傳入

    private void myInitData() {
        UserModel m = UserEbiFactory.getUserEbi().getSingle(uuid);
        // 填充只讀字段:tfdName, tfdUuid, tfdPwd, tfdType
    }

    private void btnDeleteActionPerformed(ActionEvent evt) {
        if (UserEbiFactory.getUserEbi().delete(uuid)) backToList();
        else showError("用戶不存在");
    }
}

4. UpdatePanel - 修改用戶

public class UpdatePanel extends JPanel {
    private final String uuid;

    private void myInitData() {
        UserModel m = UserEbiFactory.getUserEbi().getSingle(uuid);
        // 填充字段,uuid 設置不可編輯
        // 下拉框:當前類型放第一位,其餘類型補充
    }

    private void btnUpdateActionPerformed(ActionEvent evt) {
        // 參數收集校驗同 AddPanel
        UserModel user = new UserModel();
        user.setUuid(uuid); user.setName(name); user.setPwd(pwd); user.setType(type);
        if (UserEbiFactory.getUserEbi().update(user)) backToList();
        else showError("用戶不存在");
    }
}

關鍵設計亮點

  1. 面板切換模式:mainFrame.setContentPane(new XxxPanel(...)) + validate(),無卡頓
  2. 參數校驗前置:UI 層攔截空值、密碼不一致,減少業務層壓力
  3. 枚舉驅動下拉框:UserTypeEnum 統一類型定義,避免硬編碼
  4. 異常統一處理:JOptionPane 友好提示,不拋出堆棧信息

避坑指南

  • JPasswordField.getPassword() 返回 char[],必須 new String(...) 轉換
  • Swing 組件初始化代碼(initComponents)由 IDE 生成,**切勿手動修改**,自定義邏輯寫在 myInitData()
  • 面板構造器接收 mainFrame 與業務鍵(uuid),避免靜態耦合
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved