Problème de taille avec une JTable [Résolu]

Messages postés
141
Date d'inscription
samedi 4 février 2012
Dernière intervention
3 avril 2013
- - Dernière réponse : cs_GodConan
Messages postés
2116
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.
Afficher la suite 

Votre réponse

9 réponses

Meilleure réponse
Messages postés
141
Date d'inscription
samedi 4 février 2012
Dernière intervention
3 avril 2013
3
Merci
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.

Merci yannOpenGL 3

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

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de yannOpenGL
Messages postés
6450
Date d'inscription
mardi 8 mars 2005
Dernière intervention
17 mai 2018
0
Merci
Salut,

Sur quelle ligne est levée ton exception ?
Commenter la réponse de cs_Julien39
Messages postés
141
Date d'inscription
samedi 4 février 2012
Dernière intervention
3 avril 2013
0
Merci
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;
Commenter la réponse de yannOpenGL
Messages postés
6450
Date d'inscription
mardi 8 mars 2005
Dernière intervention
17 mai 2018
0
Merci
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.
Commenter la réponse de cs_Julien39
Messages postés
141
Date d'inscription
samedi 4 février 2012
Dernière intervention
3 avril 2013
0
Merci
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.
Commenter la réponse de yannOpenGL
Messages postés
2116
Date d'inscription
samedi 8 novembre 2003
Statut
Contributeur
Dernière intervention
6 octobre 2012
0
Merci
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)
Commenter la réponse de cs_GodConan
Messages postés
141
Date d'inscription
samedi 4 février 2012
Dernière intervention
3 avril 2013
0
Merci
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.
Commenter la réponse de yannOpenGL
Messages postés
987
Date d'inscription
mardi 31 mai 2005
Dernière intervention
30 août 2012
0
Merci
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.
Commenter la réponse de cs_laurent1024
Messages postés
2116
Date d'inscription
samedi 8 novembre 2003
Statut
Contributeur
Dernière intervention
6 octobre 2012
0
Merci
Preferes utiliser la taille de ton tableau dans ton itération, plutot que la constante '3'...

GodConan ;o)
Commenter la réponse de cs_GodConan

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.