Exeception suppression ligne JTable [Résolu]

Messages postés
26
Date d'inscription
samedi 27 septembre 2008
Dernière intervention
16 juillet 2010
- 12 nov. 2009 à 23:03 - Dernière réponse :
Messages postés
26
Date d'inscription
samedi 27 septembre 2008
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 

Votre réponse

2 réponses

Meilleure réponse
Messages postés
50
Date d'inscription
lundi 7 avril 2003
Dernière intervention
21 août 2013
- 14 nov. 2009 à 00:10
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....

Merci cs_RedDog 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 88 internautes ce mois-ci

Commenter la réponse de cs_RedDog
Messages postés
26
Date d'inscription
samedi 27 septembre 2008
Dernière intervention
16 juillet 2010
- 14 nov. 2009 à 11:57
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

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.