Exeception suppression ligne JTable

Résolu
kmtaz Messages postés 26 Date d'inscription samedi 27 septembre 2008 Statut Membre Dernière intervention 16 juillet 2010 - 12 nov. 2009 à 23:03
kmtaz Messages postés 26 Date d'inscription samedi 27 septembre 2008 Statut Membre Dernière intervention 16 juillet 2010 - 14 nov. 2009 à 11:57
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

cs_RedDog Messages postés 50 Date d'inscription lundi 7 avril 2003 Statut Membre Dernière intervention 21 août 2013
14 nov. 2009 à 00:10
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....
3
kmtaz Messages postés 26 Date d'inscription samedi 27 septembre 2008 Statut Membre Dernière intervention 16 juillet 2010
14 nov. 2009 à 11:57
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
0
Rejoignez-nous