java项目1-人事管理系统
第一步:创建一个模块做这个项目。employee-sys第二步:分析业务需求第三步:AI开发定义了一个APP的启动类:2、拿到管理信息的界面展示全部员工信息,提供一个根据名称查询某个员工信息展示,添加员工信息,删除员工信息,修改员工信息3、准备系统角色类用户类,员工信息类4、开发登录功能系统中需要存在用户信息可直接准备一些用户对象,作为正确的用户信息准备一个集合容器,存储系统中全部的用户信息,只要
·
第一步:创建一个模块做这个项目。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", "李四"));
}
开发步骤:
- 给登录按钮绑定一个点击事件监听器
- 一旦点击登录按钮,拿到输入框输入的用户名和密码
- 去集合中比对用户对象,若认证通过,跳转到信息管理界面。登录失败,弹出提示
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, "删除成功!");
}
}
});
更多推荐

所有评论(0)