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

时间:2015-09-25 08:25:54

标签: java jtable

我有一个jtable,包含可编辑和不可编辑的单元格。 我想基于可编辑单元格修改不可编辑的单元格,并使用一些公式。

我尝试了以下内容:

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()方法的解决方案, 但有时我需要使用两个输入单元格的组合值来生成输出单元格值,并且我可以在填充表格后添加此侦听器,但是如果我覆盖setValueAt()...则无法执行此操作。 p>

1 个答案:

答案 0 :(得分:0)

我有一个简单的解决方案来克服递归调用。您的程序将要更改的列不应与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);
               }
            }
        }
    });
}