使用AbstractTableModel从JTable中删除或添加行

时间:2013-05-30 04:07:41

标签: java swing jtable abstracttablemodel

我一直试图在从抽象表模型中插入或删除项目后更新表,但每当我这样做时,不是删除旧记录并替换为新记录,旧行保留并创建所有行再次没有删除旧的..所以我得到重复的项目,这是我使用的代码: 对于插入的数据:

TestModel tm = new TestModel() ;

                    tm.fireTableRowsInserted(records.length, records.length);

并删除数据:

TestModel tm = new TestModel() ;
                    tm.fireTableRowsDeleted(records.length, records.length);

如何解决这个问题的任何线索? 任何帮助是极大的赞赏! 亲切的问候, Romulo Romero

1 个答案:

答案 0 :(得分:1)

创建一个包含布尔列的表。由于使用此布尔列,您可以删除选定要删除的行。就像下面的屏幕截图一样,

enter image description here

然后在TableModel中制作一个List<StudentDO>,以便它能保存所有的表数据。

添加一行:

要添加行,只需创建一个新的StudentDO并将其发送到表模型,模型addRow方法将该对象添加到表列表中。

删除行:

对于删除行只需调用一个删除方法,这应该在TableModel中触发事件,这样模型应该遍历所有行并检查选择哪一行并删除它。

注意:删除行应该从最后而不是从列表的开头完成。

<强> StudentTableModel.java

class StudentTableModel {

    // Required methods code goes here.  

    public void addRow(StudentDO do1) {
        data.add(do1);
        fireTableRowsInserted(getRowCount() - 1, getRowCount() - 1);
    }

    public void deleteRow() {
           for(int rowIndex = data.size() - 1; rowIndex >= 0; rowIndex--) {
            if(data.get(rowIndex).isSelect()) {
          data.remove(rowIndex);
         }
           }
     fireTableDataChanged();
    }
}

P.S: fireXXXMethods只能在模型中调用。因为任何数据更改都将负责模型。