Exeception suppression ligne JTable [Résolu]

Signaler
Messages postés
26
Date d'inscription
samedi 27 septembre 2008
Statut
Membre
Dernière intervention
16 juillet 2010
-
Messages postés
26
Date d'inscription
samedi 27 septembre 2008
Statut
Membre
Dernière intervention
16 juillet 2010
-
Bonjour,

J'ai réaliser la possibilité de supprimer une ligne sélectionnée sur une JTable à travers un menu popup.
La ligne s'efface bien mais une exeception de type java.lang.ArrayIndexOutOfBoundsException: 3 est levée.
at supprligne.MAJ_Table(supprligne.java:55) (correspond a :this.donnéesT[i][k] = IHM.tableau.getValueAt(i, j);)

private void MAJ_Table(int indiceligne) {

this.donnéesT = new Object[IHM.tableau.getRowCount()]  [IHM.tableau.getColumnCount() -1];
//this.titre = new Object[IHM.tableau.getColumnCount()-1];

//Parcourt de toutes les lignes
for(int i = 0; i < IHM.tableau.getRowCount(); i++){

if (i == indiceligne){
((DefaultTableModel) IHM.tableau.getModel()).removeRow(indiceligne);

//Parcourt de toutes les colonnes
for(int j 0, k 0; j < IHM.tableau.getColumnCount(); j++){
//Si la colonne concernée n'est pas celle à effacer

//if(((DefaultTableModel)IHM.tableau.getModel()).getColumnName(j)){
//.equals(column.getHeaderValue()))

//On récupère les titres de colonnes au premier passage
if(i 0)this.titre [k] ((DefaultTableModel)IHM.tableau.getModel()).getColumnName(j);
//on récupère les données
//try{
this.donnéesT[i][k] = IHM.tableau.getValueAt(i, j);
k++;
//}catch(ArrayIndexOutOfBoundsException e){
//	System.out.println(e);

//}


j'ai essayé le try/catch mais sa m'efface toute ma table, je n'arrive pas à trouver une solution.

Si quelqu'un peut m'aider
Merci
kmtaz


kmtaz

2 réponses

Messages postés
50
Date d'inscription
lundi 7 avril 2003
Statut
Membre
Dernière intervention
21 août 2013

Salut,

En y réfléchissant un peu mieux (à cette exception), imaginons que tu as un tableau :

Index | Données
----------------
0 | Un mot
1 | Deux mots
2 | Trois mots
3 | Quatre mots
4 | Cinq mots

Que t'arrivera-t-il si tu veux supprimer les deux dernières entrées. C'est-à-dire si tu veux supprimer la ligne 3 puis la ligne 4.

A la première boucle (pas de problème), la ligne 3 disparait et la ligne 4 passe en ligne 3 :

Index | Données
----------------
0 | Un mot
1 | Deux mots
2 | Trois mots
3 | Cinq mots

A la deuxième boucle (exception levée), la ligne 4 que l'on essaie de supprimer n'existe plus :

Index | Données
----------------
0 | Un mot
1 | Deux mots
2 | Trois mots
3 | Cinq mots
4 | ArrayOutOfBoundsException << l'entrée n'existe plus (voir tableau précédent)

Sachant cela, ta seule option pour supprimer les lignes c'est de lire le tableau en partant de la fin. Les index ne changeront pas si on supprime les dernières lignes en premier.
----------------------------

A mon avis, ton erreur c'est juste d'essayer de lire la dernière ligne qui n'existe plus car tu viens précédemment d'en effacer une (n'importe laquelle).

A :
this.donnéesT[i][k] = IHM.tableau.getValueAt(i, j);

Ça coince sur le i.

Sépare la suppression de la ligne du parcours de ligne.

En espérant te mettre sur le bon chemin....
Messages postés
26
Date d'inscription
samedi 27 septembre 2008
Statut
Membre
Dernière intervention
16 juillet 2010

Salut,

Merci tu m'as effectivement mis sur le bon chemin, en fait je me suis vraiment compliqué la vie avec la récupération des colonnes qui est inutile.

Il suffisait de faire simplement ça :

private void MAJ_Table(int indiceligne) 
{	
//Parcourt de toutes les lignes
for(int i = 0; i < IHM.tableau.getRowCount(); i++)
{

// Si i  est égal à l'indice de la ligne à supprimer
if (i == indiceligne)
{
// alors on la supprime
((DefaultTableModel) IHM.tableau.getModel()).removeRow(indiceligne);

}
}
}


Encore merci

kmtaz