package com.example.client.service; import com.example.client.dto.ColumnDto; import com.example.client.dto.JComboBoxItem; import com.example.client.model.TableButton; import com.example.client.utils.CommonTable; import com.example.server.progressTrack.model.DjJdgzHandover; import com.example.server.progressTrack.model.DjJdgzNetworkLevel1; import com.example.server.progressTrack.model.DjJdgzNetworkLevel3; import com.example.server.progressTrack.model.DjJdgzShip; import com.example.server.progressTrack.service.DjJdgzHandoverService; import com.example.server.progressTrack.service.DjJdgzNetworkLevel1Service; import com.example.server.progressTrack.service.DjJdgzShipService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.swing.*; import javax.swing.event.TableModelEvent; import javax.swing.table.DefaultTableModel; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @Service public class HandoverService { @Autowired private DjJdgzHandoverService handoverService; @Autowired private DjJdgzNetworkLevel1Service level1Service; @Autowired private HandoverAddOrUpdate addOrUpdate; // 注入 AddOrupdate 实例 private List columnDto; private Long projectId; public JPanel createTable(Integer width, Integer height, JFrame jFrame) { JTable table; JPanel panel = new JPanel(); JPanel topJpanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); topJpanel.setPreferredSize(new Dimension(width, 37)); topJpanel.setBackground(Color.WHITE); JPanel centerJpanel = new JPanel(); centerJpanel.setPreferredSize(new Dimension(width - 20, height - 100)); centerJpanel.setBackground(Color.WHITE); panel.add(topJpanel, BorderLayout.NORTH); panel.add(centerJpanel, BorderLayout.CENTER); JComboBoxItem[] projectList = level1Service.getProjectList(); JComboBox comboBox = new JComboBox<>(projectList); JButton btnInsert = new JButton("新增"); topJpanel.add(comboBox); topJpanel.add(btnInsert); comboBox.setPreferredSize(new Dimension(300, 28)); final List[] list = new List[]{handoverService.getList(projectList[0].getId())}; projectId = projectList[0].getId(); List buttonList = new ArrayList<>(); buttonList.add(new TableButton("edit", "编辑")); buttonList.add(new TableButton("del", "删除")); columnDto = new ArrayList<>(); //columnDto.add(new ColumnDto("ID", "id", -1, null,false)); columnDto.add(new ColumnDto("序号", "", (width - 10) / 8, "autoCreate", false, null,null)); columnDto.add(new ColumnDto("工程", "ProjectName", (width - 10) / 8, null, false, null,null)); columnDto.add(new ColumnDto("交方艇队", "currentTeam", (width - 10) / 8, null, false, null,null)); columnDto.add(new ColumnDto("接方艇队", "handoverTeam", (width - 10) / 8, null, false, null,null)); columnDto.add(new ColumnDto("交接时间", "handoverTime", (width - 10) / 8, "selectDate", false, null,null)); columnDto.add(new ColumnDto("交接情况说明", "handoverSituation", (width - 10) / 8, null, false, null,null)); columnDto.add(new ColumnDto("附件", "fileName", (width - 10) / 8, "", false, null,null)); columnDto.add(new ColumnDto("操作", "", (width - 10) / 8, "", true, buttonList,null)); table = CommonTable.createCommonTable(list[0], columnDto); table.setRowHeight(25); table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); comboBox.addItemListener(new ItemListener() { public void itemStateChanged(final ItemEvent event) { JComboBoxItem selectedItemNow = (JComboBoxItem)comboBox.getSelectedItem(); projectId = selectedItemNow.getId(); list[0] = handoverService.getList(projectId); CommonTable.refreshTable(list[0], columnDto,table); table.setRowHeight(25); table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); tableModelListener(table,jFrame,list[0]); } }); tableModelListener(table,jFrame,list[0]); btnInsert.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { DjJdgzHandover data = new DjJdgzHandover(); addOrUpdate.openDialog(data,jFrame, columnDto,table); jFrame.setEnabled(false); } }); JScrollPane scrollPane = new JScrollPane(table, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); scrollPane.setViewportView(table); scrollPane.getViewport().setBackground(Color.WHITE); scrollPane.setPreferredSize(new Dimension(width - 20, height - 100)); centerJpanel.add(scrollPane); return panel; } public void tableModelListener(JTable table,JFrame jFrame, List list){ table.getModel().addTableModelListener(e -> { // 检查事件类型 if (e.getType() == TableModelEvent.UPDATE) { // 获取变化的行和列 int row = e.getFirstRow(); int column = e.getColumn(); // 获取新的值 Object newValue = table.getModel().getValueAt(row, column); // 输出变化信息 if (newValue.equals("edit")){ DjJdgzHandover data = list.get(row); addOrUpdate.openDialog(data,jFrame,columnDto,table); jFrame.setEnabled(false); }else if(newValue.equals("del")) { int n = JOptionPane.showConfirmDialog(null, "是否删除?", "提示", JOptionPane.YES_NO_OPTION); if (n == 0) { DefaultTableModel model = (DefaultTableModel) table.getModel(); DjJdgzHandover data = list.get(row); handoverService.deleteLogic(data.getId()); list.remove(row); model.removeRow(row); } } System.out.println("单元格变化: 行=" + row + ", 列=" + column + ", 新值=" + newValue); } }); } }