Salut
J'ai un problème assez complexe dont je connais la provenance mais que je n'arrive pas à résoudre.
Je suis en train de créer une sorte de jeu, ou je veux afficher les images d'un ensemble d'objets se trouvant dans mon inventaire. Mon inventaire utilise une hashMap d'Item (classe des objets) codée avec des String. Je fais un StringTokenizer sur cette HashMap pour récupérer le nom des objets un à un en faisant une boucle avec pour condition : continuer tant que je récupère quelquechose dans la HashMap.
Dans la boucle, je crée un JLabel item, je récupère le nom de l'objet que je met dans une String, j'insère une image dans le JLabel a l'aide du nom de l'objet, et je lui associe un JPopupMenu avec 4 JMenuItem du type "prendre", "regarder",...
Pour effectuer les actions sur l'objet, je donne en paramètre à la fonction qui décode la commande : "prendre nomObjet"
Le problème vient du fait que comme je fais une boucle je redéfinis à chaque fois item (JLabel) et la string du nom de l'objet. Et donc dans le actionListener du JMenuItem si je met ce nom, ca prend en compte le nom du dernier objet trouvé dans la HashMap.
voila le code correspondant un peu épuré :
Pour parer le problème, j'ai essayé de creer une nouvelle hashMap de String codée en JLabel, dans l'espoir de récuperer le JLabel sur lequel on a cliqué pour retrouver le nom de l'objet. Mais je n'arrive pas a faire passer le nom du JLabel à travers le JPopupMenu et le ActionListener du JMenuItem.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38 playerItems.removeAll(); StringTokenizer list = new StringTokenizer(engine.getPlayer().playerItem()); while (list.hasMoreTokens()) { objectput = list.nextToken(); itemput = new JLabel(); playerItems.add(itemput); setImage("im/item.JPG", itemput); if(objectput != null) setImage("im/" + objectput + ".JPG", itemput); playerList.put(itemput, objectput); menu = new JPopupMenu(); JMenuItem menuItem; menuItem = new JMenuItem("poser"); menuItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { engine.interpretCommand("poser " + String)playerList.get(item)); entryField.requestFocus(); } }); menu.add(menuItem); menuItem = new JMenuItem("regarder"); menuItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { engine.interpretCommand("regarder " + objectput); entryField.requestFocus(); } }); menu.add(menuItem); itemput.setComponentPopupMenu(menu); } playerItems.repaint(); myFrame.pack();
Voila voila, si jamais vous avez une quelconque idée, dites le moi s'il vous plait
merci et bonne soirée
Partager