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.Compute; import com.example.server.progressTrack.Dto.NetworkNodeStatusDto; import com.example.server.progressTrack.model.DjJdgzNetworkLevel1; import com.example.server.progressTrack.model.DjJdgzNetworkLevel1List; import com.example.server.progressTrack.model.DjJdgzShip; import com.example.server.progressTrack.service.DjJdgzNetworkLevel1Service; import com.example.server.progressTrack.service.DjJdgzShipService; import com.example.server.progressTrack.service.NetWorkDiagramService; import com.mxgraph.swing.mxGraphComponent; import com.mxgraph.util.mxPoint; import com.mxgraph.util.mxRectangle; import com.mxgraph.view.mxGraph; import com.teamdev.jxbrowser.chromium.StopFindAction; 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.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @Service public class Level1ViewService { @Autowired private DjJdgzNetworkLevel1Service level1Service; @Autowired private NetWorkDiagramService netWorkDiagramService; public JPanel createTable(Integer width, Integer height, JFrame frame) { JPanel panel = new JPanel(new BorderLayout()); panel.setPreferredSize(new Dimension(width, height)); JPanel jLeft = new JPanel(); jLeft.setPreferredSize(new Dimension(width / 4 - 20, Compute.ComputeHeight(0, frame))); JPanel diagram = new JPanel(new BorderLayout()); diagram.setPreferredSize(new Dimension(width - width / 4, height)); // 创建子表格 List columnDto = new ArrayList<>(); List list = level1Service.getList(null); //columnDto.add(new ColumnDto("ID", "id", -1, null,false)); if (list == null || list.size() == 0) { JOptionPane.showMessageDialog(null, "还未录入一级网络图数据", "提示", JOptionPane.WARNING_MESSAGE); return null; } columnDto.add(new ColumnDto("序号", "", width / 8 - 10, "autoCreate", false, null, null)); columnDto.add(new ColumnDto("工程", "ProjectName", width / 8, null, false, null, null)); JTable subTable = CommonTable.createCommonTable(list, columnDto); subTable.setRowHeight(25); subTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); JScrollPane scrollTable = new JScrollPane(subTable); scrollTable.setPreferredSize(new Dimension(width / 4 - 20, Compute.ComputeHeightWithScroll(0, frame))); jLeft.add(scrollTable); frame.addComponentListener(new ComponentAdapter() { @Override public void componentResized(ComponentEvent e) { jLeft.setPreferredSize(new Dimension(width / 4 - 20, Compute.ComputeHeight(0, frame))); scrollTable.setPreferredSize(new Dimension(width / 4 - 20, Compute.ComputeHeightWithScroll(0, frame))); jLeft.revalidate(); jLeft.repaint(); scrollTable.revalidate(); scrollTable.repaint(); } }); // 创建水平分割面板 JSplitPane hSplitPane = new JSplitPane( JSplitPane.HORIZONTAL_SPLIT, jLeft, diagram ); hSplitPane.setDividerLocation(width / 4); hSplitPane.setDividerSize(10); hSplitPane.setOneTouchExpandable(true); hSplitPane.setContinuousLayout(true); panel.add(hSplitPane, BorderLayout.CENTER); mxGraph graph = new mxGraph(); String json = list.get(0).getContent(); List nodeStatusList = level1Service.getNodeStatusData(list.get(0).getId()); graph = netWorkDiagramService.getCsDiagram(graph, json, nodeStatusList, diagram.getPreferredSize().width, diagram.getPreferredSize().height); 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); // 缩放视图 } }); final mxGraph[] graph2 = {graph}; subTable.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { // 仅当鼠标左键单击时响应 if (e.getButton() == MouseEvent.BUTTON1) { // 得到选中的行列的索引值 int r = subTable.getSelectedRow(); DjJdgzNetworkLevel1 data = list.get(r); List nodeStatusList = level1Service.getNodeStatusData(data.getId()); mxGraph csDiagram = netWorkDiagramService.getCsDiagram(graph2[0], data.getContent(), nodeStatusList, diagram.getPreferredSize().width, diagram.getPreferredSize().height); if (nodeStatusList != null && nodeStatusList.size() > 0) { graph2[0] = csDiagram; } else { graph2[0].removeCells(graph2[0].getChildVertices(graph2[0].getDefaultParent())); } } } }); return panel; } }