jtable中combobox组件修改值后,整列都会被修改

我已经修改celleditor中的getComponent方法,每一行返回的是不同的combobox,现在问题是修改第一行的combobox值后整列都会修改,修改另一行的combobox值后会显示为原来的值,但是再次点击这个combobox会显示为被修改的值。
还有个问题在于combobox点击item不会触发setvalue,必须点击其他区域才会触发

提供相关代码看下,断点调试一下就清楚了。

参考GPT和自己的思路:这个问题可能是由于JTable中使用了共享单元格编辑器所致,导致修改某一单元格后整列都会被修改。解决方案是在JTable中为每一行单独设置单元格编辑器。

可以考虑实现一个自定义的单元格编辑器类,然后在JTable中为每一行单独设置该编辑器。这样就可以确保每一行都使用一个独立的单元格编辑器,避免共享单元格编辑器导致的问题。

以下是一个示例代码,可以参考实现:

public class MyTableCellEditor extends DefaultCellEditor {
    JComboBox comboBox;

    public MyTableCellEditor(JComboBox comboBox) {
        super(comboBox);
        this.comboBox = comboBox;
    }

    @Override
    public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
        // 设置当前行对应的数据
        Object rowData = table.getValueAt(row, column);
        comboBox.setSelectedItem(rowData);

        return comboBox;
    }

    @Override
    public Object getCellEditorValue() {
        // 获取修改后的值
        return comboBox.getSelectedItem();
    }
}

// 在JTable中为每一行单独设置单元格编辑器
for (int i = 0; i < rowCount; i++) {
    TableColumn column = table.getColumnModel().getColumn(columnIndex);
    JComboBox comboBox = new JComboBox(items);
    MyTableCellEditor editor = new MyTableCellEditor(comboBox);
    column.setCellEditor(editor);
}


关于另一个问题,即combobox点击item不会触发setValue,可能是由于某些事件处理方法没有正确实现或绑定。可以检查相关的事件处理方法是否正确实现和绑定,以确保combobox选择值后能够正确触发setValue方法。