第一步:创建一个模块做这个项目。employee-sys
第二步:分析业务需求

  • 提供一个登录和注册用户的界面
  • 提供一个人事信息的管理界面:展示全部员工信息,提供一个根据名称查询某个员工信息展示,添加员工信息,删除员工信息,修改员工信息
  • 分析项目角色:登录用户(登录名称,密码),员工信息(id,姓名,性别,年龄,电话,职位,入职时间,薪水,部门信息)
  • 分析系统界面:
    登录界面类:创建登陆界面
    信息管理界面类:创建管理界面类

第三步:AI开发

  • AI生成登录界面
  • AI生成信息管理界面

开发:

1、拿到登录界面程序并进行修改

public class ModernLoginFrame extends JFrame {

    private JTextField usernameField;// 用户名输入框
    private JPasswordField passwordField;// 密码输入框
    private JButton loginButton;// 登录按钮
    private JButton registerButton;// 注册按钮

    public ModernLoginFrame() {
        // 基本窗口设置
        setTitle("用户登录");
        setSize(450, 600);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setResizable(false);

        // 创建主内容面板
        JPanel contentPane = new JPanel() {
            @Override
            protected void paintComponent(Graphics g) {
                Graphics2D g2 = (Graphics2D) g.create();
                // 启用抗锯齿
                g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
                // 绘制渐变背景
                GradientPaint gradient = new GradientPaint(0, 0, new Color(64, 158, 255), 0, getHeight(), new Color(0, 100, 200));
                g2.setPaint(gradient);
                g2.fillRoundRect(0, 0, getWidth(), getHeight(), 30, 30);
                g2.dispose();
            }
        };
        contentPane.setLayout(new BorderLayout());
        setContentPane(contentPane);

        // 创建登录卡片面板
        JPanel cardPanel = new JPanel(new GridBagLayout());
        cardPanel.setOpaque(false);
        cardPanel.setBorder(BorderFactory.createEmptyBorder(50, 50, 50, 50));
        contentPane.add(cardPanel, BorderLayout.CENTER);

        GridBagConstraints gbc = new GridBagConstraints();
        gbc.insets = new Insets(10, 10, 10, 10);
        gbc.fill = GridBagConstraints.HORIZONTAL;

        // 标题
        JLabel titleLabel = new JLabel("欢迎回来");
        titleLabel.setFont(new Font("微软雅黑", Font.BOLD, 28));
        titleLabel.setForeground(Color.WHITE);
        titleLabel.setHorizontalAlignment(SwingConstants.CENTER);
        gbc.gridx = 0;
        gbc.gridy = 0;
        gbc.gridwidth = 2;
        cardPanel.add(titleLabel, gbc);

        JLabel subtitleLabel = new JLabel("请输入您的账户信息");
        subtitleLabel.setFont(new Font("微软雅黑", Font.PLAIN, 14));
        subtitleLabel.setForeground(new Color(200, 200, 255));
        subtitleLabel.setHorizontalAlignment(SwingConstants.CENTER);
        gbc.gridy = 1;
        cardPanel.add(subtitleLabel, gbc);

        // 用户名输入
        gbc.gridwidth = 1;
        gbc.gridy = 2;
        gbc.gridx = 0;
        JLabel userIcon = new JLabel("👤");
        userIcon.setFont(new Font("Segoe UI Emoji", Font.PLAIN, 18));
        userIcon.setForeground(Color.WHITE);
        cardPanel.add(userIcon, gbc);

        gbc.gridx = 1;
        usernameField = new JTextField();
        usernameField.setFont(new Font("微软雅黑", Font.PLAIN, 16));
        usernameField.setOpaque(false);
        usernameField.setForeground(Color.WHITE);
        usernameField.setCaretColor(Color.WHITE); // 光标颜色
        usernameField.setBorder(BorderFactory.createCompoundBorder(
                BorderFactory.createMatteBorder(0, 0, 1, 0, Color.WHITE),
                BorderFactory.createEmptyBorder(10, 10, 10, 10)));
        // 设置提示文本
        usernameField.setText("  用户名");
        usernameField.setForeground(new Color(200, 200, 255));
        usernameField.addFocusListener(new java.awt.event.FocusAdapter() {
            @Override
            public void focusGained(java.awt.event.FocusEvent e) {
                if (usernameField.getText().equals("  用户名")) {
                    usernameField.setText("");
                    usernameField.setForeground(Color.WHITE);
                }
            }
            @Override
            public void focusLost(java.awt.event.FocusEvent e) {
                if (usernameField.getText().isEmpty()) {
                    usernameField.setText("  用户名");
                    usernameField.setForeground(new Color(200, 200, 255));
                }
            }
        });
        cardPanel.add(usernameField, gbc);

        // 密码输入
        gbc.gridy = 3;
        gbc.gridx = 0;
        JLabel passIcon = new JLabel("🔒");
        passIcon.setFont(new Font("Segoe UI Emoji", Font.PLAIN, 18));
        passIcon.setForeground(Color.WHITE);
        cardPanel.add(passIcon, gbc);

        gbc.gridx = 1;
        passwordField = new JPasswordField();
        passwordField.setFont(new Font("微软雅黑", Font.PLAIN, 16));
        passwordField.setOpaque(false);
        passwordField.setForeground(Color.WHITE);
        passwordField.setCaretColor(Color.WHITE);
        passwordField.setBorder(BorderFactory.createCompoundBorder(
                BorderFactory.createMatteBorder(0, 0, 1, 0, Color.WHITE),
                BorderFactory.createEmptyBorder(10, 10, 10, 10)));
        // 设置提示文本
        passwordField.setText("password");
        passwordField.setForeground(new Color(200, 200, 255));
        passwordField.setEchoChar((char) 0); // 初始显示明文
        passwordField.addFocusListener(new java.awt.event.FocusAdapter() {
            @Override
            public void focusGained(java.awt.event.FocusEvent e) {
                if (new String(passwordField.getPassword()).equals("password")) {
                    passwordField.setText("");
                    passwordField.setForeground(Color.WHITE);
                    passwordField.setEchoChar('•');
                }
            }
            @Override
            public void focusLost(java.awt.event.FocusEvent e) {
                if (passwordField.getPassword().length == 0) {
                    passwordField.setText("password");
                    passwordField.setForeground(new Color(200, 200, 255));
                    passwordField.setEchoChar((char) 0);
                }
            }
        });
        cardPanel.add(passwordField, gbc);

        // 登录按钮
        gbc.gridy = 4;
        gbc.gridx = 0;
        gbc.gridwidth = 2;
        loginButton = createStyledButton("登录");
        loginButton.addActionListener(e -> performLogin());
        cardPanel.add(loginButton, gbc);

        // 注册按钮
        gbc.gridy = 5;
        registerButton = createStyledButton("注册");
        registerButton.setBackground(new Color(50, 50, 50));
        registerButton.addActionListener(e -> performRegister());
        cardPanel.add(registerButton, gbc);

        // 回车登录
        passwordField.addActionListener(e -> performLogin());

        setVisible(true);
    }

    // 创建样式化按钮
    private JButton createStyledButton(String text) {
        JButton button = new JButton(text) {
            @Override
            protected void paintComponent(Graphics g) {
                Graphics2D g2 = (Graphics2D) g.create();
                g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
                if (getModel().isPressed()) {
                    g2.setColor(getBackground().darker());
                } else if (getModel().isRollover()) {
                    g2.setColor(getBackground().brighter());
                } else {
                    g2.setColor(getBackground());
                }
                g2.fillRoundRect(0, 0, getWidth(), getHeight(), 20, 20);
                g2.dispose();
                super.paintComponent(g);
            }

            @Override
            protected void paintBorder(Graphics g) {
                Graphics2D g2 = (Graphics2D) g.create();
                g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
                g2.setColor(getBackground().darker().darker());
                g2.drawRoundRect(0, 0, getWidth(), getHeight(), 20, 20);
                g2.dispose();
            }
        };
        button.setFont(new Font("微软雅黑", Font.BOLD, 16));
        button.setForeground(Color.WHITE);
        button.setBackground(new Color(70, 130, 180));
        button.setFocusPainted(false);
        button.setBorderPainted(false);
        button.setOpaque(false);
        button.setContentAreaFilled(false);
        button.setCursor(new Cursor(Cursor.HAND_CURSOR));
        button.setPreferredSize(new Dimension(200, 50));
        return button;
    }

    private void performLogin() {
        String username = usernameField.getText().trim();
        String password = new String(passwordField.getPassword());

        // 忽略提示文本
        if ("用户名".equals(username)) username = "";
        if ("password".equals(password)) password = "";

        if (username.isEmpty() || password.isEmpty()) {
            JOptionPane.showMessageDialog(this, "用户名和密码不能为空!", "提示", JOptionPane.WARNING_MESSAGE);
            return;
        }

        // 示例验证逻辑
        if ("admin".equals(username) && "password".equals(password)) {
            JOptionPane.showMessageDialog(this, "登录成功!", "提示", JOptionPane.INFORMATION_MESSAGE);
            this.dispose();
        } else {
            JOptionPane.showMessageDialog(this, "用户名或密码错误!", "错误", JOptionPane.ERROR_MESSAGE);
            passwordField.setText("password");
            passwordField.setForeground(new Color(200, 200, 255));
            passwordField.setEchoChar((char) 0);
        }
    }

    private void performRegister() {
        JOptionPane.showMessageDialog(this, "注册功能尚未实现。", "提示", JOptionPane.INFORMATION_MESSAGE);
    }

    public static void main(String[] args) {
        // 设置系统LookAndFeel
        try {
            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
        } catch (Exception e) {
            e.printStackTrace();
        }

        SwingUtilities.invokeLater(() -> new ModernLoginFrame().setVisible(true));
    }
}

定义了一个APP的启动类:

public class app {
    public static void main(String[] args) {
        new ModernLoginFrame();
    }
}

2、拿到管理信息的界面

展示全部员工信息,提供一个根据名称查询某个员工信息展示,添加员工信息,删除员工信息,修改员工信息

class Employee {
    private int id;
    private String name;
    private String sex;
    private String age;
    private String department;
    private String position;
    private String phone;
    private String date;
    private String salary;

    public Employee(int id, String name, String sex, String age, String department, String position, String phone, String date, String salary) {
        this.id = id;
        this.name = name;
        this.sex = sex;
        this.age = age;
        this.department = department;
        this.position = position;
        this.phone = phone;
        this.date = date;
        this.salary = salary;
    }

    // Getter 和 Setter 方法
    public int getId() { return id; }
    public void setId(int id) { this.id = id; }

    public String getName() { return name; }
    public void setName(String name) { this.name = name; }

    public String getDepartment() { return department; }
    public void setDepartment(String department) { this.department = department; }

    public String getPosition() { return position; }
    public void setPosition(String position) { this.position = position; }

    public String getPhone() { return phone; }
    public void setPhone(String phone) { this.phone = phone; }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }

    public String getDate() {
        return date;
    }

    public void setDate(String date) {
        this.date = date;
    }

    public String getSalary() {
        return salary;
    }

    public void setSalary(String salary) {
        this.salary = salary;
    }

    @Override
    public String toString() {
        return "员工信息:" +
                "编号:" + id +
                ", 姓名:" + name +
                ", 性别:" + sex +
                ", 年龄:" + age +
                ", 部门:" + department +
                ", 职位:" + position +
                ", 电话:" + phone +
                ", 入职日期:" + date +
                ", 工资:" + salary;
    }
}

/**
 * 添加/修改员工信息的对话框
 */
class EmployeeDialog extends JDialog {
    private JTextField nameField;
    private JTextField sexField;
    private JTextField ageField;
    private JTextField departmentField;
    private JTextField positionField;
    private JTextField phoneField;
    private JTextField dateField;
    private JTextField salaryField;
    private Employee employee;
    private boolean confirmed = false;

    public EmployeeDialog(JFrame parent, String title, Employee emp) {
        super(parent, title, true); // 模态对话框
        this.employee = emp;
        initializeComponents();
        setupLayout();
        setupEvents();
        setSize(400, 300);
        setLocationRelativeTo(parent);
    }

    private void initializeComponents() {
        nameField = new JTextField(employee != null ? employee.getName() : "", 15);
        sexField = new JTextField(employee != null ? employee.getSex() : "", 15);
        ageField = new JTextField(employee != null ? String.valueOf(employee.getAge()) : "", 15);
        departmentField = new JTextField(employee != null ? employee.getDepartment() : "", 15);
        positionField = new JTextField(employee != null ? employee.getPosition() : "", 15);
        phoneField = new JTextField(employee != null ? employee.getPhone() : "", 15);
        dateField = new JTextField(employee != null ? employee.getDate() : "", 15);
        salaryField = new JTextField(employee != null ? employee.getSalary() : "", 15);
    }

    private void setupLayout() {
        setLayout(new GridBagLayout());
        GridBagConstraints gbc = new GridBagConstraints();
        gbc.insets = new Insets(5, 5, 5, 5);
        gbc.anchor = GridBagConstraints.WEST;

        // 标签和输入框
        add(new JLabel("姓名:"), createGbc(0, 0));
        add(nameField, createGbc(1, 0));
        add(new JLabel("性别:"), createGbc(0, 1));
        add(sexField, createGbc(1, 1));
        add(new JLabel("年龄:"), createGbc(0, 2));
        add(ageField, createGbc(1, 2));
        add(new JLabel("部门:"), createGbc(0, 1));
        add(departmentField, createGbc(1, 1));
        add(new JLabel("职位:"), createGbc(0, 2));
        add(positionField, createGbc(1, 2));
        add(new JLabel("电话:"), createGbc(0, 3));
        add(phoneField, createGbc(1, 3));
        add(new JLabel("入职日期:"), createGbc(0, 4));
        add(dateField, createGbc(1, 4));
        add(new JLabel("工资:"), createGbc(0, 5));
        add(salaryField, createGbc(1, 5));

        // 按钮
        JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT));
        JButton okButton = new JButton("确定");
        JButton cancelButton = new JButton("取消");

        okButton.addActionListener(e -> {
            if (validateInput()) {
                confirmed = true;
                if (employee == null) {
                    employee = new Employee(-1, nameField.getText(),sexField.getText(),ageField.getText(), departmentField.getText(),
                            positionField.getText(), phoneField.getText(), dateField.getText(), salaryField.getText());
                } else {
                    employee.setName(nameField.getText());
                    employee.setSex(sexField.getText());
                    employee.setAge(ageField.getText());
                    employee.setDepartment(departmentField.getText());
                    employee.setPosition(positionField.getText());
                    employee.setPhone(phoneField.getText());
                    employee.setDate(dateField.getText());
                    employee.setSalary(salaryField.getText());
                }
                dispose();
            }
        });

        cancelButton.addActionListener(e -> dispose());

        buttonPanel.add(okButton);
        buttonPanel.add(cancelButton);
        gbc.gridx = 0;
        gbc.gridy = 4;
        gbc.gridwidth = 2;
        gbc.fill = GridBagConstraints.NONE;
        add(buttonPanel, gbc);
    }

    private GridBagConstraints createGbc(int x, int y) {
        GridBagConstraints gbc = new GridBagConstraints();
        gbc.gridx = x;
        gbc.gridy = y;
        gbc.insets = new Insets(5, 5, 5, 5);
        gbc.anchor = GridBagConstraints.WEST;
        return gbc;
    }

    private boolean validateInput() {
        if (nameField.getText().trim().isEmpty()) {
            JOptionPane.showMessageDialog(this, "姓名不能为空!", "输入错误", JOptionPane.ERROR_MESSAGE);
            return false;
        }
        if (sexField.getText().trim().isEmpty()) {
            JOptionPane.showMessageDialog(this, "性别不能为空!", "输入错误", JOptionPane.ERROR_MESSAGE);
            return false;
        }
        if (ageField.getText().trim().isEmpty()) {
            JOptionPane.showMessageDialog(this, "年龄不能为空!", "输入错误", JOptionPane.ERROR_MESSAGE);
            return false;
        }
        if (departmentField.getText().trim().isEmpty()) {
            JOptionPane.showMessageDialog(this, "部门不能为空!", "输入错误", JOptionPane.ERROR_MESSAGE);
            return false;
        }
        if (positionField.getText().trim().isEmpty()) {
            JOptionPane.showMessageDialog(this, "职位不能为空!", "输入错误", JOptionPane.ERROR_MESSAGE);
            return false;
        }
        if (phoneField.getText().trim().isEmpty()) {
            JOptionPane.showMessageDialog(this, "电话不能为空!", "输入错误", JOptionPane.ERROR_MESSAGE);
            return false;
        }
        if (dateField.getText().trim().isEmpty()) {
            JOptionPane.showMessageDialog(this, "入职日期不能为空!", "输入错误", JOptionPane.ERROR_MESSAGE);
            return false;
        }
        if (salaryField.getText().trim().isEmpty()) {
            JOptionPane.showMessageDialog(this, "工资不能为空!", "输入错误", JOptionPane.ERROR_MESSAGE);
            return false;
        }
        // 可以添加更多验证,如电话格式
        return true;
    }

    private void setupEvents() {
        // 按 ESC 关闭对话框
        getRootPane().registerKeyboardAction(e -> dispose(),
                KeyStroke.getKeyStroke("ESCAPE"), JComponent.WHEN_IN_FOCUSED_WINDOW);
    }

    public Employee getEmployee() {
        return employee;
    }

    public boolean isConfirmed() {
        return confirmed;
    }
}

/**
 * 员工信息管理主界面
 */
public class EmployeeManagementGUI extends JFrame {
    private JTextField searchField;// 搜索框
    private JButton searchButton;
    private JButton addButton;
    private JTable employeeTable;// 员工信息表格
    private DefaultTableModel tableModel;// 表格数据模型
    private List<Employee> allEmployees;
    private List<Employee> displayedEmployees; // 当前显示的数据(搜索后可能不同)

    public EmployeeManagementGUI() {
        initializeData(); // 初始化20条员工数据
        initializeComponents();
        setupLayout();
        setupEvents();
        refreshTable(); // 初始显示所有数据
        setTitle("员工信息管理系统");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(800, 600);
        setLocationRelativeTo(null); // 居中显示

        setVisible(true);
    }

    /**
     * 初始化20条员工数据
     */
    private void initializeData() {
        allEmployees = new ArrayList<>();
        for (int i = 1; i <= 20; i++) {
            allEmployees.add(new Employee(
                    i,
                    "员工" + i,
                    "男",
                    "18",
                    getRandomDepartment(),
                    getRandomPosition(),
                    "138001380" + (i % 10) + (20 % i),
                    new Date().toLocaleString(),
                    "5000"
            ));
        }
        displayedEmployees = new ArrayList<>(allEmployees);
    }

    private String getRandomDepartment() {
        String[] deps = {"技术部", "销售部", "人事部", "财务部", "市场部"};
        return deps[(int) (Math.random() * deps.length)];
    }

    private String getRandomPosition() {
        String[] pos = {"工程师", "经理", "主管", "专员", "实习生"};
        return pos[(int) (Math.random() * pos.length)];
    }

    private void initializeComponents() {
        // 搜索相关组件
        searchField = new JTextField(15);
        searchButton = new JButton("搜索");
        addButton = new JButton("添加员工");

        // 表格
        String[] columnNames = {"ID", "姓名","性别","年龄", "部门", "职位", "电话","入职日期","薪水"};
        tableModel = new DefaultTableModel(columnNames, 0) {
            @Override
            public boolean isCellEditable(int row, int column) {
                return false; // 禁止直接编辑表格
            }
        };
        employeeTable = new JTable(tableModel);

        // 设置表格属性
        employeeTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        employeeTable.setFillsViewportHeight(true);
        employeeTable.setRowHeight(25);

        // 创建右键菜单
        JPopupMenu popupMenu = new JPopupMenu();
        JMenuItem updateItem = new JMenuItem("修改");
        JMenuItem deleteItem = new JMenuItem("删除");

        popupMenu.add(updateItem);
        popupMenu.add(deleteItem);

        // 右键菜单事件
        employeeTable.addMouseListener(new MouseAdapter() {
            @Override
            public void mousePressed(MouseEvent e) {
                if (SwingUtilities.isRightMouseButton(e)) {
                    int row = employeeTable.rowAtPoint(e.getPoint());
                    if (row >= 0 && row < employeeTable.getRowCount()) {
                        employeeTable.setRowSelectionInterval(row, row);
                        popupMenu.show(employeeTable, e.getX(), e.getY());
                    }
                }
            }
        });

        // 修改菜单项点击事件
        updateItem.addActionListener(e -> {
            int selectedRow = employeeTable.getSelectedRow();
            if (selectedRow >= 0) {
                int modelIndex = employeeTable.convertRowIndexToModel(selectedRow);
                Employee selectedEmp = displayedEmployees.get(modelIndex);
                EmployeeDialog dialog = new EmployeeDialog(EmployeeManagementGUI.this, "修改员工", selectedEmp);
                dialog.setVisible(true);
                if (dialog.isConfirmed()) {
                    // 更新数据源
                    int originalIndex = allEmployees.indexOf(selectedEmp);
                    if (originalIndex >= 0) {
                        allEmployees.set(originalIndex, dialog.getEmployee());
                    }
                    // 如果是搜索状态,也更新显示列表
                    displayedEmployees.set(modelIndex, dialog.getEmployee());
                    refreshTable();
                }
            }
        });

        // 删除菜单项点击事件
        deleteItem.addActionListener(e -> {
            int selectedRow = employeeTable.getSelectedRow();
            if (selectedRow >= 0) {
                int modelIndex = employeeTable.convertRowIndexToModel(selectedRow);
                Employee selectedEmp = displayedEmployees.get(modelIndex);
                int result = JOptionPane.showConfirmDialog(EmployeeManagementGUI.this,
                        "确定要删除员工 '" + selectedEmp.getName() + "' 吗?",
                        "确认删除", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE);
                if (result == JOptionPane.YES_OPTION) {
                    allEmployees.remove(selectedEmp);
                    displayedEmployees.remove(modelIndex);
                    refreshTable();
                    JOptionPane.showMessageDialog(EmployeeManagementGUI.this, "删除成功!");
                }
            }
        });
    }

    private void setupLayout() {
        setLayout(new BorderLayout());

        // 第一行:搜索框、按钮(居中)
        JPanel topPanel = new JPanel(new FlowLayout(FlowLayout.CENTER, 10, 10));
        topPanel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
        topPanel.add(new JLabel("搜索:"));
        topPanel.add(searchField);
        topPanel.add(searchButton);
        topPanel.add(addButton);
        add(topPanel, BorderLayout.NORTH);

        // 中间:表格
        JScrollPane scrollPane = new JScrollPane(employeeTable);
        scrollPane.setBorder(BorderFactory.createEmptyBorder(0, 10, 10, 10));
        add(scrollPane, BorderLayout.CENTER);
    }

    private void setupEvents() {
        // 搜索按钮事件
        searchButton.addActionListener(e -> performSearch());

        // 回车触发搜索
        searchField.addActionListener(e -> performSearch());

        // 添加按钮事件
        addButton.addActionListener(e -> {
            EmployeeDialog dialog = new EmployeeDialog(this, "添加员工", null);
            dialog.setVisible(true);
            if (dialog.isConfirmed()) {
                Employee newEmp = dialog.getEmployee();
                newEmp.setId(generateNewId());
                allEmployees.add(newEmp);
                displayedEmployees.add(newEmp); // 如果当前是全部显示,则添加
                refreshTable();
                JOptionPane.showMessageDialog(this, "添加成功!");
            }
        });
    }

    private void performSearch() {
        String keyword = searchField.getText().trim().toLowerCase();
        if (keyword.isEmpty()) {
            displayedEmployees = new ArrayList<>(allEmployees);
        } else {
            displayedEmployees.clear();
            for (Employee emp : allEmployees) {
                if (emp.getName().toLowerCase().contains(keyword) ||
                    emp.getDepartment().toLowerCase().contains(keyword) ||
                    emp.getPosition().toLowerCase().contains(keyword) ||
                    emp.getPhone().contains(keyword)) {
                    displayedEmployees.add(emp);
                }
            }
        }
        refreshTable();
    }

    private int generateNewId() {
        return allEmployees.stream().mapToInt(Employee::getId).max().orElse(0) + 1;
    }

    private void refreshTable() {
        tableModel.setRowCount(0); // 清空表格
        for (Employee emp : displayedEmployees) {
            Object[] row = {emp.getId(), emp.getName(), emp.getSex(), emp.getAge(), emp.getDepartment(), emp.getPosition(), emp.getPhone()
                            , emp.getDate(), emp.getSalary()};
            tableModel.addRow(row);
        }
    }

    public static void main(String[] args) {
        new EmployeeManagementGUI().setVisible(true);
    }
}

3、准备系统角色类

  • 用户类,员工信息类
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

//用户信息包含用户名、密码、登录名
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
    private String username;//用户名
    private String password;//密码
    private String loginname;//登录名
}
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

//员工信息:"ID", "姓名","性别","年龄", "部门", "职位", "电话","入职日期","薪水"
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Employee {
    private int id;
    private String name;
    private String sex;
    private String age;
    private String department;
    private String position;
    private String phone;
    private String date;
    private String salary;
}

4、开发登录功能

系统中需要存在用户信息
可直接准备一些用户对象,作为正确的用户信息
准备一个集合容器,存储系统中全部的用户信息,只要一个

//定义一个静态集合存储用户信息
    private static ArrayList<User> allUser = new ArrayList<>();

    //初始化几个测试的用户对象信息,作为登录用
    static {
        allUser.add(new User("管理员", "admin", "admin"));
        allUser.add(new User("张三", "123", "张三"));
        allUser.add(new User("李四", "123", "李四"));
    }

开发步骤:

  1. 给登录按钮绑定一个点击事件监听器
  2. 一旦点击登录按钮,拿到输入框输入的用户名和密码
  3. 去集合中比对用户对象,若认证通过,跳转到信息管理界面。登录失败,弹出提示
private void performLogin() {
        String username = loginNameField.getText().trim();
        String password = new String(passwordField.getPassword());
        // 忽略提示文本
        if ("用户名".equals(username)) username = "";
        if ("password".equals(password)) password = "";

        if (username.isEmpty() || password.isEmpty()) {
            JOptionPane.showMessageDialog(this, "用户名和密码不能为空!", "提示", JOptionPane.WARNING_MESSAGE);
            return;
        }

        // 根据用户名称查询用户对象返回,使用for循环根据索引遍历
        boolean flag = false;
        for(int i = 0; i < allUser.size(); i++){
            User user = allUser.get(i);
            if(username.equals(user.getUsername()) && password.equals(user.getPassword())){
                flag = true;
                JOptionPane.showMessageDialog(this, "登录成功!", "提示", JOptionPane.INFORMATION_MESSAGE);
                this.dispose();//关闭当前登录窗口
                new EmployeeManagementGUI();//启动员工管理系统
            }
        }
        if(!flag){
            JOptionPane.showMessageDialog(this, "用户名或密码错误!", "错误", JOptionPane.ERROR_MESSAGE);
            passwordField.setText(""); // 清空密码框
        }
    }

这个是令ModernLoginFrame实现ActionListener接口,然后重写actionPerformed方法

@Override
    public void actionPerformed(ActionEvent e) {
        //可能是登录按钮点过来的,也可能是注册按钮点过来的
        //判断是哪个点进来的
        JButton btn = (JButton) e.getSource();
        if (btn == loginButton) {
            //System.out.println("点击了登录按钮");
            //独立功能独立完成方法
            performLogin();
        }
        else{
            System.out.println("点击了注册按钮");
        }
    }

5、完成信息管理界面的开发

1、登录成功后,把登陆成功的用户名传给信息管理界面
2、添加员工信息

  • 准备一个静态集合,用于存储系统中全部员工信息
  • 给添加按钮绑定点击事件
  • 点击添加按钮后,弹出一个添加员工信息的输入框
private void setupLayout() {
        setLayout(new GridBagLayout());
        GridBagConstraints gbc = new GridBagConstraints();
        gbc.insets = new Insets(8, 8, 8, 8);
        gbc.anchor = GridBagConstraints.WEST;

        // 标签和输入框
        add(new JLabel("姓名:"), createGbc(0, 0));
        add(nameField, createGbc(1, 0));
        add(new JLabel("性别:"), createGbc(0, 1));
        add(sexField, createGbc(1, 1));
        add(new JLabel("年龄:"), createGbc(0, 2));
        add(ageField, createGbc(1, 2));
        add(new JLabel("部门:"), createGbc(0, 3));
        add(departmentField, createGbc(1, 3));
        add(new JLabel("职位:"), createGbc(0, 4));
        add(positionField, createGbc(1, 4));
        add(new JLabel("电话:"), createGbc(0, 5));
        add(phoneField, createGbc(1, 5));
        add(new JLabel("入职日期:"), createGbc(0, 6));
        add(dateField, createGbc(1, 6));
        add(new JLabel("工资:"), createGbc(0, 7));
        add(salaryField, createGbc(1, 7));

        // 按钮
        JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT));
        JButton okButton = new JButton("确定");
        JButton cancelButton = new JButton("取消");

        okButton.addActionListener(e -> {
            if (validateInput()) {
                confirmed = true;
                if (employee == null) {
                    employee = new Employee(-1, nameField.getText(),sexField.getText(),ageField.getText(), departmentField.getText(),
                            positionField.getText(), phoneField.getText(), dateField.getText(), salaryField.getText());
                } else {
                    employee.setName(nameField.getText());
                    employee.setSex(sexField.getText());
                    employee.setAge(ageField.getText());
                    employee.setDepartment(departmentField.getText());
                    employee.setPosition(positionField.getText());
                    employee.setPhone(phoneField.getText());
                    employee.setDate(dateField.getText());
                    employee.setSalary(salaryField.getText());
                }
                dispose();
            }
        });

        cancelButton.addActionListener(e -> dispose());

        buttonPanel.add(okButton);
        buttonPanel.add(cancelButton);
        gbc.gridx = 0;
        gbc.gridy = 9;
        gbc.gridwidth = 2;
        gbc.fill = GridBagConstraints.NONE;
        add(buttonPanel, gbc);
    }

    private GridBagConstraints createGbc(int x, int y) {
        GridBagConstraints gbc = new GridBagConstraints();
        gbc.gridx = x;
        gbc.gridy = y;
        gbc.insets = new Insets(8, 8, 8, 8);
        gbc.anchor = GridBagConstraints.WEST;
        return gbc;
    }
  • 把员工信息封装成员工对象,存到系统中,然后刷新表格,展示最新添加的数据
addButton.addActionListener(e -> {
            EmployeeDialog dialog = new EmployeeDialog(this, "添加员工", null);
            dialog.setVisible(true);
            if (dialog.isConfirmed()) {
                Employee newEmp = dialog.getEmployee();
                newEmp.setId(generateNewId());
                allEmployees.add(newEmp);
                displayedEmployees.add(newEmp); // 如果当前是全部显示,则添加
                refreshTable();
                JOptionPane.showMessageDialog(this, "添加成功!");
            }
        });

6、删除某行数据

在这里插入图片描述
第一步:拿到当前右键要删除的这一行数据的id值
第二步:用id去集合中删除员工对象,把数据抹掉
第三步:从界面上抹掉这行数据(刷新)

// 删除菜单项点击事件
        deleteItem.addActionListener(e -> {
            int selectedRow = employeeTable.getSelectedRow();// 获取选中的行索引
            if (selectedRow >= 0) {
                int modelIndex = employeeTable.convertRowIndexToModel(selectedRow);
                Employee selectedEmp = displayedEmployees.get(modelIndex);
                int result = JOptionPane.showConfirmDialog(EmployeeManagementGUI.this,
                        "确定要删除员工 '" + selectedEmp.getName() + "' 吗?",
                        "确认删除", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE);
                if (result == JOptionPane.YES_OPTION) {
                    allEmployees.remove(selectedEmp);
                    displayedEmployees.remove(modelIndex);
                    refreshTable();
                    JOptionPane.showMessageDialog(EmployeeManagementGUI.this, "删除成功!");
                }
            }
        });
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐