package com.cfive.classroom.teacher; import com.cfive.classroom.library.database.DatabaseHelper; import com.cfive.classroom.library.database.bean.AttStatus; import com.cfive.classroom.library.database.bean.Attendance; import com.cfive.classroom.library.database.util.DependenciesNotFoundException; import com.cfive.classroom.library.database.util.NoConfigException; import com.cfive.classroom.library.net.TeacherNet; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import javax.swing.*; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import javax.swing.table.*; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.sql.SQLException; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.List; import java.util.Vector; public class Attend { private static final Attend attend = new Attend(); private static final JFrame frame = new JFrame("考勤情况"); private JPanel rootPanel; private JTabbedPane tabbedPane1; private final Object[] t1_columnTitle = {"学号", "姓名", "签到时间"}; private final Object[] t2_columnTitle = {"考勤号", "学号", "姓名", "签到状态"}; private JTable table_already; private JTable table_undo; private TeacherNet teacherNet; private String courseID; private final List attendancesList = new ArrayList<>(); private final List alreadyList = new ArrayList<>(); private final List undoList = new ArrayList<>(); private static final Logger LOGGER = LogManager.getLogger(); public Attend() { //学生签到信息监听 /* teacherNet.setOnReceiveListener(new ReceiveListener() { @Override public void onReceive(MessageObject messageObject) { //判断该信息类型是否为签到并且签到状态是否为已签 if (messageObject.getMessageType() == MessageType.CheckIn && messageObject.getAttStatus() == AttStatus.signed) { try { //将学生签到状态修改进数据表中 DatabaseHelper.updateAttendance(messageObject.getStuNo(), messageObject.getAttStatus()); } catch (NoConfigException e) { JOptionPane.showMessageDialog(null, "没有数据库配置文件", "警告", JOptionPane.ERROR_MESSAGE); LOGGER.error("No configuration", e); } catch (SQLException e) { JOptionPane.showMessageDialog(null, "数据库出错", "警告", JOptionPane.ERROR_MESSAGE); LOGGER.error("SQLException", e); } catch (DependenciesNotFoundException e) { LOGGER.error("DependenciesNotFoundException", e); } } } }); */ //未签表格的鼠标点击事件 table_undo.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { //获取鼠标所点击的行和列 int row = table_undo.getSelectedRow(); int col = table_undo.getSelectedColumn(); //修改学生签到状态 if (col == 3) { Object[] options = {AttStatus.absence, AttStatus.signed, AttStatus.leave_early, AttStatus.late, AttStatus.personal_leave, AttStatus.public_holiday, AttStatus.sick_leave, AttStatus.not_signed}; AttStatus attStatus = (AttStatus) JOptionPane.showInputDialog(null, "选择您所要修改的签到状态", "提示", JOptionPane.PLAIN_MESSAGE, null, options, options[0]); LOGGER.debug("attStatus: " + attStatus); if (attStatus == null) { LOGGER.debug("test: " + table_undo.getModel().getValueAt(row, col)); table_undo.getModel().setValueAt(AttStatus.not_signed, row, col); } String modifyStat = String.valueOf(attStatus); if (modifyStat != null) { //将修改后的状态显示出来 table_undo.getModel().setValueAt(modifyStat, row, col); //将修改在数据库中更改 try { LocalDateTime currentTime = LocalDateTime.now(); DatabaseHelper.updateAttendance(String.valueOf(table_undo.getModel().getValueAt(row, 0)), attStatus, currentTime); } catch (NoConfigException ex) { JOptionPane.showMessageDialog(null, "没有数据库配置文件", "警告", JOptionPane.ERROR_MESSAGE); LOGGER.error("No configuration", e); } catch (SQLException ex) { JOptionPane.showMessageDialog(null, "数据库出错", "警告", JOptionPane.ERROR_MESSAGE); LOGGER.error("SQLException", e); } catch (DependenciesNotFoundException ex) { JOptionPane.showMessageDialog(null, "未查询到该数据", "错误", JOptionPane.ERROR_MESSAGE); LOGGER.error("DependenciesNotFoundException", e); } } else { JOptionPane.showMessageDialog(null, "您未进行选择", "提示", JOptionPane.INFORMATION_MESSAGE); } } } }); } public static void main(String[] args) { frame.setContentPane(attend.rootPanel); frame.setSize(600, 400); frame.setLocationRelativeTo(null); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.pack(); frame.setVisible(false); } public void start(TeacherNet teacherNet1, String courseID) { frame.setContentPane(attend.rootPanel); frame.setSize(600, 400); frame.setLocationRelativeTo(null); frame.setResizable(false); attend.teacherNet = teacherNet1; attend.courseID = courseID; try { attendancesList.addAll(DatabaseHelper.selectAttendanceByCourse(Long.parseLong(courseID))); //导入该课程考勤名单 LOGGER.debug("attendanceList:" + attendancesList); for (Attendance attendance : attendancesList) { if (attendance.getAttStatus() == AttStatus.signed) { //筛选出已签到的考勤列表 alreadyList.add(attendance); } else { undoList.add(attendance); } } LOGGER.debug("alreadyList:" + alreadyList); LOGGER.debug("undoList:" + undoList); } catch (DependenciesNotFoundException e) { throw new RuntimeException(e); } catch (NoConfigException e) { throw new RuntimeException(e); } catch (SQLException e) { throw new RuntimeException(e); } //已签考勤表格 DefaultTableModel alreadyTableModel = new DefaultTableModel(t1_columnTitle, 0) { @Override public boolean isCellEditable(int row, int column) { return false; } }; if (alreadyList != null) { for (Attendance attendance : alreadyList) { String stuID = String.valueOf(attendance.getStudent().getStuID()); String stuName = String.valueOf(attendance.getStudent().getStuName()); LocalDateTime attTime = attendance.getAttTime(); String attTime1 = attTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); Object row[] = {stuID, stuName, attTime1}; alreadyTableModel.addRow(row); } } attend.table_already.setModel(alreadyTableModel); //未签考勤表格 DefaultTableModel undoTableModel = new DefaultTableModel(t2_columnTitle, 0); for (Attendance attendance : undoList) { LOGGER.debug(attendance.getAttID()); String attID = attendance.getAttID(); String stuID = String.valueOf(attendance.getStudent().getStuID()); String stuName = String.valueOf(attendance.getStudent().getStuName()); AttStatus attStatus = attendance.getAttStatus(); Object row[] = {attID, stuID, stuName, String.valueOf(attStatus)}; undoTableModel.addRow(row); } attend.table_undo.setModel(undoTableModel); //设置第一列隐藏 TableColumn tableColumn = attend.table_undo.getColumnModel().getColumn(0); tableColumn.setWidth(0); tableColumn.setMinWidth(0); tableColumn.setPreferredWidth(0); tableColumn.setMaxWidth(0); attend.table_undo.getTableHeader().getColumnModel().getColumn(0).setMaxWidth(0); attend.table_undo.getTableHeader().getColumnModel().getColumn(0).setMinWidth(0); LOGGER.debug(table_undo.getColumnModel().getColumnCount()); LOGGER.debug(undoTableModel.getColumnCount()); attend.table_undo.setCellSelectionEnabled(true); frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); frame.setVisible(true); } }