IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AWT/Swing Java Discussion :

Problème pour récupérer le nom d'un JLabel


Sujet :

AWT/Swing Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 9
    Points : 7
    Points
    7
    Par défaut Problème pour récupérer le nom d'un JLabel
    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é :
    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();
    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.

    Voila voila, si jamais vous avez une quelconque idée, dites le moi s'il vous plait

    merci et bonne soirée

  2. #2
    Membre du Club
    Inscrit en
    Avril 2004
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 46
    Points : 46
    Points
    46
    Par défaut
    Si je ne m'abuse la valeur de objectPut n'est lue qu'au moment de l'exécution du listener. Tu peux t'en sortir facilement en dérivant les listeners et en rajoutant un String en variable membre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    class PutListener implements ActionListener {
     
        private String objectName;
     
        public PutListener(String theObjectName) {
            this.objectName = theObjectName;
        }
     
        public void actionPerformed(ActionEvent e) {
             engine.interpretCommand("poser " + this.objectName);
             entryField.requestFocus();
        }
    }

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    Merci pour ta réponse, je vais voir ca ce weekend et je vous tiens au courant

    Salut


    ReSalut, bah j'ai donc testé aujourd'hui en rentrant et ca marche parfaitement, j'ai juste rajouté des paramètres au constructeur du PutListener pour avoir acces aux fonctions de mes autres classes

    Encore une fois merci beaucoup et bonne journée

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème pour récupérer le nom utilisateur
    Par philippef dans le forum Langage
    Réponses: 12
    Dernier message: 06/08/2007, 17h57
  2. [TWebbrowser] Probléme pour récupérer la source
    Par Gauth dans le forum Web & réseau
    Réponses: 8
    Dernier message: 09/04/2005, 15h57
  3. Réponses: 2
    Dernier message: 20/08/2004, 17h10
  4. Problème pour récupérer la clé primaire
    Par caramel dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 11/04/2003, 13h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo