在公式和值之间进行更改时,JTable电子表格会永远循环

时间:2012-11-29 23:28:48

标签: java jtable

我正在使用JTable和DefaultModel实现电子表格。我的问题是当我输入一个公式并且我想让表更新它进入model.fireupdate和表更改事件之间的循环的值。 我尝试删除TableModelEvent,然后添加它,但它无法正常工作。 电子表格更新正常,因为我在控制台中打印新的计算值。 例如:

我在单元格中输入2 + 3

控制台显示电子表格单元格值= 5正常工作

Jtable单元格仍显示2 + 3并导致异常,因为我正在尝试更新单元格!

感谢您的输入。

public void tableChanged(TableModelEvent e) {

    final int i = e.getFirstRow();
    final int j = e.getColumn();
    TableModel model = (TableModel) e.getSource();

    final Object data = model.getValueAt(i, j);

    if (e.getType() == TableModelEvent.UPDATE) {
        my_spreadSheet.editCell(i, j, (String) data); // updating spreadsheet cell here 
                                                      // and calculating it  This works ok
    }

     my_table.setValueAt(                                        // trying to update the jtable
     my_spreadSheet.getCellContent(jtbl_row, jtbl_col), i, j);   // here causes error.

}

1 个答案:

答案 0 :(得分:0)

那么这就是答案。我发誓我试过这个!!!它也在我的评论中,但我做错了是在删除表监听器时没有更新表。 Wierd我认为它也会删除模型监听器!

@Override
public void tableChanged(TableModelEvent e) {
     my_table.getModel().removeTableModelListener(this);

    final int i = e.getFirstRow();
    final int j = e.getColumn();
    TableModel model = (TableModel) e.getSource();

    final Object data = model.getValueAt(i, j);


    if (e.getType() == TableModelEvent.UPDATE) {
        my_spreadSheet.editCell(i, j, (String) data);
        my_table.setValueAt(
                my_spreadSheet.getCellValue(i, j), i, j);

    }

    my_table.getModel().addTableModelListener(this);
}