1

我有一个 JTable,我正在动态地向该 JTable 插入行。在一些用户干预之后,将插入一个新行。然后我将调用一个函数,其参数为选定的行号,在该函数内部,我有一些代码将相应地更新同一行。每个行插入和行值更新代码将在单独的线程中运行。

public void updateRow(int row,JTable myTable)
{
  String text = "";
 //After lot of processing, setting the table cell value at the 'row' on the 4th column
  myTable.setValueAt(text, row, 4);
}

我面临的问题如下,

如果用户删除任何行,那么行的位置将会改变,此时如果函数updateRow()试图更新其他行,那么它将由于行数的变化而失败。

假设我一次有 3 行,并且每行的 updateRow 正在进行中。

updateRow(0,userTable);//For the 1st row
updateRow(1,userTable);//For the 2nd row
updateRow(2,userTable);//For the 3rd row

并假设第二行的 updateRow() 已完成。这将导致第三行的 updateRow() 函数出现问题。因为,它的行值为 '2' 。由于第 3 行被删除,因此没有第 3 行,这反过来又导致以下代码失败

myTable.setValueAt(text, row, 4);//Currently, row has the value as '2'

任何人都可以建议我如何使用行值相应地跟踪行更新,即使行的位置动态更改?

提前致谢。

4

1 回答 1

2

正如@mKorbel 在评论中所建议的那样,直接对模型进行操作,而不是依赖于视图的行号;如果您更改模型,视图将跟随。正如这里所讨论的,“JTable提供从模型坐标转换为视图坐标的方法——convertColumnIndexToView并且convertRowIndexToView——以及从视图坐标转换为模型坐标的方法——convertColumnIndexToModelconvertRowIndexToModel.

于 2013-03-21T09:32:07.453 回答