package com.example.client.service; import com.example.client.dto.ColumnDto; import com.example.client.utils.CommonTable; import com.example.server.progressTrack.Dto.NetworkNodeStatusDto; import com.example.server.progressTrack.model.DjJdgzNetworkLevel1; import com.example.server.progressTrack.model.DjJdgzNetworkLevel2; import com.example.server.progressTrack.service.DjJdgzNetworkLevel1Service; import com.example.server.progressTrack.service.DjJdgzNetworkLevel2Service; import com.example.server.progressTrack.service.NetWorkDiagramService; 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 java.awt.*; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseWheelEvent; import java.awt.event.MouseWheelListener; import java.util.ArrayList; import java.util.List; @Service public class Level2ViewService { @Autowired private DjJdgzNetworkLevel2Service level2Service; @Autowired private NetWorkDiagramService netWorkDiagramService; public JPanel createTable(Integer width, Integer height) { height = height - 100; JPanel panel = new JPanel(); JPanel jLeft = new JPanel(new BorderLayout()); jLeft.setPreferredSize(new Dimension(width / 4 - 20, height)); JPanel diagram = new JPanel(new BorderLayout()); diagram.setPreferredSize(new Dimension(width - width / 4, height)); // 创建子表格 List columnDto = new ArrayList<>(); List list = level2Service.getList(null); //columnDto.add(new ColumnDto("ID", "id", -1, null,false)); columnDto.add(new ColumnDto("序号", "", width / 10 - 10, "autoCreate", false, null,null)); columnDto.add(new ColumnDto("工程", "ProjectName", width / 8, null, false, null,null)); columnDto.add(new ColumnDto("一级节点", "processName", width / 8, null, false, null,null)); JTable subTable = CommonTable.createCommonTable(list, columnDto); subTable.setRowHeight(25); subTable.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS); JScrollPane scrollTable = new JScrollPane(subTable); jLeft.add(scrollTable, BorderLayout.CENTER); // 创建水平分割面板 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 = level2Service.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(2, 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(); DjJdgzNetworkLevel2 data = list.get(r); List nodeStatusList = level2Service.getNodeStatusData(data.getId()); graph2[0] = netWorkDiagramService.getCsDiagram(graph2[0], data.getContent(), nodeStatusList, diagram.getPreferredSize().width, diagram.getPreferredSize().height); } } }); return panel; } }