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.CellComboBoxEditor; import com.example.client.utils.CellComboBoxRenderer; import com.example.client.utils.CommonTable; import com.example.server.progressTrack.model.DjJdgzNetworkLevel2List; import com.example.server.progressTrack.model.DjJdgzNetworkLevel3; import com.example.server.progressTrack.model.DjJdgzNetworkLevel3List; import com.example.server.progressTrack.service.DjJdgzNetworkLevel3ListService; import com.example.server.progressTrack.service.NetWorkDiagramService; import com.example.server.teamGroup.service.SysTeamGroupClassService; import com.example.server.user.model.SysUser; import com.example.server.utils.UserAndSiteUtils; import com.mxgraph.swing.mxGraphComponent; import com.mxgraph.view.mxGraph; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.swing.*; import javax.swing.event.TableModelEvent; import javax.swing.plaf.basic.BasicComboBoxRenderer; import javax.swing.table.DefaultTableModel; import javax.swing.table.TableModel; import java.awt.*; import java.awt.event.*; import java.util.*; import java.util.List; @Service public class Level3AddOrUpdate { @Autowired private NetWorkDiagramService netWorkDiagramService; @Autowired private DjJdgzNetworkLevel3ListService level3ListService; @Autowired private Level3ManageService level3ManageService; public void openDialog(DjJdgzNetworkLevel3 data, JFrame jFrame) { JFrame frame1 = new JFrame("三级网络图编辑"); frame1.setSize(1500, 800); frame1.setResizable(true); frame1.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); frame1.setLocationRelativeTo(null); frame1.addWindowListener(new WindowAdapter() { //添加第二个界面的关闭事件: public void windowClosing(WindowEvent e) { //添加事件: jFrame.setEnabled(true);//将主界面再设置为可操作的 } }); JPanel jLeft = new JPanel(new BorderLayout()); JPanel topJpanel = new JPanel(new FlowLayout()); JPanel diagram = new JPanel(new BorderLayout()); JSpinner timeSpinner = new JSpinner(new SpinnerDateModel()); JSpinner.DateEditor timeEditor = new JSpinner.DateEditor(timeSpinner, "yyyy-MM-dd"); timeSpinner.setEditor(timeEditor); JButton btnUpdate = new JButton("修改设备信息"); JButton btnSave = new JButton("保存数据"); topJpanel.add(btnUpdate); topJpanel.add(btnSave); // 创建子表格 List columnDto = new ArrayList<>(); List list = level3ListService.getList(data.getId()); if (list.size() == 0) { list = level3ListService.getDefult(data.getType()); } for (DjJdgzNetworkLevel3List item : list) { if (item.getTeamgroupId() == null) { item.setTeamgroupId(data.getTeamgroupId()); } } //JComboBoxItem[] teamGroupList = sysTeamGroupClassService.getList(); //columnDto.add(new ColumnDto("ID", "id", -1, null,false)); List buttonList = new ArrayList<>(); buttonList.add(new TableButton("del", "删除")); columnDto.add(new ColumnDto("序号", "", 50, "autoCreate", true, null, null)); columnDto.add(new ColumnDto("节点名称", "ProcessName", 160, null, true, null, null)); columnDto.add(new ColumnDto("要求完成时间", "requiredCompletionTime", 160, "selectDate", true, null, null)); columnDto.add(new ColumnDto("操作", "", 85, "", true, buttonList, null)); JTable subTable = CommonTable.createCommonTable(list, columnDto); subTable.setRowHeight(25); subTable.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS); List finalList = list; subTable.getModel().addTableModelListener(e -> { // 检查事件类型 if (e.getType() == TableModelEvent.UPDATE) { // 获取变化的行和列 int row = e.getFirstRow(); int column = e.getColumn(); // 获取新的值 Object newValue = subTable.getModel().getValueAt(row, column); // 输出变化信息 if (newValue.equals("del")) { DefaultTableModel model = (DefaultTableModel) subTable.getModel(); model.removeRow(row); DjJdgzNetworkLevel3List djJdgzNetworkLevel3List = finalList.get(row); level3ListService.deleteLogic(djJdgzNetworkLevel3List.getId()); finalList.remove(row); } else { /* if (column == 1 && newValue instanceof Integer) { subTable.getModel().setValueAt(newValue.toString(), row, column); }*/ } System.out.println("单元格变化: 行=" + row + ", 列=" + column + ", 新值=" + newValue); } }); JScrollPane scrollTable = new JScrollPane(subTable); jLeft.add(topJpanel, BorderLayout.NORTH); jLeft.add(scrollTable, BorderLayout.CENTER); // 创建水平分割面板 JSplitPane hSplitPane = new JSplitPane( JSplitPane.HORIZONTAL_SPLIT, jLeft, diagram ); hSplitPane.setDividerLocation(510); hSplitPane.setDividerSize(10); hSplitPane.setOneTouchExpandable(true); hSplitPane.setContinuousLayout(true); frame1.add(hSplitPane, BorderLayout.CENTER); frame1.setVisible(true); mxGraph graph = new mxGraph(); graph = netWorkDiagramService.getCsDiagram(graph, data.getContent(), null, diagram.getWidth(), diagram.getHeight(),null); mxGraphComponent graphComponent = new mxGraphComponent(graph); graphComponent.setConnectable(false); graphComponent.setDragEnabled(false); graphComponent.zoomTo(1, true); diagram.add(graphComponent); mxGraph finalGraph = graph; graphComponent.getViewport().addMouseWheelListener(new MouseWheelListener() { @Override public void mouseWheelMoved(MouseWheelEvent e) { int notches = e.getWheelRotation(); double zoomFactor = 1.1; // 缩放因子 Point pt = e.getPoint(); double zoom = finalGraph.getView().getScale() * (notches < 0 ? zoomFactor : 1 / zoomFactor); graphComponent.zoomTo(zoom, true); // 缩放视图 } }); mxGraph finalGraph1 = graph; btnSave.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { SysUser user = (SysUser) UserAndSiteUtils.get("user", "user"); if (user == null) { JOptionPane.showMessageDialog(null, "用户失效请退出并重新登录", "提示", JOptionPane.WARNING_MESSAGE); return; } if (subTable.isEditing()) { subTable.getCellEditor().stopCellEditing(); } CommonTable.saveTableList(finalList, subTable, columnDto); level3ListService.save(finalList, data.getId(), diagram, finalGraph1); JOptionPane.showMessageDialog(null, "保存成功", "提示", JOptionPane.WARNING_MESSAGE); } }); btnUpdate.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { SysUser user = (SysUser) UserAndSiteUtils.get("user", "user"); if (user == null) { JOptionPane.showMessageDialog(null, "用户失效请退出并重新登录", "提示", JOptionPane.WARNING_MESSAGE); return; } level3ManageService.insert(jFrame,data); } }); } }