我正在使用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.
}
答案 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);
}