jinlin
2025-04-28 efce7ce3e63712ecc8b4c3039a73b508fc3ea880
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
package com.example.client.service;
 
import com.example.client.dto.ColumnDto;
import com.example.client.utils.CommonTable;
import com.example.client.utils.Compute;
import com.example.server.progressTrack.Dto.DiagramNodeDto;
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.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
 
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.ArrayList;
import java.util.List;
 
 
@Service
public class Level2ViewService {
    @Autowired
    private DjJdgzNetworkLevel2Service level2Service;
    @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> columnDto = new ArrayList<>();
        List<DjJdgzNetworkLevel1> 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("序号", "", 120, "autoCreate", false, null, null));
        columnDto.add(new ColumnDto("工程", "ProjectName", 270, null, false, null, null));
        //columnDto.add(new ColumnDto("一级节点", "processName", 125, 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();
 
        List<DiagramNodeDto> list2 = level1Service.getNodeList(list.get(0).getId());
        List<DiagramNodeDto> list22 = level1Service.getNodeList2(list.get(0).getId());
 
        String json = netWorkDiagramService.createSimpleDiagram(list2);
        List<NetworkNodeStatusDto> nodeStatusList = level1Service.getNodeStatus(list.get(0).getId());
 
        graph = netWorkDiagramService.getCsDiagram(graph, json, nodeStatusList, diagram.getPreferredSize().width, diagram.getPreferredSize().height,list22);
 
        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();
 
                    List<DiagramNodeDto> list2 = level1Service.getNodeList(list.get(r).getId());
 
                    String json = netWorkDiagramService.createSimpleDiagram(list2);
                    List<NetworkNodeStatusDto> nodeStatusList = level1Service.getNodeStatus(list.get(r).getId());
                    List<DiagramNodeDto> list22 = level1Service.getNodeList2(list.get(r).getId());
                    mxGraph csDiagram = netWorkDiagramService.getCsDiagram(graph2[0], json, nodeStatusList, diagram.getPreferredSize().width, diagram.getPreferredSize().height,list22);
                    if (StringUtils.isNotBlank(json)) {
                        graph2[0] = csDiagram;
                    } else {
                        graph2[0].removeCells(graph2[0].getChildVertices(graph2[0].getDefaultParent()));
                    }
                }
            }
        });
 
        return panel;
    }
 
}