Как удалить выбранные строки из JTable? - PullRequest
14 голосов
/ 17 марта 2009

Я пробовал это:

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

Но иногда он остается там. В чем может быть проблема?

Ответы [ 17 ]

19 голосов
/ 30 января 2011

Это не работает, это лучше:

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);
   }
}
9 голосов
/ 07 июля 2011
int[] selectedRows = getTable().getSelectedRows();
        if (selectedRows.length > 0) {
            for (int i = selectedRows.length - 1; i >= 0; i--) {
                tableModel.removeRow(selectedRows[i]);
            }
        }
6 голосов
/ 15 сентября 2011

Это сработало для меня

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

    m_tableModel.removeRow(table.getSelectedRow());
}
2 голосов
/ 01 сентября 2014
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]);    
    }
}

Работа с сортировкой, перемещением столбцов, множественным выделением и т. Д.

2 голосов
/ 20 июля 2017

Потоковое решение Java 8:

IntStream.of(table.getSelectedRows())
            .boxed()
            .sorted(Collections.reverseOrder())
            .forEach(model::removeRow);

вкладка JTable;
Модель DefaultTableModel;

2 голосов
/ 17 ноября 2009

Почему бы просто не использовать это,

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();
}
1 голос
/ 27 марта 2014
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();
    }

}
0 голосов
/ 12 сентября 2018

Приведенное выше потоковое решение не учитывает сортировку, его можно исправить следующим образом:

        IntStream.of(table.getSelectedRows())
            .boxed().map(i -> table.convertRowIndexToModel(i))
            .sorted(Collections.reverseOrder())
            .forEach(((DefaultTableModel)table.getModel())::removeRow);
0 голосов
/ 17 мая 2011

Я посмотрел на все решения, но есть некоторые исключения, поэтому я хотел бы добавить этот ответ.

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();
    }
}
0 голосов
/ 16 января 2018

Это работает для меня:

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)]));
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...