package com.example.client.service; import com.example.client.dto.ColumnDto; import com.example.client.model.TableButton; import com.example.client.utils.CommonTable; import com.example.server.progressTrack.model.DjJdgzNetworkLevel1; import com.example.server.progressTrack.model.DjJdgzNetworkLevel1List; import com.example.server.progressTrack.service.DjJdgzNetworkLevel1ListService; import com.example.server.progressTrack.service.NetWorkDiagramService; import com.example.server.user.model.SysUser; import com.example.server.utils.CacheUtils; import com.mxgraph.swing.mxGraphComponent; import com.mxgraph.view.mxGraph; import org.apache.poi.ss.usermodel.HorizontalAlignment; import org.jdesktop.swingx.JXDatePicker; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.swing.*; import javax.swing.event.ChangeEvent; import javax.swing.event.TableModelEvent; import javax.swing.table.DefaultTableModel; import javax.swing.table.TableCellEditor; import javax.swing.table.TableCellRenderer; import javax.swing.table.TableModel; import java.awt.*; import java.awt.event.*; import java.time.LocalDate; import java.time.ZoneId; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.Date; import java.util.List; @Service public class Level1AddOrUpdate { @Autowired private NetWorkDiagramService netWorkDiagramService; @Autowired private DjJdgzNetworkLevel1ListService level1ListService; public void openDialog(DjJdgzNetworkLevel1 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 btnInsert = new JButton("新增"); JButton btnSave = new JButton("保存数据"); topJpanel.add(btnInsert); topJpanel.add(btnSave); // 创建子表格 List columnDto = new ArrayList<>(); List list = level1ListService.getList(data.getId()); //columnDto.add(new ColumnDto("ID", "id", -1, null,false)); List buttonList = new ArrayList<>(); buttonList.add(new TableButton("del", "删除")); columnDto.add(new ColumnDto("序号", "", 75, "autoCreate", true, null,null)); columnDto.add(new ColumnDto("节点名称", "ProcessName", 200, null, true, null,null)); columnDto.add(new ColumnDto("要求完成时间", "RequiredCompletion", 150, "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); 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); DjJdgzNetworkLevel1List djJdgzNetworkLevel1List = list.get(row); level1ListService.deleteLogic(djJdgzNetworkLevel1List.getId()); list.remove(row); } else { } 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()); 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); // 缩放视图 } }); btnInsert.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { TableModel model = subTable.getModel(); DefaultTableModel defaultModel = (DefaultTableModel) model; int columnCount = subTable.getColumnCount(); Object[] emptyRow = new Object[columnCount]; defaultModel.addRow(emptyRow); list.add(new DjJdgzNetworkLevel1List()); } }); mxGraph finalGraph1 = graph; btnSave.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { SysUser user = (SysUser) CacheUtils.get("user","user"); if (user==null){ JOptionPane.showMessageDialog(null, "用户失效请退出并重新登录", "提示", JOptionPane.WARNING_MESSAGE); return; } if (subTable.isEditing()) { subTable.getCellEditor().stopCellEditing(); } CommonTable.saveTableList(list,subTable,columnDto); level1ListService.save(list,data.getId(),diagram, finalGraph1); JOptionPane.showMessageDialog(null, "保存成功", "提示", JOptionPane.WARNING_MESSAGE); } }); } }