0

我正在使用 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.

}
4

1 回答 1

0

嗯,这就是答案。我可以发誓我试过这个!!!它也在我的评论中,但我做错的是在删除表侦听器时没有更新表。奇怪的是,我认为它也会删除模型侦听器!

@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);
}
于 2012-11-30T00:01:41.663 回答