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;
|
}
|
|
}
|