Exeception suppression ligne JTable [Résolu]

Messages postés
26
Date d'inscription
samedi 27 septembre 2008
Statut
Membre
Dernière intervention
16 juillet 2010
- - Dernière réponse : 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
Afficher la suite 

2 réponses

Meilleure réponse
Messages postés
50
Date d'inscription
lundi 7 avril 2003
Statut
Membre
Dernière intervention
21 août 2013
3
Merci
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....

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 134 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_RedDog
Messages postés
26
Date d'inscription
samedi 27 septembre 2008
Statut
Membre
Dernière intervention
16 juillet 2010
0
Merci
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
Commenter la réponse de kmtaz