Как удалить строку из JTable в Java
Удаление строки в JTable в Java зависит от шаблона JTable. JTable используется по умолчанию DefaultTableModel. Тем не менее, вы также можете указать свой собственный Table Model.Delete в DefaultTableModel
DefaultTableModel хранит данные в массиве Vector, что упрощает удаление, удаляя только плоские элементы в этой строке с помощью метода romoveRow(int line).
import javax.swing.JFrame;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableModel;
public class JTableExample extends JFrame{
Object[][] data = {{9,8,7,6},{7,6,5},{6,5,4}};
String[] title = {"c1", "c2", "c3"};
public JTableExample(){
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
DefaultTableModel dtm = new DefaultTableModel(data, title);
table.setModel(dtm);
this.getContentPane().add(new JScrollPane(table),BorderLayout.CENTER);
//удаляем строку 2
((DefaultTableModel)table.getModel()).removeRow(1);
pack();
}
public static void main(String[] args) {
new JTableExample();
}
}
Если вы создали собственную модель, которая наследуется от AbstractTableModel, то необходимо также реализовать removeRow. Эта реализация зависит от характера структуры, которую вы реализовали для хранения данных.
Например, если вы используете ArrayList JTable model, то она будет выглядеть следующим образом:
References:
Oracle documentation: Метод removeRow класса DefaultableModel
Developpez.com: Отображение массива с помощью AbstractTableModel
okipa.be: Отображение данных в JTable
Например, если вы используете ArrayList JTable model, то она будет выглядеть следующим образом:
class Model extends AbstractTableModel{JTable HashMap Model:
List< объект> data = новый ArrayList< объект> ();
public void removeRow(int line){
this.data.remove(line);
}
}
class Model extends AbstractTableModel{А если вы используете двумерный массив, элементы которого не хранятся динамически, то у вас возникнут проблемы, потому что нет функции, которая удаляет строку из массива. Итак, вы создадите смещение, которое будет иметь ненужную сложность (n-k)*m(k; line index), вызванные временем и количеством операций, необходимых для смещения всех элементов.
HashMap< Целое число, объект[]> data = новый HashMap< Целое число, объект[]> ();
public void removeRow(int line){
this.data.remove(line);
}
}
References:
Oracle documentation: Метод removeRow класса DefaultableModel
Developpez.com: Отображение массива с помощью AbstractTableModel
okipa.be: Отображение данных в JTable