删除连续行后动态更新JTable行

时间:2013-03-21 05:19:10

标签: java multithreading swing concurrency jtable

我有一个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()尝试更新其他行,则由于行计数的更改而失败。< / p>

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

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

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

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

有人可以建议我如何相应地跟踪行更新和行值,即使行的位置动态变化了吗?

提前致谢。

1 个答案:

答案 0 :(得分:2)

不是依赖于视图的行号,而是直接对模型进行操作,如@mKorbel的评论所示;如果您更改模型,视图将会跟随。正如所讨论的here,“JTable提供了从模型坐标转换为视图坐标的方法 - convertColumnIndexToViewconvertRowIndexToView - 并且可以从视图坐标转换为模型坐标 - {{1 }和convertColumnIndexToModel