根据其他单元格值修改一些 jtable 单元格值

Modify some jtable cell values based on other cell values

我有一个 jtable,带有 editable 和非 editable 单元格。 我想根据 editable 单元格和一些公式修改非 editable 单元格。

我尝试了以下方法:

int input_column = 0;
int output_column = 5;
table.getModel().addTableModelListener(new TableModelListener() {
        public void tableChanged(TableModelEvent e) {

            int rowIndex = pricestable.getSelectedRow();
            int columnIndex = pricestable.getSelectedColumn();

            if (columnIndex == input_column) {
                String value1 = table.getModel().getValueAt(rowIndex, input_column).toString();
                //do some operations with value1 convert, it to outputvalue
                table.setValueAt(outputvalue, rowIndex, output_column);
            }
        }

    });

问题是,tablechanged 事件将被递归调用... 有谁知道我做错了什么,或者有更好的解决方案吗?

我见过一些覆盖 setValueAt() 方法的解决方案, 但有时我需要使用两个输入单元格的组合值来生成输出单元格值,我可以在填充 table 后添加此侦听器,但如果覆盖 setValueAt() 则无法执行此操作。 ..

我有一个简单的解决方案来克服递归调用。 addTableListener 不会对将由您的程序更改的列感兴趣。 'colDirty' 是宽度为 0px 的列;

示例代码:

private void addTableListener() {
    tableModel.addTableModelListener(new TableModelListener() {

        @Override
        public void tableChanged(TableModelEvent tme) {
            if (tme.getType() == TableModelEvent.UPDATE) {
               if (tme.getColumn()!=colDirty) { // colDirty = column no which I changed value programatically
                    tableModel.setValueAt(true, tme.getFirstRow(), colDirty);
               }
            }
        }
    });
}