使用AbstractTableModel在已排序的JTable中删除和添加行

时间:2016-10-12 14:01:48

标签: java swing sorting jtable abstracttablemodel

我有一个使用AbstractTableModel的JTable,我使用:

激活了sort
table.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)。我使用convertRowIndexToModelconvertRowIndexToView尝试了几种组合但没有成功。重点是从列表中删除时使用正确的索引,并在视图侧显示正确的...

编辑:调试后,问题在于使用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);
}

现在问题是在更改之后,排序部分丢失了。在随机位置只改变了几行?

0 个答案:

没有答案