Problème de taille avec une JTable

Résolu
yannOpenGL Messages postés 141 Date d'inscription samedi 4 février 2012 Statut Membre Dernière intervention 3 avril 2013 - 29 juin 2012 à 14:33
cs_GodConan Messages postés 2113 Date d'inscription samedi 8 novembre 2003 Statut Contributeur Dernière intervention 6 octobre 2012 - 2 juil. 2012 à 18:21
Bonjour,

j'ai un problème avec mon code lorsque je rempli une JTable. L'erreur est la suivante :
java.lang.ArrayIndexOutOfBoundsException

En fait j'utilise deux classes (une par fenêtre), une qui affiche une JTable avec un modèle dynamique et une qui permet d'ajouter des lignes à la JTable.

Entre les 2 classes je transmet un tableau String[][]. Il circule entre les 2. Chaque fois que je décide d'ajouter une ligne à ma JTable, je crée un nouveau tableau dans ma classe d'ajout avec une ligne de plus que l'ancien. Je copie l'ancien dans le nouveau et j'ajoute les dernières données dans la dernière ligne. Puis j'ouvre de nouveau la fenêtre avec la JTable en lui envoyant le nouveau tableau.

Je ne suis pas sûr d'avoir été très clair donc je vais mettre quelques parties du code.

Code permettant d'ajouter les données du tableau dans la JTable (code de la fenêtre avec la JTable):
public AffichageJTable(tableau) {
for (int j=0 ; j<tableau[0].length ; j++)
{
modeleDynamique.addData(new DataBDD(tableau[0][j], tableau[1][j], tableau[2][j]));	 
}
jtable = new JTable(modeleDynamique);
}



Code permettant d'ajouter la ligne :
public Ajout(tableau0) {
String nom = comboBox.getSelectedItem().toString();
String dose = spinnerDose.getValue().toString();
String unite = labelUnite.getText();
 
int sizeNouveauTableau = sizeTableau0+1;
String[][] nouveauTableau = new String[3][sizeNouveauTableau];
 
for(int i=0 ; i<sizeNouveauTableau-1 ; i++) nouveauTableau[i] = tableau0[i];
 
nouveauTableau[0][sizeNouveauTableau-1] = nom;
nouveauTableau[1][sizeNouveauTableau-1] = dose;
nouveauTableau[2][sizeNouveauTableau-1] = unite ;
 
new AffichageJTable(nouveauTableau).setVisible(true);
}


Avez-vous une idée d'où peut venir le problème ?
Sachant que mon code marche pour le 1er ajout mais plante dès le 2ème.
J'ai beau chercher, je ne comprend pas pourquoi.

Merci.
Bonne journée.

9 réponses

yannOpenGL Messages postés 141 Date d'inscription samedi 4 février 2012 Statut Membre Dernière intervention 3 avril 2013
2 juil. 2012 à 11:09
Merci, j'avais fais une erreur bête en fait.

Ceci ne veut rien dire :
for(int i=0 ; i<sizeNouveauTableau-1 ; i++) nouveauTableau[i] = tableau0[i];


Le code correct est :
for(int j=0 ; j<sizeNouveauTableau-1 ; j++)
for(int i=0 ; i<3 ; i++) 
{
nouveauTableau[i][j] = tableau0[i][j];
}


Merci beaucoup pour votre aide.
3
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
29 juin 2012 à 14:48
Salut,

Sur quelle ligne est levée ton exception ?
0
yannOpenGL Messages postés 141 Date d'inscription samedi 4 février 2012 Statut Membre Dernière intervention 3 avril 2013
29 juin 2012 à 15:39
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 1

Apparemment le problème est sur cette ligne (ainsi que les 2 suivantes) :
nouveauTableau[0][sizeNouveauTableau-1] = nom;
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
29 juin 2012 à 16:15
Avant cette ligne, essayes ceci :

System.out.println(nouveauTableauLlength());
System.out.println(nouveauTableau[0].length());


Et tu devrais vite comprendre quel indice ne va pas.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
yannOpenGL Messages postés 141 Date d'inscription samedi 4 février 2012 Statut Membre Dernière intervention 3 avril 2013
29 juin 2012 à 16:28
Merci, j'ai fais ce que tu as dis.

System.out.println(nouveauTableau.length);

me renvois 3 ce qui est normal vu que j'ai 3 colonnes
System.out.println(nouveauTableau[0].length);

me renvois 1 ce qui n'est pas normal. Il devrait me renvoyer 2 vu que je crée le String[][] juste avant de cette manière :
String[][] nouveauTableau = new String[3][sizeNouveauTableau];

et que "sizeNouveauTableau" est bien égal à 2.

Il y a quelque chose qui m'échappe.
0
cs_GodConan Messages postés 2113 Date d'inscription samedi 8 novembre 2003 Statut Contributeur Dernière intervention 6 octobre 2012 12
29 juin 2012 à 17:31
Salut ;o)

justement !! es tu sur que cette ligne :
int sizeNouveauTableau = sizeTableau0+1;
initialise la valeur à 2 ?!! ;o)

Ps : évites d utiliser les chiffres dans le nommage ;o), laisse ce genre d'écriture aux générateurs de codes... ;o)


GodConan ;o)
0
yannOpenGL Messages postés 141 Date d'inscription samedi 4 février 2012 Statut Membre Dernière intervention 3 avril 2013
2 juil. 2012 à 08:37
Salut. Oui, je suis sûr que sizeTableau0 = 1 et sizeNouveauTableau =2. C'est bien pour ça que je ne comprends pas d'où vient le problème.
0
cs_laurent1024 Messages postés 987 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 30 août 2012 25
2 juil. 2012 à 09:17
Bonjour

Quelle taille à ton tableau "tableau0"
Le nouveauTableau[i] = tableau0[i]; pose peut être problème au niveau de la deuxième dimension de ton tableau.
0
cs_GodConan Messages postés 2113 Date d'inscription samedi 8 novembre 2003 Statut Contributeur Dernière intervention 6 octobre 2012 12
2 juil. 2012 à 18:21
Preferes utiliser la taille de ton tableau dans ton itération, plutot que la constante '3'...

GodConan ;o)
0
Rejoignez-nous