基於 MVC 分層架構的桌面應用,本文完成用戶模塊的增、刪、改、查交互界面與業務邏輯串聯。
UserEbiFactory 獲取實現實例UserModel 攜帶數據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("用戶已存在");
}
}
}
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();
}
// 修改、新增按鈕同理跳轉對應面板
}
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("用戶不存在");
}
}
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("用戶不存在");
}
}
mainFrame.setContentPane(new XxxPanel(...)) + validate(),無卡頓UserTypeEnum 統一類型定義,避免硬編碼JPasswordField.getPassword() 返回 char[],必須 new String(...) 轉換myInitData()mainFrame 與業務鍵(uuid),避免靜態耦合