对应网课为:【黑马程序员Java+AI智能辅助编程全套视频教程,java零基础入门到大牛一套通关】
项目代码地址如下(如果对你有帮助请给我一个免费的star):
gitcode链接(无需梯子)https://gitcode.com/CherryTaylor/AboutJava_first
github链接https://github.com/CarrieChai/AboutJava_first
标注“额外”的内容网课中没讲,可按需学习
- 创建一个模块做这个项目 itheima-employee-sys
- 分析项目的业务需求
- 提供一个登录和注册用户的界面
- 提供一个人事信息的管理界面:展示全部员工信息,提供一个根据名称查询某个员工信息展示 ,添加员工信息,删除员工信息,修改员工信息
- 分析项目的角色:
- 登录用户:登录名称 密码
- 员工信息:ID 姓名 性别 年龄 电话 职位 入职时间 薪水 部门信息
- 分析系统的界面:
- 登录界面类:创建登录界面
- 信息管理界面类:创建管理界面
- 结合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"));
}
开发步骤:
- 登录按钮绑定一个点击事件监听器
- 一旦点击登录按钮,拿到输入框输入的用户名和密码
- 去集合中看是否存在这个用户对象,如果认证通过,跳转到信息管理界面,登录失败,弹出提示。
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; // 未查询到用户对象,说明登录名错误
}
}
注册功能(额外)
- 注册按钮绑定一个事件监听器,一旦点击就打开注册界面
- 注册界面要求用户输入用户名、密码、登录名
- 得到的用户名、密码和登录名封装成User对象添加到allUsers集合中
- 返回登录界面
5. 完成信息管理界面的功能开发(核心功能)
- 登陆成功后,应该把用户名显示在信息管理系统界面上
- 添加员工信息的功能
- 准备一个静态的集合,用于存储系统中全部的员工信息
- 给添加按钮绑定点击事件
- 点击添加按钮后,弹出一个添加员工信息的输入框
- 把员工信息封装成一个员工对象,存入系统,然后刷新表格,展示最新添加的数据
- 存入系统实现是靠点击添加按钮是把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)方法)
- 删除某行数据的功能
- 拿到当前要删除的这一行数据的id值
- 用ID去集合中删除这个员工对象,把数据抹掉
- 从界面上抹掉这一行数据,刷新
代码见项目
- 修改某行数据的功能(额外)
- 拿到要修改的员工ID
- 一个个弹窗询问修改的内容(ID不能修改,可以修改的内容包括"姓名",“性别”,“年龄”,“电话”, “职位”,“入职日期”,“薪水”, “部门”)
- 根据ID找到对应的employee对象修改
- 刷新界面上的数据
代码见项目(在EmployeeManagementUI中给修改添加了事件监听器)
- 搜索某行数据(额外)
这里做按照姓名搜索
- 首先获取输入框输入的姓名
- 循环获取表格对应列的每一个数据,判断是否包含该姓名,如果是则显示该行,判断结束,如果不是则下一行,直到循环结束,如果没有找到则弹出提示未找到匹配员工
完整更新后代码在itheima-emplouee-sys模块中