jar
jinlin
2025-03-04 23f02e6b45dd7cf0ab2e7827144913ca59575ea4
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
package com.example.client.utils;
 
import com.example.server.sysOss.model.SysOss;
import com.example.server.sysOss.service.SysOssService;
import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.table.DefaultTableModel;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;
 
public class TableCellEditorButton extends DefaultCellEditor {
    private final SysOssService sysOssService; // 通过构造函数注入
    private JButton btn;
    private Integer curRow = -1;
    private JTable jtable;
 
    public TableCellEditorButton(List<SysOss> ossList, SysOssService sysOssService) {
        super(new JTextField());
        this.sysOssService = sysOssService; // 手动注入
        this.setClickCountToStart(1); // 设置点击一次就激活
 
        btn = new JButton("删除");
        btn.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                JButton btn = (JButton) (e.getSource());
                ChangeEvent ce = new ChangeEvent(btn);
                jtable.editingStopped(ce); // 停止编辑
 
                DefaultTableModel model = (DefaultTableModel) jtable.getModel();
                model.removeRow(curRow); // 从表格模型中移除行
 
                if (ossList != null && curRow < ossList.size()) {
                    SysOss oss = ossList.get(curRow);
                    if (oss.getId() != null) {
                        sysOssService.deleteLogic(oss.getId()); // 调用服务删除逻辑
                    }
                    ossList.remove(curRow); // 从列表中移除
                }
 
                model.fireTableDataChanged(); // 通知表格数据已更改
                jtable.repaint(); // 重新绘制表格
            }
        });
    }
 
    @Override
    public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
        curRow = row; // 保存当前行号
        jtable = table; // 保存表格引用
        return btn; // 返回按钮组件
    }
}