Comment supprimer une ligne de JTable en Java

La suppression d'une ligne dans JTable en Java dépend du modèle de votre JTable. JTable utilise par défaut DefaultTableModel. Cependant, vous pouvez aussi spécifier votre propre Table Model.

Suppression dans DefaultTableModel

DefaultTableModel stocke les données dans un tableau de type Vector, ce qui facilite la suppression en éliminant seulement les éléments appartements à cette ligne avec la méthode romoveRow(int ligne).

import javax.swing.JFrame;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableModel;

public class JTableExemple extends JFrame{

Object[][] donnees = {{9,8,7},{8,7,6},{7,6,5},{6,5,4}};
String[] titre = {"c1", "c2", "c3"};

public JTableExemple(){
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);

DefaultTableModel dtm = new DefaultTableModel(donnees, titre);
table.setModel(dtm);
this.getContentPane().add(new JScrollPane(table),BorderLayout.CENTER);
//supprimer la ligne 2
((DefaultTableModel)table.getModel()).removeRow(1);
pack();
}

public static void main(String[] args) {
new JTableExemple();
}
}
Sortie
jtable defaulttablemodel
Avant
supprimer une ligne dans jtable defaulttablemodel
Après

Suppression dans AbstractTableModel

Si vous avez créer votre propre modèle qui hérite de AbstractTableModel, alors vous devez aussi implémenter la méthode removeRow. Cette implémentation dépend de la nature de votre structure que vous avez implémenté pour stocker les données.

Par exemple, si vous utilisez un modèle JTable ArrayList, alors il sera semblable à ça:

class Modele extends AbstractTableModel{

List<object> data = new ArrayList<object>();
public void removeRow(int ligne){
this.donnees.remove(ligne);
}
}
Modèle JTable HashMap:

class Modele extends AbstractTableModel{

HashMap<Integer, Object[]> data = new HashMap<Integer, Object[]>();
public void removeRow(int ligne){
this.donnees.remove(ligne);
}
}
Et si vous utilisez un tableau de deux dimension dont les éléments ne sont pas stockés dynamiquement, alors vous aurez des problèmes, parce qu'il n'existe pas une fonction qui supprime une ligne d'un tableau. Donc, vous allez créer un décalage qui aura une complexité inutile de (n-k)*m (k;indice de la ligne) causée par le temps et le nombre d'opérations nécessaires pour décaler tous les éléments.

Références:
Documentation Oracle: La méthode removeRow de la classe DefaultableModel
Developpez.com: Afficher un tableau avec AbstractTableModel
okipa.be: afficher des données dans un JTable