Tableau dynamique object[][]
Bonjour,
J'ai créer un tableau avec netbeans (genre de feuille excel) dont le code généré est le suivant :
Code:
1 2 3 4 5 6 7 8 9 10
| jTable.setModel(new javax.swing.table.DefaultTableModel(new Object[][]{
{null, null, null, null, null, null},
{null, null, null, null, null, null},
{null, null, null, null, null, null},
{null, null, null, null, null, null}
};
new String [] {
"A", "B", "C", "D", "E", "F"
}
)); |
Je souhaite ajouté des valeurs à dans le tableau de façon dynamique :
Il suffit que je fasse ceci :
Code:
1 2 3 4 5 6
| int longueur = tableau.length;
String[][] truc = new String[longueur][6];
Object[][]{truc};new String [] {
"A", "B", "C", "D", "E", "F"
}
)); |
Corriger moi si c'est inexacte
Maintenant, reste à programmer "truc" pour en faire une chaine dynamique.
Exemple :
Code:
1 2 3 4 5 6 7 8 9
| for (int i=0;i<20;i++)
{
truc[i][1]="A";
truc[i][2]="B";
truc[i][3]="D";
truc[i][4]="E";
truc[i][5]="";
truc[i][6]="DD";
} |
Bon, ici, dans mon exemple, le nombre est connu (20) mais j'utilise une fonction qui est dynamique.
J'ai tenté de faire une list et listarray comme dans la FAQ mais je ne comprend pas bien son fonctionnement (dans le cadre des accces) j'ai juste compris que ça stocké les informations les uns à la suite des autres et pour l'acces, ce n'est pas pareil qu'un tableau; dans le cas d'une map... j'ai pas trouvé autant d'info dessus
Si qq'un pouvait me fournir un exemple de code pour faire des tableaux multidimensionnel avec object : Merci de poster ;)
Merci, probleme résolu ! :)
Ah ! Merci Thor Tillas :
Ta réponse m'a fortement guidé à trouver la solution :
Cependant, j'ai du corriger un peu ta méthode (c'est vrai que créé une méthode était une résolution dont je n'avais pas réfléchit)
La méthode donne ceci :
Code:
1 2 3 4 5
| public static String[][] changeSize(String[][] tab){
String[][] newTab = new String[tab.length+123][6];
System.arraycopy(tab, 0, newTab, 0, tab.length);
return newTab;
} |
Afin de mieu comprendre le code :
La méthode doit être static pour être compiler (pourquoi ?)
On déclare le nouveau tableau : on spécifie la taille en longueur (pour mon cas, on redimensionne seulement en longueur, la largeur restant identique.)
tab.lenght+1 si on souhaite ajouté une ligne à la fois :)
Ensuite, j'ai remplacé ton "tab = newTab;" par la fonction arraycopy qui permet de copier le contenu du tableau tab dans le nouveau tableau plus grand dont nous avons dimensionné juste la ligne du dessus.
(car le tab = newTab ne copie que des références.. en gros, ça ne recopie pas les données en elle même.. ce qui fait que à chaque appel de la fonction. Le tableau est redéclaré, et donc, on ne conserve pas les données de l'ancien tableau.
Mais je n'ai pas fait que changé cette ligne, étant donnée qu'il ne s'agit pas d'une méthode avec passage par référence ou valeur (arf, j'ai du mal à savoir laquel fait quoi, mais je sais que l'une modif directement les valeurs mis en parametre);
Donc, afin de recevoir la valeur de la méthode, j'utilise "return".
Et voilà comment on l'utilise :
Code:
1 2 3 4 5 6 7
| int longueur;
String[][] table = new String[1][6];
longueur = table.lenght;
System.out.println("La longueur de la table est de : "+longueur);
table = changeSize(table);
longueur = table.lenght;
System.out.println("La longueur de la table après passage de la méthode est de : "+longueur); |
Ensuite, pour afficher le tableau, c'est très simple :
Code:
1 2 3 4 5
| for (int y = 0;y <table.length;y++)
{
for(int x=0;x<6;x++)
{System.out.println("table ["+y+"]-["+x+"] : "+table[y][x];}
} |
Voilà, je pense que c'est assez claire pour les débutants qui souhaite faire un tableau comme moi :)