package com.example.client.service; import com.example.client.dto.ColumnDto; import com.example.client.dto.JComboBoxItem; import com.example.client.utils.CommonTable; import com.example.client.utils.ComplexHeaderUI; import com.example.client.utils.ComplexTable; import com.example.client.utils.ComplexTableUI; import com.example.server.progressTrack.Dto.StatistDismantDto; import com.example.server.progressTrack.model.DjJdgzShip; import com.example.server.progressTrack.service.DjJdgzDismantTrackService; import com.example.server.teamGroup.service.SysTeamGroupClassService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.swing.*; import javax.swing.table.DefaultTableModel; import javax.swing.table.TableModel; import java.awt.*; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Vector; @Service public class StatisDismant2Service { @Autowired private DjJdgzDismantTrackService djJdgzDismantTrackService; @Autowired private SysTeamGroupClassService sysTeamGroupClassService; public void createTable(JFrame jFrame, Long level1Id) { JFrame frame1 = new JFrame("拆卸进度统计详情表"); frame1.setSize(1500, 800); frame1.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); frame1.setLocationRelativeTo(null); frame1.setVisible(true); frame1.addWindowListener(new WindowAdapter() { //添加第二个界面的关闭事件: public void windowClosing(WindowEvent e) { //添加事件: jFrame.setEnabled(true);//将主界面再设置为可操作的 } }); JPanel topJpanel = new JPanel(); topJpanel.setPreferredSize(new Dimension(1500, 40)); topJpanel.setBackground(Color.WHITE); JPanel centerJpanel = new JPanel(); centerJpanel.setPreferredSize(new Dimension(1500 - 20, 800 - 40)); centerJpanel.setBackground(Color.WHITE); JComboBoxItem[] deptList = sysTeamGroupClassService.getDeptList(); JLabel JLabel1 = new JLabel("部门"); JComboBox comboBox1 = new JComboBox<>(deptList); comboBox1.setPreferredSize(new Dimension(185, 28)); comboBox1.setSelectedIndex(1); JComboBoxItem[] teamList1 = sysTeamGroupClassService.getTeamList(deptList[1].getId()); JLabel JLabel2 = new JLabel("专业"); JComboBox comboBox2 = new JComboBox<>(teamList1); comboBox2.setPreferredSize(new Dimension(185, 28)); topJpanel.add(JLabel1); topJpanel.add(comboBox1); topJpanel.add(JLabel2); topJpanel.add(comboBox2); final List[] list = new List[]{djJdgzDismantTrackService.getStatist2(level1Id, deptList[1].getId())}; Object[][] headerRows = new Object[2][9]; headerRows[0] = new Object[]{"舱室", "总数", ComplexTable.mergeCellX, "拆卸进度完成", ComplexTable.mergeCellX, "子部件", ComplexTable.mergeCellX, ComplexTable.mergeCellX, ComplexTable.mergeCellX,}; //此处2-5是不会显示出来的,因为1-4向下合并了一行 + 向右合并了一列 , 而2-5被这个矩形范围包括了 headerRows[1] = new Object[]{ComplexTable.mergeCellY, "设备", "子部件", "设备", "子部件", "已拆卸", "已出舱", "已退重", "已入库"}; String[][] body = new String[list[0].size()][9]; for (int i = 0; i < list[0].size(); i++) { StatistDismantDto data = list[0].get(i); body[i][0] = data.getName(); body[i][1] = String.valueOf(data.getSbsl()); body[i][2] = String.valueOf(data.getZbjsl()); body[i][3] = String.valueOf(data.getSbcxsl()); body[i][4] = String.valueOf(data.getZbjcxsl()); body[i][5] = String.valueOf(data.getDismantsl()); body[i][6] = String.valueOf(data.getExitsl()); body[i][7] = String.valueOf(data.getReturnsl()); body[i][8] = String.valueOf(data.getWarehousesl()); } JTable jTable = new ComplexTable(headerRows, body, 160); JScrollPane scrollTable = new JScrollPane(jTable); scrollTable.setPreferredSize(new Dimension(1500 - 20, 800 - 40)); centerJpanel.add(scrollTable); frame1.add(topJpanel, BorderLayout.NORTH); frame1.add(centerJpanel, BorderLayout.CENTER); comboBox1.addItemListener(new ItemListener() { @Override public void itemStateChanged(ItemEvent e) { if (e.getStateChange() == ItemEvent.SELECTED) { JComboBoxItem selectedItem = (JComboBoxItem) comboBox1.getSelectedItem(); if (selectedItem != null && selectedItem.getId() != null) { long selectedId = selectedItem.getId(); JComboBoxItem[] teamList = sysTeamGroupClassService.getTeamList(selectedId); comboBox2.setModel(new DefaultComboBoxModel<>(teamList)); comboBox2.setSelectedIndex(0); JComboBoxItem dept = (JComboBoxItem) comboBox1.getSelectedItem(); JComboBoxItem team = (JComboBoxItem) comboBox2.getSelectedItem(); Long id = null; if (team.getId() != null) { id = team.getId(); } else { id = dept.getId(); } list[0] = djJdgzDismantTrackService.getStatist2(level1Id, id); Object[][] headerRows = new Object[2][9]; headerRows[0] = new Object[]{"部门/专业", "总数", ComplexTable.mergeCellX, "拆卸进度完成", ComplexTable.mergeCellX, "子部件", ComplexTable.mergeCellX, ComplexTable.mergeCellX, ComplexTable.mergeCellX,}; //此处2-5是不会显示出来的,因为1-4向下合并了一行 + 向右合并了一列 , 而2-5被这个矩形范围包括了 headerRows[1] = new Object[]{ComplexTable.mergeCellY, "设备", "子部件", "设备", "子部件", "已拆卸", "已出舱", "已退重", "已入库"}; String[][] body = new String[list[0].size()][9]; for (int i = 0; i < list[0].size(); i++) { StatistDismantDto data = list[0].get(i); body[i][0] = data.getName(); body[i][1] = String.valueOf(data.getSbsl()); body[i][2] = String.valueOf(data.getZbjsl()); body[i][3] = String.valueOf(data.getSbcxsl()); body[i][4] = String.valueOf(data.getZbjcxsl()); body[i][5] = String.valueOf(data.getDismantsl()); body[i][6] = String.valueOf(data.getExitsl()); body[i][7] = String.valueOf(data.getReturnsl()); body[i][8] = String.valueOf(data.getWarehousesl()); } Vector> dataVector = new Vector<>(); for (Object[] row : body) { dataVector.add(new Vector<>(Arrays.asList(row))); } Vector columnIdentifiers = new Vector<>(Arrays.asList(headerRows[1])); DefaultTableModel model = (DefaultTableModel) jTable.getModel(); model.setDataVector(dataVector, columnIdentifiers); // 设置列宽 for (int i = 0; i < headerRows[1].length; i++) { jTable.getColumnModel().getColumn(i).setPreferredWidth(160); } // 设置表头UI jTable.getTableHeader().setUI(new ComplexHeaderUI(headerRows, jTable)); // 设置表格UI jTable.setUI(new ComplexTableUI(body, jTable)); // 重新渲染表格 jTable.repaint(); } } } }); comboBox2.addItemListener(new ItemListener() { @Override public void itemStateChanged(ItemEvent e) { if (e.getStateChange() == ItemEvent.SELECTED) { JComboBoxItem dept = (JComboBoxItem) comboBox1.getSelectedItem(); JComboBoxItem team = (JComboBoxItem) comboBox2.getSelectedItem(); Long id = null; if (team.getId() != null) { id = team.getId(); } else { id = dept.getId(); } list[0] = djJdgzDismantTrackService.getStatist2(level1Id, id); Object[][] headerRows = new Object[2][9]; headerRows[0] = new Object[]{"部门/专业", "总数", ComplexTable.mergeCellX, "拆卸进度完成", ComplexTable.mergeCellX, "子部件", ComplexTable.mergeCellX, ComplexTable.mergeCellX, ComplexTable.mergeCellX,}; //此处2-5是不会显示出来的,因为1-4向下合并了一行 + 向右合并了一列 , 而2-5被这个矩形范围包括了 headerRows[1] = new Object[]{ComplexTable.mergeCellY, "设备", "子部件", "设备", "子部件", "已拆卸", "已出舱", "已退重", "已入库"}; String[][] body = new String[list[0].size()][9]; for (int i = 0; i < list[0].size(); i++) { StatistDismantDto data = list[0].get(i); body[i][0] = data.getName(); body[i][1] = String.valueOf(data.getSbsl()); body[i][2] = String.valueOf(data.getZbjsl()); body[i][3] = String.valueOf(data.getSbcxsl()); body[i][4] = String.valueOf(data.getZbjcxsl()); body[i][5] = String.valueOf(data.getDismantsl()); body[i][6] = String.valueOf(data.getExitsl()); body[i][7] = String.valueOf(data.getReturnsl()); body[i][8] = String.valueOf(data.getWarehousesl()); } Vector> dataVector = new Vector<>(); for (Object[] row : body) { dataVector.add(new Vector<>(Arrays.asList(row))); } Vector columnIdentifiers = new Vector<>(Arrays.asList(headerRows[1])); DefaultTableModel model = (DefaultTableModel) jTable.getModel(); model.setDataVector(dataVector, columnIdentifiers); // 设置列宽 for (int i = 0; i < headerRows[1].length; i++) { jTable.getColumnModel().getColumn(i).setPreferredWidth(160); } // 设置列宽 for (int i = 0; i < headerRows[1].length; i++) { jTable.getColumnModel().getColumn(i).setPreferredWidth(160); } // 设置表头UI jTable.getTableHeader().setUI(new ComplexHeaderUI(headerRows, jTable)); // 设置表格UI jTable.setUI(new ComplexTableUI(body, jTable)); // 重新渲染表格 jTable.repaint(); } } }); frame1.setVisible(true); } }