Envoyé par
Neufunk
La méthode des maps me semblait être la plus efficace, et facile à mettre en œuvre pour un relatif débutant, malheureusement je butte sur cette ligne qui empêche le programme de compiler :
C'est parce que la variable c'est periodMap, pas map (j'ai effectivement un peu tapé vité et n'est pas modifié le nom lorsque j'ai ajusté celui de l'attribut (pour la map des indicateurs, il faut bien sûr le nom de la variable de la map correspondante).
Envoyé par
Neufunk
J'ai réussi à l'adapter, et mes Combo affichent bien les données, c'est parfait. Je me suis juste permis de corriger cette ligne qui si je ne me trompe était erronée :
oui, un raté lors du copier/coller de la ligne d'avant (j'étais pas encore complètement réveillé visiblement au moment où je t'ai répondu).
D'ailleurs, j'ai fait une troisième erreur :
int selectedPeriodCell = perdiodMap.get(comboPeriode.getSelectedIndex());
Il fallait lire :
int selectedPeriodCell = perdiodMap.get(comboPeriode.getSelectedItem());
Envoyé par
Neufunk
Par contre là où je sèche, c'est que je n'arrive pas à afficher le résultat escompté. J'ai dans un premier temps simplement essayé de Print le résultat de la sélection des Combo dans la console, mais il ne se passe rien.
Hum, il ne se passe vraiment rien ? Il faudrait voir comment tu écoutes les évenements de sélection de combo ? Cela devrait être du genre
(avec la soluton map) :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
comboPeriode.addActionListener( e-> {
int cell = periodMap.get(comboPeriode.getSelectedItem());
int row = indicMap.get(comboIndicateurs .getSelectedItem());
System.out.println( "row: " + row + ", cell: " + cell);
});
comboIndicateurs.addActionListener( e-> {
int cell = periodMap.get(comboPeriode.getSelectedItem());
int row = indicMap.get(comboIndicateurs .getSelectedItem());
System.out.println( "row: " + row + ", cell: " + cell);
}); |
et avec la deuxième solution :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
comboPeriode.addActionListener( e-> {
int cell = comboPeriode.getSelectedItem().index;
int row = indicMap.getSelectedItem().index;
System.out.println( "row: " + row + ", cell: " + cell);
});
comboIndicateurs.addActionListener( e-> {
int cell = comboPeriode.getSelectedItem().index;
int row = indicMap.getSelectedItem().index;
System.out.println( "row: " + row + ", cell: " + cell);
}); |
Attention, aucun des deux cas ne peut fonctionner (tu auras des NullPointerException) si tu autorises une saisie libre dans la combo (de choisir un item qui n'existe pas dans la liste) .
Il faut soit interdire la saisie :
1 2
| comboPeriode.setEditable(false);
comboIndicateurs.setEditable(false); |
Soit interdire la saisie de valeurs qui ne sont pas dans la combo (faire une autocompletion par exemple).
En revanche, ça ne peut pas bien fonctionner :
Envoyé par
Neufunk
1 2 3 4 5
| while (row < 165){
Label label2 = new Label (cell,sheet902.getRow(row).getCell(1).toString());
indicList.add(label2);
row++;
} |
Non, là l'index, c'est row, pas cell, donc new Label(row, sheet902.getRow(row).getCell(1).toString();... c'est les indices de lignes qu'il faut faire correspondre avec les indicateurs.
Partager