kmtaz
Messages postés26Date d'inscriptionsamedi 27 septembre 2008StatutMembreDernière intervention16 juillet 2010
-
12 nov. 2009 à 23:03
kmtaz
Messages postés26Date d'inscriptionsamedi 27 septembre 2008StatutMembreDernière intervention16 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.
cs_RedDog
Messages postés50Date d'inscriptionlundi 7 avril 2003StatutMembreDernière intervention21 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).
kmtaz
Messages postés26Date d'inscriptionsamedi 27 septembre 2008StatutMembreDernière intervention16 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);
}
}
}