我有一个使用AbstractTableModel的JTable,我使用:
激活了sorttable.setAutoCreateRowSorter(true);
我有自己的插入和删除功能,只要表没有排序就可以正常工作。
private void insertLine(JTable t)
{
int posInsert = t.getSelectedRow();
Group v = new Group("group", "name","val");
list.add(pos, v);
GroupTableModel model = (GroupTableModel) t.getModel();
model.fireTableRowsInserted(posInsert + 1, posInsert + 1);
}
private void deleteLine(JTable t)
{
int posDel = t.getSelectedRow();
if (posDel != -1)
{
list.remove(pos);
GroupTableModel model = (GroupTableModel) t.getModel();
model.fireTableRowsDeleted(posDel, posDel);
}
}
list是ArrayList<Group>
,其中包含JTable中显示的数据
当表格被排序时,它会删除错误的行,并插入错误的位置(不是选中的+ 1)。我使用convertRowIndexToModel
和convertRowIndexToView
尝试了几种组合但没有成功。重点是从列表中删除时使用正确的索引,并在视图侧显示正确的...
编辑:调试后,问题在于使用convertRowIndexToView
。 selectedRow应该用于触发更改convertRowIndexToView
。现在我在更新我的方法时有正确的内容,如下所示(删除的逻辑相同):
private void insertLine(JTable t)
{
int posInsert = t.getSelectedRow();
int modelPosInsert = t.convertRowIndexToModel(posInsert);
Group v = new Group("group", "name","val");
list.add(modelPosInsert, v);
GroupTableModel model = (GroupTableModel) t.getModel();
model.fireTableRowsInserted(posInsert + 1, posInsert + 1);
}
现在问题是在更改之后,排序部分丢失了。在随机位置只改变了几行?