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.CommonTable; import com.example.client.utils.Compute; import com.example.client.utils.GBC; 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 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.text.SimpleDateFormat; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @Service public class ShipManageService { @Autowired private DjJdgzShipService djJdgzShipService; private JTable table; private List columnDto; public void createTable(JFrame jFrame) { JFrame frame1 = new JFrame("新增一级网络图"); frame1.setSize(400, 400); 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);//将主界面再设置为可操作的 } }); JPanel topJpanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); topJpanel.setPreferredSize(new Dimension(350, 40)); topJpanel.setBackground(Color.WHITE); JPanel centerJpanel = new JPanel(); centerJpanel.setPreferredSize(new Dimension(350, 350)); centerJpanel.setBackground(Color.WHITE); frame1.add(topJpanel, BorderLayout.NORTH); frame1.add(centerJpanel, BorderLayout.CENTER); List shipList = djJdgzShipService.getList(); JButton btnInsert = new JButton("新增"); JButton btnSave = new JButton("保存"); topJpanel.add(btnInsert); topJpanel.add(btnSave); List buttonList = new ArrayList<>(); buttonList.add(new TableButton("del", "删除")); columnDto = new ArrayList<>(); //columnDto.add(new ColumnDto("ID", "id", -1, null,false)); columnDto.add(new ColumnDto("序号", "", 115 , "autoCreate", false, null,null)); columnDto.add(new ColumnDto("X号", "shipNo", 115, null, true, null,null)); columnDto.add(new ColumnDto("操作", "", 115, "", true, buttonList,null)); table = CommonTable.createCommonTable(shipList, columnDto); table.setRowHeight(25); table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); tableModelListener(table,jFrame,shipList); btnInsert.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { TableModel model = table.getModel(); DefaultTableModel defaultModel = (DefaultTableModel) model; int columnCount = table.getColumnCount(); Object[] emptyRow = new Object[columnCount]; defaultModel.addRow(emptyRow); shipList.add(new DjJdgzShip()); } }); btnSave.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if (table.isEditing()) { table.getCellEditor().stopCellEditing(); } CommonTable.saveTableList(shipList,table,columnDto); djJdgzShipService.save(shipList); } }); JScrollPane scrollPane = new JScrollPane(table, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); scrollPane.setViewportView(table); scrollPane.getViewport().setBackground(Color.WHITE); scrollPane.setPreferredSize(new Dimension(350, 300)); centerJpanel.add(scrollPane); } public void tableModelListener(JTable table, JFrame jFrame, List shipList){ 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("del")) { int n = JOptionPane.showConfirmDialog(null, "是否删除?", "提示", JOptionPane.YES_NO_OPTION); if (n == 0) { DefaultTableModel model = (DefaultTableModel) table.getModel(); DjJdgzShip data = shipList.get(row); djJdgzShipService.deleteLogic(data.getId()); shipList.remove(row); model.removeRow(row); } } System.out.println("单元格变化: 行=" + row + ", 列=" + column + ", 新值=" + newValue); } }); } }