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.client.utils.GBC; import com.example.server.progressTrack.model.DjJdgzNetworkLevel1; import com.example.server.progressTrack.model.DjJdgzNetworkLevel1List; import com.example.server.progressTrack.model.DjJdgzNetworkLevel2; import com.example.server.progressTrack.model.DjJdgzNetworkLevel2List; import com.example.server.progressTrack.service.*; 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.apache.commons.lang3.StringUtils; import org.jdesktop.swingx.JXDatePicker; 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 javax.swing.table.TableCellEditor; import javax.swing.table.TableModel; import java.awt.*; import java.awt.event.*; import java.text.ParseException; import java.text.SimpleDateFormat; 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 Level2AddOrUpdate { @Autowired private NetWorkDiagramService netWorkDiagramService; @Autowired private DjJdgzNetworkLevel1Service level1Service; @Autowired private DjJdgzNetworkLevel2ListService level2ListService; @Autowired private DjJdgzNetworkLevel2Service level2Service; @Autowired private ImportLevel2Service importService; public void openDialog(DjJdgzNetworkLevel2 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()); topJpanel.setPreferredSize(new Dimension(510,100)); 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 btnImport = new JButton("导入数据"); JButton btnSave= new JButton("保存"); /* JLabel label1 = new JLabel("起始时间"); JXDatePicker beginDate = new JXDatePicker(); beginDate.setPreferredSize(new Dimension(180, 28)); SimpleDateFormat sdFormat = new SimpleDateFormat("yyyy-MM-dd"); beginDate.setFormats(sdFormat); Date parse = new Date(); try { parse = sdFormat.parse(data.getStartDate()); } catch (ParseException e) { e.printStackTrace(); } beginDate.setDate(parse); JLabel label2 = new JLabel("网络图宽度"); JTextField diagramWidth = new JTextField(6); if (data.getDiagramWidth()!=null){ diagramWidth.setText(String.valueOf(data.getDiagramWidth())); }else{ diagramWidth.setText("5000"); } JLabel label3 = new JLabel("线上节点数"); JTextField lineNum = new JTextField(6); if (data.getLineNodeNum()!=null){ lineNum.setText(String.valueOf(data.getLineNodeNum())); }else{ lineNum.setText("10"); }*/ topJpanel.add(btnInsert, new GBC(0, 0, 1, 1).setAnchor(GBC.SOUTHEAST).setInsets(5)); topJpanel.add(btnImport, new GBC(1, 0, 1, 1).setAnchor(GBC.SOUTHEAST).setInsets(5)); topJpanel.add(btnSave, new GBC(2, 0, 2, 1).setAnchor(GBC.SOUTHWEST).setInsets(5)); // 创建子表格 List columnDto = new ArrayList<>(); List list = level2ListService.getList(data.getId()); //columnDto.add(new ColumnDto("ID", "id", -1, null,false)); /* List buttonList = new ArrayList<>(); buttonList.add(new TableButton("del", "删除"));*/ List buttonList = new ArrayList<>(); buttonList.add(new TableButton("del", "删除")); columnDto.add(new ColumnDto("序号", "", 50, "autoCreate", true, null,null)); //columnDto.add(new ColumnDto("工程专业", "majorName", 180, null, false, null,null)); columnDto.add(new ColumnDto("节点名称", "ProcessName", 160, null, true, null,null)); columnDto.add(new ColumnDto("要求完成时间", "requiredCompletionTime", 120, "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); DjJdgzNetworkLevel2List djJdgzNetworkLevel2List = list.get(row); level2ListService.deleteLogic(djJdgzNetworkLevel2List.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(); DjJdgzNetworkLevel2 djJdgzNetworkLevel2 = level2Service.get(data.getId()); graph = netWorkDiagramService.getCsDiagram(graph,djJdgzNetworkLevel2.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 DjJdgzNetworkLevel2List()); } }); 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(list,subTable,columnDto); level2ListService.save(list,data.getId(),diagram, finalGraph); JOptionPane.showMessageDialog(null, "保存成功", "提示", JOptionPane.WARNING_MESSAGE); } }); btnImport.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { importService.FileUpload(data.getId(),columnDto,subTable,diagram,finalGraph); } }); } }