2012-11-29 59 views
0

我正在使用JTable和DefaultModel實現電子表格。我的問題是當我輸入公式時,我想讓表更新它進入model.fireupdate和table changed事件之間循環的值。 我試着刪除TableModelEvent然後添加它,但它不工作。 電子表格更新正常,因爲我在控制檯中打印新的計算值。 爲前:在公式和值之間更改時,JTable電子表格會永久循環

我在一個單元格中輸入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. 

} 

回答

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); 
}