【黑马程序员JAVA笔记+完整代码】项目实战1 结合GUI编程实现一个黑马人事管理系统

对应网课为:【黑马程序员Java+AI智能辅助编程全套视频教程,java零基础入门到大牛一套通关】
项目代码地址如下(如果对你有帮助请给我一个免费的star):
gitcode链接(无需梯子)https://gitcode.com/CherryTaylor/AboutJava_first
github链接https://github.com/CarrieChai/AboutJava_first

标注“额外”的内容网课中没讲,可按需学习
在这里插入图片描述

  1. 创建一个模块做这个项目 itheima-employee-sys
  2. 分析项目的业务需求
    1. 提供一个登录和注册用户的界面
    2. 提供一个人事信息的管理界面:展示全部员工信息,提供一个根据名称查询某个员工信息展示 ,添加员工信息,删除员工信息,修改员工信息
    3. 分析项目的角色:
      1. 登录用户:登录名称 密码
      2. 员工信息:ID 姓名 性别 年龄 电话 职位 入职时间 薪水 部门信息
    4. 分析系统的界面:
      1. 登录界面类:创建登录界面
      2. 信息管理界面类:创建管理界面
  3. 结合AI开发
    1.生成一个登录界面
    2. 生成一个信息管理界面

----正式开发----

1. 拿到登录界面的程序,进行修改

package com.itheima.ui;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class LoginUI extends JFrame implements ActionListener{
    private JTextField usernameField; // 用户名输入框
    private JPasswordField passwordField; // 密码输入框
    private JButton loginButton; // 登录按钮
    private JButton registerButton; // 注册按钮

    public LoginUI() {
        super("登录界面");
        this.setSize(400, 250); // 调整窗口大小
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setLayout(new GridBagLayout()); // 使用GridBagLayout布局
        createAndShowGui();

    }
    public void createAndShowGui() {
        // 创建主窗口

        GridBagConstraints gbc = new GridBagConstraints();
        gbc.insets = new Insets(5, 10, 5, 10); // 设置组件之间的间距

        // 用户名标签
        JLabel usernameLabel = new JLabel("用户名:");
        gbc.gridx = 0; // 列索引
        gbc.gridy = 0; // 行索引
        gbc.anchor = GridBagConstraints.EAST; // 对齐方式:右对齐
        this.add(usernameLabel, gbc);

        // 用户名输入框
        usernameField = new JTextField(15); // 设置宽度为15列
        gbc.gridx = 1;
        gbc.gridy = 0;
        gbc.anchor = GridBagConstraints.WEST; // 对齐方式:左对齐
        this.add(usernameField, gbc);

        // 密码标签
        JLabel passwordLabel = new JLabel("密码:");
        gbc.gridx = 0;
        gbc.gridy = 1;
        gbc.anchor = GridBagConstraints.EAST;
        this.add(passwordLabel, gbc);

        // 密码输入框
        passwordField = new JPasswordField(15); // 设置宽度为15列
        gbc.gridx = 1;
        gbc.gridy = 1;
        gbc.anchor = GridBagConstraints.WEST;
        this.add(passwordField, gbc);

        // 登录按钮
        loginButton = new JButton("登录");
        gbc.gridx = 0;
        gbc.gridy = 2;
        gbc.gridwidth = 1; // 占据一列
        gbc.anchor = GridBagConstraints.CENTER; // 居中对齐
        this.add(loginButton, gbc);

        // 注册按钮
        registerButton = new JButton("注册");
        gbc.gridx = 1;
        gbc.gridy = 2;
        gbc.gridwidth = 1; // 占据一列
        gbc.anchor = GridBagConstraints.CENTER; // 居中对齐
        this.add(registerButton, gbc);

        // 显示窗口
        this.setVisible(true);
    }


    @Override
    public void actionPerformed(ActionEvent e) {
        JOptionPane.showMessageDialog(this, "正在跳转到页面...", "提示", JOptionPane.INFORMATION_MESSAGE);
        // 这里可以添加跳转到注册页面的逻辑
    }
}

定义了一个APP启动类

package com.itheima.ui;

public class App {
    public static void main(String[] args) {
        new LoginUI();
    }
}

2. 拿到管理信息的界面

提供一个人事信息管理界面:展示全部员工信息,提供一个根据名称查询某个员工信息展示,对员工信息进行增删改
AI生成的源码

package com.itheima.ui;

import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

public class EmployeeManagementUI {
    private DefaultTableModel tableModel;
    private JTable employeeTable;

    public static void main(String[] args) {
        SwingUtilities.invokeLater(EmployeeManagementUI::new);
    }

    public EmployeeManagementUI() {
        // 创建主窗口
        JFrame frame = new JFrame("员工信息管理系统");
        frame.setSize(800, 600);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLayout(new BorderLayout());

        // 初始化表格模型和表格
        String[] columnNames = {"ID", "姓名", "职位", "部门"};
        Object[][] data = new Object[20][4];
        for (int i = 0; i < 20; i++) {
            data[i][0] = i + 1;
            data[i][1] = "员工" + (i + 1);
            data[i][2] = "职位" + (i + 1);
            data[i][3] = "部门" + (i + 1);
        }
        tableModel = new DefaultTableModel(data, columnNames) {
            @Override
            public boolean isCellEditable(int row, int column) {
                return false; // 禁用编辑
            }
        };
        employeeTable = new JTable(tableModel);

        // 设置表格列宽
        employeeTable.getColumnModel().getColumn(0).setPreferredWidth(50);  // ID 列
        employeeTable.getColumnModel().getColumn(1).setPreferredWidth(150); // 姓名 列
        employeeTable.getColumnModel().getColumn(2).setPreferredWidth(150); // 职位 列
        employeeTable.getColumnModel().getColumn(3).setPreferredWidth(200); // 部门 列

        // 添加滚动面板包裹表格
        JScrollPane scrollPane = new JScrollPane(employeeTable);
        frame.add(scrollPane, BorderLayout.CENTER);

        // 第一行:输入框、搜索按钮、添加按钮
        JPanel topPanel = new JPanel();
        JTextField searchField = new JTextField(20);
        JButton searchButton = new JButton("搜索");
        JButton addButton = new JButton("添加");

        topPanel.add(searchField);
        topPanel.add(searchButton);
        topPanel.add(addButton);
        frame.add(topPanel, BorderLayout.NORTH);

        // 右键菜单(修改和删除)
        JPopupMenu popupMenu = new JPopupMenu();
        JMenuItem editMenuItem = new JMenuItem("修改");
        JMenuItem deleteMenuItem = new JMenuItem("删除");
        popupMenu.add(editMenuItem);
        popupMenu.add(deleteMenuItem);

        // 绑定右键菜单到表格
        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());
                    }
                }
            }
        });

        // 修改菜单项事件处理
        editMenuItem.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                int selectedRow = employeeTable.getSelectedRow();
                if (selectedRow >= 0) {
                    String id = tableModel.getValueAt(selectedRow, 0).toString(); // 获取当前行的 ID
                    String name = JOptionPane.showInputDialog(frame, "修改员工姓名:", tableModel.getValueAt(selectedRow, 1));
                    String position = JOptionPane.showInputDialog(frame, "修改员工职位:", tableModel.getValueAt(selectedRow, 2));
                    String department = JOptionPane.showInputDialog(frame, "修改员工部门:", tableModel.getValueAt(selectedRow, 3));

                    if (name != null && position != null && department != null) {
                        tableModel.setValueAt(name, selectedRow, 1);
                        tableModel.setValueAt(position, selectedRow, 2);
                        tableModel.setValueAt(department, selectedRow, 3);
                        JOptionPane.showMessageDialog(frame, "修改成功!ID: " + id, "提示", JOptionPane.INFORMATION_MESSAGE);
                    }
                }
            }
        });

        // 删除菜单项事件处理
        deleteMenuItem.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                int selectedRow = employeeTable.getSelectedRow();
                if (selectedRow >= 0) {
                    String id = tableModel.getValueAt(selectedRow, 0).toString(); // 获取当前行的 ID
                    int confirm = JOptionPane.showConfirmDialog(frame, "确定要删除该员工信息吗?\nID: " + id, "确认删除", JOptionPane.YES_NO_OPTION);
                    if (confirm == JOptionPane.YES_OPTION) {
                        tableModel.removeRow(selectedRow);
                        JOptionPane.showMessageDialog(frame, "删除成功!ID: " + id, "提示", JOptionPane.INFORMATION_MESSAGE);
                    }
                }
            }
        });

        // 搜索按钮事件处理
        searchButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                String keyword = searchField.getText().trim();
                if (!keyword.isEmpty()) {
                    boolean found = false;
                    for (int i = 0; i < tableModel.getRowCount(); i++) {
                        String name = (String) tableModel.getValueAt(i, 1);
                        if (name.contains(keyword)) {
                            employeeTable.setRowSelectionInterval(i, i);
                            employeeTable.scrollRectToVisible(employeeTable.getCellRect(i, 0, true));
                            found = true;
                            break;
                        }
                    }
                    if (!found) {
                        JOptionPane.showMessageDialog(frame, "未找到匹配的员工!", "提示", JOptionPane.INFORMATION_MESSAGE);
                    }
                }
            }
        });

        // 添加按钮事件处理
        addButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                String id = String.valueOf(tableModel.getRowCount() + 1);
                String name = JOptionPane.showInputDialog(frame, "请输入员工姓名:");
                String position = JOptionPane.showInputDialog(frame, "请输入员工职位:");
                String department = JOptionPane.showInputDialog(frame, "请输入员工部门:");

                if (name != null && position != null && department != null) {
                    tableModel.addRow(new Object[]{id, name, position, department});
                }
            }
        });

        // 显示窗口
        frame.setVisible(true);
    }
}

改造成自定义的信息管理界面

package com.itheima.ui;

import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.Date;

public class EmployeeManagementUI extends JFrame{
    private JFrame frame;
    private DefaultTableModel tableModel;  // 表格模型 封装表格数据
    private JTable employeeTable;  // 表格

    public EmployeeManagementUI() {
        frame = this;
        initialize();
    }


    public void initialize() {
        // 创建主窗口
        this.setTitle("员工信息管理系统");
        this.setSize(800, 600);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setLayout(new BorderLayout());

        // 初始化表格模型和表格
        String[] columnNames = {"ID", "姓名","性别","年龄","电话", "职位","入职日期","薪水", "部门"};
        Object[][] data = new Object[20][9];
        for (int i = 0; i < 20; i++) {
            data[i][0] = i + 1;
            data[i][1] = "员工" + (i + 1);
            data[i][2] = "女";
            data[i][3] = "18";
            data[i][4] = "13939875483";
            data[i][5] = "职位" + (i + 1);
            data[i][6] = new Date().toLocaleString();
            data[i][7] = 30000 ;
            data[i][8] = "部门" + (i + 1);
        }
        tableModel = new DefaultTableModel(data, columnNames) {
            @Override
            public boolean isCellEditable(int row, int column) {
                return false; // 禁用编辑
            }
        };
        employeeTable = new JTable(tableModel);

        // 设置表格列宽
        employeeTable.getColumnModel().getColumn(0).setPreferredWidth(50);  // ID 列
        employeeTable.getColumnModel().getColumn(1).setPreferredWidth(150); // 姓名 列
        employeeTable.getColumnModel().getColumn(2).setPreferredWidth(50); // 性别
        employeeTable.getColumnModel().getColumn(3).setPreferredWidth(50); // 年龄
        employeeTable.getColumnModel().getColumn(4).setPreferredWidth(200); // 电话
        employeeTable.getColumnModel().getColumn(5).setPreferredWidth(200); // 职位
        employeeTable.getColumnModel().getColumn(6).setPreferredWidth(250); // 入职日期
        employeeTable.getColumnModel().getColumn(7).setPreferredWidth(200); // 薪水
        employeeTable.getColumnModel().getColumn(8).setPreferredWidth(200); // 部门

        // 设置表格行高为当前的两倍
        employeeTable.setRowHeight(30);

        // 添加滚动面板包裹表格
        JScrollPane scrollPane = new JScrollPane(employeeTable);
        this.add(scrollPane, BorderLayout.CENTER);

        // 第一行:输入框、搜索按钮、添加按钮
        JPanel topPanel = new JPanel();
        JTextField searchField = new JTextField(20);
        JButton searchButton = new JButton("搜索");
        JButton addButton = new JButton("添加");

        topPanel.add(searchField);
        topPanel.add(searchButton);
        topPanel.add(addButton);
        this.add(topPanel, BorderLayout.NORTH);

        // 右键菜单(修改和删除)
        JPopupMenu popupMenu = new JPopupMenu();
        JMenuItem editMenuItem = new JMenuItem("修改");
        JMenuItem deleteMenuItem = new JMenuItem("删除");
        popupMenu.add(editMenuItem);
        popupMenu.add(deleteMenuItem);

        // 绑定右键菜单到表格
        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());
                    }
                }
            }
        });

        // 修改菜单项事件处理
        editMenuItem.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                int selectedRow = employeeTable.getSelectedRow();
                if (selectedRow >= 0) {
                    String id = tableModel.getValueAt(selectedRow, 0).toString(); // 获取当前行的 ID
                    String name = JOptionPane.showInputDialog(frame, "修改员工姓名:", tableModel.getValueAt(selectedRow, 1));
                    String position = JOptionPane.showInputDialog(frame, "修改员工职位:", tableModel.getValueAt(selectedRow, 2));
                    String department = JOptionPane.showInputDialog(frame, "修改员工部门:", tableModel.getValueAt(selectedRow, 3));

                    if (name != null && position != null && department != null) {
                        tableModel.setValueAt(name, selectedRow, 1);
                        tableModel.setValueAt(position, selectedRow, 2);
                        tableModel.setValueAt(department, selectedRow, 3);
                        JOptionPane.showMessageDialog(frame, "修改成功!ID: " + id, "提示", JOptionPane.INFORMATION_MESSAGE);
                    }
                }
            }
        });

        // 删除菜单项事件处理
        deleteMenuItem.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                int selectedRow = employeeTable.getSelectedRow();
                if (selectedRow >= 0) {
                    String id = tableModel.getValueAt(selectedRow, 0).toString(); // 获取当前行的 ID
                    int confirm = JOptionPane.showConfirmDialog(frame, "确定要删除该员工信息吗?\nID: " + id, "确认删除", JOptionPane.YES_NO_OPTION);
                    if (confirm == JOptionPane.YES_OPTION) {
                        tableModel.removeRow(selectedRow);
                        JOptionPane.showMessageDialog(frame, "删除成功!ID: " + id, "提示", JOptionPane.INFORMATION_MESSAGE);
                    }
                }
            }
        });

        // 搜索按钮事件处理
        searchButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                String keyword = searchField.getText().trim();
                if (!keyword.isEmpty()) {
                    boolean found = false;
                    for (int i = 0; i < tableModel.getRowCount(); i++) {
                        String name = (String) tableModel.getValueAt(i, 1);
                        if (name.contains(keyword)) {
                            employeeTable.setRowSelectionInterval(i, i);
                            employeeTable.scrollRectToVisible(employeeTable.getCellRect(i, 0, true));
                            found = true;
                            break;
                        }
                    }
                    if (!found) {
                        JOptionPane.showMessageDialog(frame, "未找到匹配的员工!", "提示", JOptionPane.INFORMATION_MESSAGE);
                    }
                }
            }
        });

        // 添加按钮事件处理
        addButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                String id = String.valueOf(tableModel.getRowCount() + 1);
                String name = JOptionPane.showInputDialog(frame, "请输入员工姓名:");
                String position = JOptionPane.showInputDialog(frame, "请输入员工职位:");
                String department = JOptionPane.showInputDialog(frame, "请输入员工部门:");

                if (name != null && position != null && department != null) {
                    tableModel.addRow(new Object[]{id, name, position, department});
                }
            }
        });

        // 显示窗口
        frame.setVisible(true);
    }
}

3. 准备系统的角色类

- 用户类、员工信息类

用户类

package com.itheima.bean;


import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

// 用户信息包含用户名 密码 登录名
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
    private String username; // 用户名
    private String password; // 密码
    private String loginName; // 登录名

}

员工信息类

package com.itheima.bean;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

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

}

4. 开发登录功能

系统中需要存在用户信息,可以先开发注册,注册一些用户信息
可以在系统中直接准备一些用户对象,作为正确的用户信息
准备一个集合容器,存储全部的用户对象信息
(放在LoginUI中)

//定义一个静态的集合,存储系统中全部的用户对象信息
public static ArrayList<User> allUsers = new ArrayList<>();

// 初始化几个测试的用户对象信息用于登录
static {
    allUsers.add(new User("超级管理员", "123456", "admin"));
    allUsers.add(new User("张三", "123456", "sansan"));
    allUsers.add(new User("李四", "123456", "lisi"));
}

开发步骤:

  1. 登录按钮绑定一个点击事件监听器
  2. 一旦点击登录按钮,拿到输入框输入的用户名和密码
  3. 去集合中看是否存在这个用户对象,如果认证通过,跳转到信息管理界面,登录失败,弹出提示。
package com.itheima.ui;

import com.itheima.bean.User;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;


public class LoginUI extends JFrame implements ActionListener{
    private JTextField loginNameField; // 用户名输入框
    private JPasswordField passwordField; // 密码输入框
    private JButton loginButton; // 登录按钮
    private JButton registerButton; // 注册按钮
    //定义一个静态的集合,存储系统中全部的用户对象信息
    public static ArrayList<User> allUsers = new ArrayList<>();

    // 初始化几个测试的用户对象信息用于登录
    static {
        allUsers.add(new User("超级管理员", "123456", "admin"));
        allUsers.add(new User("张三", "123456", "sansan"));
        allUsers.add(new User("李四", "123456", "lisi"));
    }


    public LoginUI() {
        super("登录界面");
        this.setSize(400, 250); // 调整窗口大小
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setLayout(new GridBagLayout()); // 使用GridBagLayout布局
        createAndShowGui();

    }
    public void createAndShowGui() {
        // 创建主窗口

        GridBagConstraints gbc = new GridBagConstraints();
        gbc.insets = new Insets(5, 10, 5, 10); // 设置组件之间的间距

        // 用户名标签
        JLabel usernameLabel = new JLabel("用户名:");
        gbc.gridx = 0; // 列索引
        gbc.gridy = 0; // 行索引
        gbc.anchor = GridBagConstraints.EAST; // 对齐方式:右对齐
        this.add(usernameLabel, gbc);

        // 用户名输入框
        loginNameField = new JTextField(15); // 设置宽度为15列
        gbc.gridx = 1;
        gbc.gridy = 0;
        gbc.anchor = GridBagConstraints.WEST; // 对齐方式:左对齐
        this.add(loginNameField, gbc);

        // 密码标签
        JLabel passwordLabel = new JLabel("密码:");
        gbc.gridx = 0;
        gbc.gridy = 1;
        gbc.anchor = GridBagConstraints.EAST;
        this.add(passwordLabel, gbc);

        // 密码输入框
        passwordField = new JPasswordField(15); // 设置宽度为15列
        gbc.gridx = 1;
        gbc.gridy = 1;
        gbc.anchor = GridBagConstraints.WEST;
        this.add(passwordField, gbc);

        // 登录按钮
        loginButton = new JButton("登录");
        gbc.gridx = 0;
        gbc.gridy = 2;
        gbc.gridwidth = 1; // 占据一列
        gbc.anchor = GridBagConstraints.CENTER; // 居中对齐
        this.add(loginButton, gbc);
        loginButton.addActionListener(this);

        // 注册按钮
        registerButton = new JButton("注册");
        gbc.gridx = 1;
        gbc.gridy = 2;
        gbc.gridwidth = 1; // 占据一列
        gbc.anchor = GridBagConstraints.CENTER; // 居中对齐
        this.add(registerButton, gbc);
        registerButton.addActionListener(this);

        // 显示窗口
        this.setVisible(true);
    }


    @Override
    public void actionPerformed(ActionEvent e) {
        // 既可能是登陆按钮点击过来的,也可能是注册按钮点击过来的
        // 判断到底是登录还是注册按钮点击的
        JButton btn = (JButton)e.getSource();
        if (btn == loginButton) {
            // 独立功能,独立成方法
            login();

        }else {
            System.out.println("注册按钮点击了");
        }
    }

    private void login() {
        // 1 获取用户输入的用户名和密码
        String loginName = loginNameField.getText();
        String password = new String(passwordField.getPassword());
        // 2 遍历全部的用户对象信息,判断用户输入的用户名和密码是否匹配,匹配成功则登录成果
        // 3 根据登录名称去查询用户对象返回,查询到用户对象,说明登录名正确
        User user = getUserByLoginName(loginName);
        if (user != null) {
            // 4 判断用户输入的密码是否正确
            if (user.getPassword().equals(password)) {
                // 登录成功
                System.out.println("登录成功");
                // 登录成功后,跳转到员工管理界面
                new EmployeeManagementUI();
                this.dispose(); // 关闭当前登录窗口
            }else {
                // 密码错误
                JOptionPane.showMessageDialog(this,"密码错误");
            }
        }else {
            // 登录名不存在
            JOptionPane.showMessageDialog(this,"登录名不存在");
        }
    }

    // 根据登录名称去查询用户对象返回,查询到用户对象,说明登录名正确,使用for循环根据索引遍历
    private User getUserByLoginName(String loginName) {
        for (int i = 0; i < allUsers.size(); i++) {
            User user = allUsers.get(i);
            if (user.getLoginName().equals(loginName)) {
                return user;
            }
        }
        return null; // 未查询到用户对象,说明登录名错误
    }

}

注册功能(额外)

  1. 注册按钮绑定一个事件监听器,一旦点击就打开注册界面
  2. 注册界面要求用户输入用户名、密码、登录名
  3. 得到的用户名、密码和登录名封装成User对象添加到allUsers集合中
  4. 返回登录界面

5. 完成信息管理界面的功能开发(核心功能)

  • 登陆成功后,应该把用户名显示在信息管理系统界面上

- 添加员工信息的功能

  1. 准备一个静态的集合,用于存储系统中全部的员工信息
  2. 给添加按钮绑定点击事件
  3. 点击添加按钮后,弹出一个添加员工信息的输入框
  4. 把员工信息封装成一个员工对象,存入系统,然后刷新表格,展示最新添加的数据
    • 存入系统实现是靠点击添加按钮是把EmployeeManagementUI 对象交给AddEmployeeUI对象,然后把封装好的员工对象通过调用EmployeeManagementUI中的方法addEmployee()添加到全体员工的集合和展示在表格中
package com.itheima.ui;

import com.itheima.bean.Employee;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

// 添加员工信息界面
public class AddEmployeeUI extends JFrame {
    private EmployeeManagementUI employeeManagementUI;
    // 初始化这个界面:提供所有输入框信息
    // 员工信息包括"ID", "姓名","性别","年龄","电话", "职位","入职日期","薪水", "部门"
    // 提供一个添加按钮,点击添加按钮,将输入框中的信息添加到数据库中
    // 提供一个取消按钮,点击取消按钮,关闭当前界面
    public AddEmployeeUI(EmployeeManagementUI employeeManagementUI) {
        this.employeeManagementUI = employeeManagementUI;
        // 设置窗口标题和大小
        setTitle("添加员工信息");
        setSize(400, 500);
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); // 关闭当前窗口而不退出程序
        setLocationRelativeTo(null); // 居中显示窗口
        setLayout(new GridBagLayout()); // 使用GridBagLayout布局

        GridBagConstraints gbc = new GridBagConstraints();
        gbc.insets = new Insets(5, 10, 5, 10); // 设置组件间距

        // 标签和输入框
        String[] labels = {"ID:", "姓名:", "性别:", "年龄:", "电话:", "职位:", "入职日期:", "薪水:", "部门:"};
        JTextField[] fields = new JTextField[labels.length];
        for (int i = 0; i < labels.length; i++) {
            gbc.gridx = 0;
            gbc.gridy = i;
            gbc.anchor = GridBagConstraints.EAST; // 右对齐
            add(new JLabel(labels[i]), gbc);

            gbc.gridx = 1;
            gbc.anchor = GridBagConstraints.WEST; // 左对齐

            if (i == 2) {
                // 性别字段:使用下拉框
                String[] genders = {"男", "女"};
                JComboBox<String> genderComboBox = new JComboBox<>(genders);
                // 设置下拉框宽度与输入框一致
//                genderComboBox.setPreferredSize(new Dimension(150, 25)); // 设置下拉框宽度与输入框一致
                add(genderComboBox, gbc);
            } else {
                // 其他字段:使用输入框
                fields[i] = new JTextField(20);
                add(fields[i], gbc);
            }
        }

        // 性别下拉框替换输入框
        String[] genders = {"男", "女"};
        JComboBox<String> genderComboBox = new JComboBox<>(genders);
        gbc.gridx = 1;
        gbc.gridy = 2;
        gbc.anchor = GridBagConstraints.WEST;
        add(genderComboBox, gbc);

        // 添加按钮
        JButton addButton = new JButton("添加");
        gbc.gridx = 0;
        gbc.gridy = labels.length;
        gbc.gridwidth = 1;
        gbc.anchor = GridBagConstraints.CENTER;
        add(addButton, gbc);

        // 取消按钮
        JButton cancelButton = new JButton("取消");
        gbc.gridx = 1;
        gbc.gridy = labels.length;
        gbc.gridwidth = 1;
        gbc.anchor = GridBagConstraints.CENTER;
        add(cancelButton, gbc);

        // 添加按钮事件处理
        addButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                // 获取输入框的数据,封装成员工对象,添加到信息界面的集合并在表格中展示
                Employee employee = new Employee(
                        Integer.parseInt(fields[0].getText()),
                        fields[1].getText(),
                        (String) genderComboBox.getSelectedItem(),
                        Integer.parseInt(fields[3].getText()),
                        fields[4].getText(),
                        fields[5].getText(),
                        fields[6].getText(),
                        Double.parseDouble(fields[7].getText()),
                        fields[8].getText()
                );
                // 把该员工添加到信息界面的集合中
                employeeManagementUI.addEmployee(employee);
                // 弹出一个提示框
                JOptionPane.showMessageDialog(AddEmployeeUI.this, "员工信息添加成功!", "提示", JOptionPane.INFORMATION_MESSAGE);
                // 关闭当前窗口
                dispose();
            }
        });

        // 取消按钮事件处理
        cancelButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                dispose(); // 关闭当前窗口
            }
        });

        setVisible(true);
    }

//    public static void main(String[] args) {
//        new AddEmployeeUI();
//    }
}

此时EmployeeManagementUI也要做相应的修改(加了一个addEmployee(Employee employee)方法)

- 删除某行数据的功能

  1. 拿到当前要删除的这一行数据的id值
  2. 用ID去集合中删除这个员工对象,把数据抹掉
  3. 从界面上抹掉这一行数据,刷新
    代码见项目

- 修改某行数据的功能(额外)

  1. 拿到要修改的员工ID
  2. 一个个弹窗询问修改的内容(ID不能修改,可以修改的内容包括"姓名",“性别”,“年龄”,“电话”, “职位”,“入职日期”,“薪水”, “部门”)
  3. 根据ID找到对应的employee对象修改
  4. 刷新界面上的数据
    代码见项目(在EmployeeManagementUI中给修改添加了事件监听器)

- 搜索某行数据(额外)

这里做按照姓名搜索

  1. 首先获取输入框输入的姓名
  2. 循环获取表格对应列的每一个数据,判断是否包含该姓名,如果是则显示该行,判断结束,如果不是则下一行,直到循环结束,如果没有找到则弹出提示未找到匹配员工

完整更新后代码在itheima-emplouee-sys模块中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值