如何从JTable中删除选定的行?

Pen*_*ant 14 jtable

我试过这个:

public void removeSelectedFromTable(JTable from)
{
    int[] rows = from.getSelectedRows();
    TableModel tm= from.getModel();

    while(rows.length>0)
    {
        ((DefaultTableModel)tm).removeRow(from.convertRowIndexToModel(rows[0]));

        rows = from.getSelectedRows();
    }
    from.clearSelection();
}
Run Code Online (Sandbox Code Playgroud)

但是,它有时会留下一个.可能是什么问题?

Ale*_*dro 19

它不起作用,这是更好的:

public void removeSelectedRows(JTable table){
   DefaultTableModel model = (DefaultTableModel) this.table.getModel();
   int[] rows = table.getSelectedRows();
   for(int i=0;i<rows.length;i++){
     model.removeRow(rows[i]-i);
   }
}
Run Code Online (Sandbox Code Playgroud)

  • 因此,您减去 i 以考虑已删除行的索引差异,但假设已删除的行位于“即将”删除的行上方。这总是一个安全的假设吗? (2认同)
  • -1 不适用于排序。你应该使用 table.convertRowIndexToModel(index); (2认同)

小智 9

int[] selectedRows = getTable().getSelectedRows();
        if (selectedRows.length > 0) {
            for (int i = selectedRows.length - 1; i >= 0; i--) {
                tableModel.removeRow(selectedRows[i]);
            }
        }
Run Code Online (Sandbox Code Playgroud)


小智 6

这对我有用

int numRows = table.getSelectedRows().length;
for(int i=0; i<numRows ; i++ ) {

    m_tableModel.removeRow(table.getSelectedRow());
}
Run Code Online (Sandbox Code Playgroud)


Dmi*_*yuk 5

Java 8+ 流媒体解决方案:

JTable 表;
DefaultTableModel 模型 = (DefaultTableModel) table.getModel();

IntStream.of(table.getSelectedRows())
            .boxed()
            .sorted(Collections.reverseOrder())
            .map(table::convertRowIndexToModel) // support for sorted table
            .forEach(model::removeRow);
Run Code Online (Sandbox Code Playgroud)


Cha*_*ntz 1

为什么不直接使用这个,

public void removeSelectedFromTable(JTable from)
{
        int[] rows = from.getSelectedRows();
        TableModel tm = (DefaultTableModel) from.getModel();


        for (int row : rows) {
            tm.removeRow(from.convertRowIndexToModel(row));
        }

        from.clearSelection();
}
Run Code Online (Sandbox Code Playgroud)