JTable removeRow(),删除错误的行
我有一个JTable,我需要删除一行,即选中的行。
首先,我得到了表模型:
DefaultTableModel model = (DefaultTableModel) table.getModel();
然后是所选行(如果选择了第二行,则返回1,这是可以理解的,因为行从零开始):
int selectedRow = table.getSelectedRow();
然后我尝试删除该行:
model.removeRow(selectedRow);
然后我再次设置表模型:
table.setModel(model);
这实现了删除一个完全随机的行。 我根本无法理解为什么。 我已经使用table.setRowSorter(sorter)在某个时候对表进行了排序,但我不知道为什么这应该是一个问题。 如果绝对需要SSCCE请告诉我,因为我需要修改很多代码才能生成一个。
注意:这两行返回的值不同:
System.out.println(table.getValueAt(selectedRow, 1)); System.out.println(model.getValueAt(selectedRow, 1));
如果是JTable
过滤或排序,那么您可以转换
int modelRow = convertRowIndexToModel(row);
JTable.getSelectedRow
返回的索引是一个view
索引:它是表中最终用户看到的行的索引。 它与模型索引不同,因为如果对表进行排序,模型中的索引不会更改,但视图中的索引会发生变化。 因此,您必须始终使用JTable.convertRowIndexToModel
从视图索引中获取模型索引。
请注意,必须对列进行相同操作,因为用户可能会选择对列进行重新排序。
此外,每次删除行时都不必再次设置模型。 相反,您的模型应该触发TableModelEvent以通知视图有关删除。 请参见AbstractTableModel.fireTableRowsDeleted
。