17

我试过这个:

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();
}

但是,它有时会留下一个仍然存在。可能是什么问题?

4

18 回答 18

24

它不起作用,这更好:

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);
   }
}
于 2011-01-30T16:22:38.570 回答
11
int[] selectedRows = getTable().getSelectedRows();
        if (selectedRows.length > 0) {
            for (int i = selectedRows.length - 1; i >= 0; i--) {
                tableModel.removeRow(selectedRows[i]);
            }
        }
于 2011-07-07T14:23:25.527 回答
7

这对我有用

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

    m_tableModel.removeRow(table.getSelectedRow());
}
于 2011-09-15T16:43:56.550 回答
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);
于 2017-07-20T09:01:58.410 回答
3
removeRows: {
    int[] lines = t.getSelectedRows();
    if(lines.length==0)
        break removeRows;
    for(int i=0; i<lines.length; i++) {
        lines[i]=t.convertRowIndexToModel(lines[i]);
    }
    Arrays.sort(lines);
    for(int i=lines.length-1; i>=0; i--) {
        dtm.removeRow(lines[i]);    
    }
}

使用排序、移动列、多选等。

于 2014-09-01T12:29:47.067 回答
2

为什么不直接使用这个,

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();
}
于 2009-11-17T18:17:23.880 回答
2

试试这是完美的工作和简单

DefaultTableModel df1 = (DefaultTableModel) jTable1.getModel();
    int rs[] = jTable1.getSelectedRows();
    for (int i = rs.length-1; i >=0 ; i--) {

        int k = rs[i];

        df1.removeRow(k);

    }
于 2019-09-25T06:48:28.220 回答
1

这段代码对我有用!

DefaultTableModel model = (DefaultTableModel) Table.getModel();
    int nbrrow=Table.getRowCount();

        if(nbrrow>=1){
            int[] rows = Table.getSelectedRows();
            if(rows.length>=1){
            if(Table.getModel().isCellEditable(Table.getSelectedRow(),Table.getSelectedColumn())
                       &&Table.isEditing()==true)
               {
                   Table.getCellEditor().stopCellEditing();
                    for(int i=0;i<rows.length;i++){ 
                     model.removeRow(rows[i]-i);
                   }
               }else{
                            for(int i=0;i<rows.length;i++){ 
                             model.removeRow(rows[i]-i);
                           }

                }
            for(int i=0;i<Table.getRowCount();i++){
                           model.setValueAt(i, i, 0);
                       }
              Table.revalidate();
              Table.repaint();
            }
        }
于 2013-03-28T21:53:11.370 回答
1
int[] selectedRows = table.getSelectedRows();
List<Object> selectedObjects = new ArrayList<Object>();
for (int row : selectedRows) {
    selectedObjects.add(tableModel.getObject(row));
}
for (Object obj : selectedObjects) {
    tableModel.removeObject(obj);
}

// 我的 TableModel 是这个的子类:

public abstract class ListTableModel<T> extends AbstractTableModel {

    private List<T> data;

    public void setData(List<T> data) {
        this.data = data;
    }

    public T getObject(int row) {
        return data.get(row);
    }

    @Override
    public int getRowCount() {
        return data.size();
    }

}
于 2014-03-27T19:18:10.513 回答
0

尝试这个:

int selectedIndex = table_.getSelectedRow();
while (selectedIndex >= 0) {
    int modelIndex = table_.convertRowIndexToModel(selectedIndex);
    tableModel_.removeRow(modelIndex);

    selectedIndex = table_.getSelectedRow();
}
于 2014-12-09T18:49:37.180 回答
0

尝试这个

    public void removeSelectedFromTable(JTable table) {

        DefaultTableModel model = (DefaultTableModel) table.getModel();
        int indexes[] = table.getSelectedRows(); 
        int res = 0;
        for(int i = 0; i < indexes.length; i++) {
            res += (i>0)?(indexes[i]-indexes[i-1]-1):0;
            int index = table.convertRowIndexToModel(indexes[0]+res)
            model.removeRow(index);
        }
    }
于 2014-02-06T00:40:56.127 回答
0

下面的代码将起作用:

do {
    ((DefaultTableModel) jXTable1.getModel()).removeRow(jXTable1.getSelectedRows()[0]);
} while (jXTable1.getSelectedRowCount() > 0);
于 2016-12-26T06:32:55.647 回答
0

这对我行得通:

if(tablaNotif.getSelectedRows().length>0){
    int[] rows = tablaNotif.getSelectedRows();
    if(tablaNotif.getSelectedRows().length<2) {
        modelo.remove(tablaNotif.convertRowIndexToModel(rows[0]));
    } else{
        for(int i = 0; i<tablaNotif.getSelectedRows().length;i++) {
            modelo.remove(tablaNotif.convertRowIndexToModel(rows[i]));
        }
        modelo.remove(tablaNotif.convertRowIndexToModel(rows[(tablaNotif.getSelectedRows().length-1)]));
    }
}
于 2018-01-16T09:55:00.167 回答
0

上面的流解决方案没有考虑排序,可以这样修复:

        IntStream.of(table.getSelectedRows())
            .boxed().map(i -> table.convertRowIndexToModel(i))
            .sorted(Collections.reverseOrder())
            .forEach(((DefaultTableModel)table.getModel())::removeRow);
于 2018-09-12T14:36:08.873 回答
0

它被我唤醒了。在此处输入代码

public void removeSelectedFromTable(JTable from)
    {
        int[] rows = from.getSelectedRows();
        DefaultTableModel tm = (DefaultTableModel) from.getModel();
        for (int i = rows.length-1; i >= 0; i--) {
            tm.removeRow(rows[i]);
        }
}
于 2016-01-10T07:13:13.727 回答
-2

该解决方案适用于标题排序并自动更新表(即:不需要重新构建它)。

“Collecions.sort in reverse order”可以避免 IndexOutOfBondException。

private void deleteSelectedRows() {
        int[] selectedRows = table.getSelectedRows();
        table.clearSelection();

        // get model rows
        List<Integer> selectedModelRows = new LinkedList<Integer>();
        for (int i =`enter code here` 0; i < selectedRows.length; i++) {
            selectedModelRows.add(table.convertRowIndexToModel(selectedRows[i]));
        }

        Collections.sort(selectedModelRows, Collections.reverseOrder());

        for (int selectedModelRow : selectedModelRows) {
            tableModel.removeRow(selectedModelRow);
            tableModel.fireTableRowsDeleted(selectedModelRow, selectedModelRow);
        }
}
于 2012-03-12T17:55:33.520 回答
-2

我查看了所有解决方案,但有一些例外,所以我想添加这个答案。

for (int i = 0; i < raws.length; i++) {
    System.out.println("I : " + i);
    for (int j = 1; j <= 1; j++) {
        defaultTableModel.removeRow(0);
        jTStockJournal.clearSelection();
        defaultTableModel.fireTableDataChanged();
    }
}
于 2011-05-17T15:00:51.227 回答
-2

私人无效 jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
DefaultTableModel defaultModel = (DefaultTableModel) jTable1.getModel(); 向量新行 = 新向量();defaultModel.removeRow(jTable1.getSelectedRow()); 我 = 我 - 1; }

于 2015-07-28T03:17:59.363 回答