You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

207 lines
7.2 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package com.WR.StudentMS.view;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import java.awt.*;
import java.util.List;
import java.util.stream.Collectors;
import com.WR.StudentMS.model.Classmqsy;
import com.WR.StudentMS.model.ZhuanyeWR;
import com.WR.StudentMS.dao.mysql.Classmdaoimpqsy;
public class ClassmPanel extends JPanel {
private List<Classmqsy> classmList;
private Classmdaoimpqsy classmDao;
private JTable table;
private DefaultTableModel model;
private JTextField searchField;
private JButton searchButton;
public ClassmPanel() {
super(new BorderLayout()); // 使用BorderLayout布局管理器
classmDao = new Classmdaoimpqsy();
model = new DefaultTableModel();
initializeUI();
loadClass();
}
private void initializeUI() {
// 定义列名
String[] columnNames = {"班级ID", "班级名", "专业ID"};
model.setColumnIdentifiers(columnNames);
table = new JTable(model);
JScrollPane scrollPane = new JScrollPane(table);
add(scrollPane, BorderLayout.CENTER);
// 创建按钮面板
JPanel buttonPanel = new JPanel();
buttonPanel.setLayout(new FlowLayout());
// 添加按钮
JButton addButton = new JButton("添加班级信息");
JButton deleteButton = new JButton("删除选中的班级信息");
// 创建搜索框和搜索按钮
searchField = new JTextField();
searchField.setPreferredSize(new Dimension(200, searchField.getPreferredSize().height));
searchButton = new JButton("班级ID查询");
// 为按钮添加事件监听器
addButton.addActionListener(e -> addClass());
deleteButton.addActionListener(e -> deleteSelectedClass());
searchButton.addActionListener(e -> searchClasses());
// 将按钮添加到面板
buttonPanel.add(addButton);
buttonPanel.add(deleteButton);
buttonPanel.add(searchField);
buttonPanel.add(searchButton); // 添加搜索按钮到面板
// 将按钮面板添加到底部
add(buttonPanel, BorderLayout.SOUTH);
}
private void loadClass() {
// 从数据库加载学籍信息并更新表格
classmList = classmDao.findAllqsy();
model.setRowCount(0); // 清空表格
for (Classmqsy classm : classmList) {
Object[] rowData = new Object[]{
classm.getClassidqsy(),
classm.getClassnameqsy(),
classm.getMajoridqsy(),
};
model.addRow(rowData);
}
}
private void addClass() {
String input = (String) JOptionPane.showInputDialog(
this,
"请输入班级信息格式班级ID-班级名-专业ID:",
"添加班级信息",
JOptionPane.QUESTION_MESSAGE,
null,
null,
null
);
if (input != null && !input.trim().isEmpty()) {
String[] parts = input.split("-", 3); // 按"-"分割字符串最多3部分
if (parts.length == 3) {
try {
Classmqsy newClassm = new Classmqsy();
newClassm.setClassidqsy(parts[0].trim());
newClassm.setClassnameqsy(parts[1].trim());
newClassm.setMajoridqsy(parts[2].trim());
// 调用数据库添加班级信息的方法
int result = classmDao.createqsy(newClassm);
// 确保在EDT上更新UI和显示消息
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
if (result > 0) {
// 刷新班级列表
loadClass();
JOptionPane.showMessageDialog(ClassmPanel.this, "班级信息添加成功!");
} else {
// 显示添加失败的消息
JOptionPane.showMessageDialog(ClassmPanel.this, "班级信息添加失败!");
}
}
});
} catch (NumberFormatException e) {
// 专业ID格式错误
JOptionPane.showMessageDialog(this, "专业ID必须是整数");
} catch (Exception e) {
// 其他异常情况
JOptionPane.showMessageDialog(this, "添加班级信息失败: " + e.getMessage(), "错误", JOptionPane.ERROR_MESSAGE);
}
} else {
// 输入格式不正确
JOptionPane.showMessageDialog(this, "输入格式不正确需要班级ID-班级名-专业ID");
}
}
}
private void deleteSelectedClass() {
int selectedRow = table.getSelectedRow();
if (selectedRow >= 0) {
String classmId = (String) model.getValueAt(selectedRow, 0);
Classmqsy classmToDelete = classmDao.findByClassId(classmId);
if (classmToDelete != null) {
int result = classmDao.removeqsy(classmToDelete);
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
if (result > 0) {
model.removeRow(selectedRow); // 从表格中移除
JOptionPane.showMessageDialog(ClassmPanel.this, "班级信息删除成功!");
} else {
JOptionPane.showMessageDialog(ClassmPanel.this, "班级信息删除失败可能班级ID不存在或删除记录未受影响");
}
}
});
} else {
JOptionPane.showMessageDialog(this, "未找到对应的班级信息!");
}
}
}
private void searchClasses() {
String searchQuery = searchField.getText();
if (!searchQuery.trim().isEmpty()) {
// 过滤班级列表仅根据班级ID进行搜索
List<Classmqsy> filteredList = classmList.stream()
.filter(classm -> classm.getClassidqsy().equals(searchQuery)) // 仅根据班级ID过滤
.collect(Collectors.toList());
// 更新表格模型以显示过滤后的班级信息
model.setRowCount(0); // 清空表格
for (Classmqsy classm : filteredList) {
Object[] rowData = new Object[]{
classm.getClassidqsy(),
classm.getClassnameqsy(),
classm.getMajoridqsy()
};
model.addRow(rowData);
}
} else {
// 如果搜索框为空,则重新加载所有班级信息
loadClass();
}
}
}