如何保留选定的行并从jtable中删除其他行?

时间:2018-04-09 07:45:19

标签: java swing jtable rows defaulttablemodel

我希望将所有选定的行保留在jtable中并删除其余的行。我找到了许多关于如何删除所选行的答案,但我如何才能删除未选择的行。请帮忙

3 个答案:

答案 0 :(得分:1)

一些提示:

  1. 不要担心所选行的数组。从模型中添加/删除行时,将自动调整所选行的索引。只需开始从末尾删除行,检查每行的选定状态。

  2. 如果对表进行排序或过滤,请将视图索引转换为模型索引。

  3. 然后基本代码是:

    DefaultTableModel model = (DefaultTableModel)table.getModel();
    
    for (int i = model.getRowCount() -1; i >=0; i--)
    {
        if (! table.isRowSelected(i))
            model.removeRow( table.convertRowIndexToModel(i) );
    }
    

答案 1 :(得分:0)

我根本无法测试它,但我希望它有所帮助:

public void removeSelectedRows(JTable table){
    DefaultTableModel model = (DefaultTableModel) this.table.getModel();
    int[] rows = table.getSelectedRows();
    int rowsCount = table.getRowCount();
    int deletedRows = 0;
    for(int i=rowsCount-1;i>-1;i--){
        if(i!=rows[rowsCount-1-deletedRows]){ //Check non-selected rows
            model.removeRow(i);
            deletedRows++;
        }
    }
}

也许有一种最简单的方法,但这应该可以正常工作。

答案 2 :(得分:0)

我找到了一种更方便的方式,可以很好地处理所有可能的情况。

@Override
public void actionPerformed(ActionEvent e) {
    int[] lines = table.getSelectedRows();
    for (int i = 0; i < lines.length; i++) {
        lines[i] = table.convertRowIndexToModel(lines[i]);
    }
    List<Integer> l = new ArrayList<Integer>();
    for (int i : lines) {
        l.add(i);
    }
    for (int i = table.getRowCount() - 1; i >= 0; i--) {
        if (!l.contains(i)) {
            model.removeRow(i);
        }
    }
}

我认为它可能会缩小一点,或者可以将一些代码移动到一个自己的方法,这使它看起来更干净,但它的工作