package com.example.client.service; import com.example.client.dto.ColumnDto; import com.example.client.dto.JComboBoxItem; import com.example.client.model.TableButton; import com.example.client.utils.BoxIteUtils; import com.example.client.utils.CommonTable; import com.example.client.utils.Compute; import com.example.client.utils.GBC; import com.example.server.cabin.service.CabinService; import com.example.server.progressTrack.model.DjJdgzDismantTrack; import com.example.server.progressTrack.model.DjJdgzNetworkLevel3; import com.example.server.progressTrack.model.DjJdgzTrackRecord; import com.example.server.progressTrack.service.DjJdgzDismantTrackService; import com.example.server.progressTrack.service.DjJdgzNetworkLevel3Service; import com.example.server.teamGroup.service.SysTeamGroupClassService; import com.example.server.user.model.SysUser; import com.example.server.utils.CacheUtils; import org.apache.commons.lang3.StringUtils; 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 java.awt.*; import java.awt.event.*; import java.util.ArrayList; import java.util.List; @Service public class SubunitAddOrUpdate { @Autowired private DjJdgzNetworkLevel3Service level3Service; @Autowired private SysTeamGroupClassService sysTeamGroupClassService; @Autowired private DjJdgzDismantTrackService djJdgzDismantTrackService; @Autowired private ImportDismantTrackService importDismantTrackService; @Autowired private CabinService cabinService; private List columnDto; private JTable trackTable; private DjJdgzNetworkLevel3 nowLevel3; private JFrame nowFrame; public JPanel createTrack(Integer width, Integer height, DjJdgzNetworkLevel3 djJdgzNetworkLevel3, JFrame frame) { nowLevel3 = djJdgzNetworkLevel3; nowFrame = frame; JPanel panel = new JPanel(new BorderLayout()); panel.setPreferredSize(new Dimension(width, height)); JPanel topJpanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); topJpanel.setPreferredSize(new Dimension(width - 10, 40)); JPanel centerJpanel = new JPanel(); centerJpanel.setPreferredSize(new Dimension(width - 20, Compute.ComputeHeight(40, nowFrame))); panel.add(topJpanel, BorderLayout.NORTH); panel.add(centerJpanel, BorderLayout.CENTER); JButton btnInsert = new JButton("新增"); topJpanel.add(btnInsert); JComboBoxItem[] cabinList = cabinService.getList(); List list = djJdgzDismantTrackService.getList(nowLevel3.getId(), null); List buttonList = new ArrayList<>(); buttonList.add(new TableButton("edit", "编辑")); buttonList.add(new TableButton("del", "删除")); // 创建左侧表格 columnDto = new ArrayList<>(); //columnDto.add(new ColumnDto("ID", "id", -1, null,false)); columnDto.add(new ColumnDto("序号", "", 200, "autoCreate", false, null, null)); columnDto.add(new ColumnDto("舱室", "cabinId", 200, "dict", false, null, cabinList)); columnDto.add(new ColumnDto("部件名称", "name", 200, null, false, null, null)); columnDto.add(new ColumnDto("操作", "", 200, "", true, buttonList, null)); trackTable = CommonTable.createCommonTable(list, columnDto); trackTable.setPreferredSize(new Dimension(width, height)); trackTable.setRowHeight(25); trackTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); tableModelListener(trackTable, list, columnDto); btnInsert.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { nowFrame.setEnabled(false); SysUser user = (SysUser) CacheUtils.get("user", "user"); if (user == null) { nowFrame.setEnabled(true); JOptionPane.showMessageDialog(null, "当前用户已失效请重新登录", "提示", JOptionPane.WARNING_MESSAGE); return; } if (user.getTeamgroup() == null || user.getTeamgroup().equals(nowLevel3.getTeamgroupId().toString())) { DjJdgzDismantTrack djJdgzDismantTrack = new DjJdgzDismantTrack(); djJdgzDismantTrack.setLevel3NetworkId(nowLevel3.getId()); insert(nowFrame, djJdgzDismantTrack); } else { nowFrame.setEnabled(true); JOptionPane.showMessageDialog(null, "当前用户不可操作其他专业数据", "提示", JOptionPane.WARNING_MESSAGE); } } }); JScrollPane scrollPane = new JScrollPane(trackTable, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); scrollPane.setViewportView(trackTable); scrollPane.setPreferredSize(new Dimension(width - 20, Compute.ComputeHeightWithScroll(40, nowFrame))); centerJpanel.add(scrollPane); nowFrame.addComponentListener(new ComponentAdapter() { @Override public void componentResized(ComponentEvent e) { centerJpanel.setPreferredSize(new Dimension(width - 20, Compute.ComputeHeightWithScroll(40, nowFrame))); scrollPane.setPreferredSize(new Dimension(width - 20, Compute.ComputeHeightWithScroll(40, nowFrame))); centerJpanel.revalidate(); centerJpanel.repaint(); scrollPane.revalidate(); scrollPane.repaint(); } }); return panel; } private void insert(JFrame jFrame, DjJdgzDismantTrack data) { if (data.getLevel3NetworkId() == null) { JOptionPane.showMessageDialog(null, "没有选择设备", "提示", JOptionPane.WARNING_MESSAGE); return; } JFrame frame1 = new JFrame("新增子部件"); frame1.setSize(470, 430); frame1.setResizable(true); frame1.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); frame1.setLocationRelativeTo(null); frame1.setVisible(true); frame1.addWindowListener(new WindowAdapter() { //添加第二个界面的关闭事件: public void windowClosing(WindowEvent e) { //添加事件: jFrame.setEnabled(true);//将主界面再设置为可操作的 } }); GridBagLayout layout = new GridBagLayout(); frame1.setLayout(layout); JComboBoxItem[] cabinList = cabinService.getList(); JLabel JLabel1 = new JLabel("舱室"); JComboBox comboBox0 = new JComboBox<>(cabinList); comboBox0.setPreferredSize(new Dimension(185, 28)); comboBox0.setSelectedIndex(-1); if (data.getCabinId() != null) { comboBox0.setSelectedItem(BoxIteUtils.GetSelectItemById(cabinList, data.getCabinId())); } JLabel JLabel8 = new JLabel("子部件名称"); JTextField subunitName = new JTextField(16); if (StringUtils.isNotBlank(data.getName())) { subunitName.setText(data.getName()); } JButton btnSave = new JButton("确定"); frame1.add(JLabel1, new GBC(0, 0, 1, 1).setAnchor(GBC.SOUTHEAST).setInsets(5)); frame1.add(comboBox0, new GBC(1, 0, 1, 1).setAnchor(GBC.SOUTHWEST).setInsets(5)); frame1.add(JLabel8, new GBC(0, 1, 1, 1).setAnchor(GBC.SOUTHEAST).setInsets(5)); frame1.add(subunitName, new GBC(1, 1, 1, 1).setAnchor(GBC.SOUTHWEST).setInsets(5)); frame1.add(btnSave, new GBC(0, 2, 2, 1).setWeight(1, 0)); btnSave.addActionListener((e) -> { SysUser user = (SysUser) CacheUtils.get("user","user"); if (user==null){ JOptionPane.showMessageDialog(null, "用户失效请退出并重新登录", "提示", JOptionPane.WARNING_MESSAGE); return; } JComboBoxItem cabin = (JComboBoxItem) comboBox0.getSelectedItem(); String name = subunitName.getText(); data.setCabinId(cabin.getId()); data.setName(name); List list = new ArrayList<>(); list.add(data); djJdgzDismantTrackService.save(list); //tableModelListener(trackTable, jFrame,list,columnDto); this.refreshTable(data.getLevel3NetworkId(), null); frame1.dispose(); jFrame.setEnabled(true);//将主界面再设置为可操作的 JOptionPane.showMessageDialog(null, "保存成功", "提示", JOptionPane.WARNING_MESSAGE); }); } public void refreshTable(Long level3Id, JFrame jFrame) { nowLevel3 = level3Service.get(level3Id); List list = djJdgzDismantTrackService.getList(level3Id, null); CommonTable.refreshTable(list, columnDto, trackTable); trackTable.setRowHeight(25); trackTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); tableModelListener(trackTable, list, columnDto); } public void tableModelListener(JTable table, List list, List columnDto) { table.getModel().addTableModelListener(e -> { // 检查事件类型 if (e.getType() == TableModelEvent.UPDATE) { // 获取变化的行和列 int row = e.getFirstRow(); int column = e.getColumn(); // 获取新的值 Object newValue = table.getModel().getValueAt(row, column); // 输出变化信息 if (newValue.equals("edit")) { nowFrame.setEnabled(false); DjJdgzDismantTrack data = list.get(row); insert(nowFrame, data); } else if (newValue.equals("del")) { int n = JOptionPane.showConfirmDialog(null, "是否删除?", "提示", JOptionPane.YES_NO_OPTION); if (n == 0) { DefaultTableModel model = (DefaultTableModel) table.getModel(); DjJdgzDismantTrack data = list.get(row); djJdgzDismantTrackService.delete(data.getId()); list.remove(row); model.removeRow(row); } } System.out.println("单元格变化: 行=" + row + ", 列=" + column + ", 新值=" + newValue); } }); } }