Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème avec un mouse listener

    27 octobre 2014 à 18:58:32

    Bonjour à tous, pour un projet avec l'école je dois créer une application de création de badges.

    Je crée ma liste de formes basé sur une arraylist de formes.

        public void recupFormes() {
            for (int cpt = 0; cpt < formes.size(); ++cpt) {
                label = new JLabel();
                label.setIcon(formes.get(cpt));
                if (cpt > 3) {
                    fenetre.getPanelFormes().add(label, new org.netbeans.lib.awtextra.AbsoluteConstraints(150, (cpt - 4) * 120, 250, 120));
                } else {
                    fenetre.getPanelFormes().add(label, new org.netbeans.lib.awtextra.AbsoluteConstraints(30, cpt * 120, 80, 120));
                }          
                String text = formes.get(cpt).toString();
                label.addMouseListener(new java.awt.event.MouseAdapter() {
                    @Override
                    public void mouseClicked(java.awt.event.MouseEvent evt) {
                        changeBadge(text, "forme");
                    }
                });
    
            }
        }

    Je sais que le code n'es pas réutilisable si il y'a un trop de formes, mais pour le moment ça me convient parfaitement.

    Le code fonctionne mais mon erreur est que lorsque je click pour la première fois sur le label, il ne se passe rien le mouse clicked ne ma pas l'air détecté. Il faut que je click une seconde fois..

    C'est pour cela que je sollicite votre aide. Merci d'avance !

    • Partager sur Facebook
    • Partager sur Twitter
      27 octobre 2014 à 21:57:32

      Bonsoir,

      Pour vous aider, il nous faudrait au minimum la méthode "changeBadge".

      label.addMouseListener(new java.awt.event.MouseAdapter() {
                  @Override
                  public void mouseClicked(java.awt.event.MouseEvent evt) {
                      changeBadge(text, "forme"); // <======
                  }
              });

      Bonne continuation.

      -
      Edité par pctronique 27 octobre 2014 à 21:58:19

      • Partager sur Facebook
      • Partager sur Twitter
        28 octobre 2014 à 11:00:30

        public void changeBadge(String url, String option) {
        
        
            icone.setCouleur(fenetre.getPanelFormes().getJlCouleurs().getSelectedValue().toString());
        
            switch(option) {    
        
            case "forme" : {          
        
                 icon = new ImageIcon(url);
        
                 icone.setImg(icon);
        
                 icone.setUrl(url);
        
        
                 fenetre.getBadgePreview().getPreviewIcone().setIcon(icon);
        
                 fenetre.getBadgePreview().getPreviewIcone().setBounds(60, 0, 200, 200);
        
                 fenetre.getBadgePreview().getPreviewIcone().removeAll();
        
                 break;
        
            }
        
           }
        
        }

        Voilà la méthode elle n'est pas encore finie car je dois encore implémenter Observable (je modifie bien l'objet mais ce n'est pas encore pris en compte par l'observer. 

        Donc la partie qu'il faut regarder c'est quand je modifie le getPreviewIcone().


        Donc comme indiquer, la méthode fonctionne parfaitement (mais à partir du 2ème click, ensuite ça va tout seul)


        Merci encore

        • Partager sur Facebook
        • Partager sur Twitter
          28 octobre 2014 à 12:08:27

          Bonjour,

          Je ne vois pas de problème sur c'est deux morceaux de code.

          Essayer de faire et de voir sur le terminal, à qu'elles moment le changeBage sera pris en compte :

          String text = formes.get(cpt).toString();
                  System.out.println("addMouseListener : changeBadge : "+cpt);// <==== ajouter ceci.
                  label.addMouseListener(new java.awt.event.MouseAdapter() {
                      @Override
                      public void mouseClicked(java.awt.event.MouseEvent evt) {
                          changeBadge(text, "forme");
                      }
                  });

          musabdossantosaveiro a écrit:

          Donc comme indiquer, la méthode fonctionne parfaitement (mais à partir du 2ème click, ensuite ça va tout seul)

          Oui je sais, j'avais bien compris le problème, mais je cherche à comprendre le programme, pour pouvoir trouver le problème ;). Je voulais seulement voir, s'il n'avait pas une condition dans la méthode.
          Vérifier bien aussi qu'à sa première création, la référence de la fonction reçoit bien "forme".

          icone.setCouleur(fenetre.getPanelFormes().getJlCouleurs().getSelectedValue().toString());
          System.out.println("addMouseListener : option : "+option+" = "+"forme");
          switch(option) {   
              case "forme" : { 
          Bonne continuation.
          • Partager sur Facebook
          • Partager sur Twitter
            29 octobre 2014 à 21:13:58

            addMouseListener : changeBadge : 0
            addMouseListener : option : forme = forme
            voilà le résultat, rien d'anormal :/ merci encore
            • Partager sur Facebook
            • Partager sur Twitter
              30 octobre 2014 à 15:09:54

              Bonjour,

              le premier au démarrage, le second lors du click de la forme (résultat attendu).

              Merci encore !

              • Partager sur Facebook
              • Partager sur Twitter
                30 octobre 2014 à 15:28:22

                Alors dans ce cas-là, il est bien créé, je ne vois pas pourquoi ça ne va pas au premier clic, peut être qu'un autre aura une idée. Bonne chance.

                Ah si, pourquoi vous avez mis :

                fenetre.getBadgePreview().getPreviewIcone().removeAll();

                A la fin de la méthode, il aurait était mieux au début, non ?

                case "forme" : {
                    fenetre.getBadgePreview().getPreviewIcone().removeAll();
                    (....)




                • Partager sur Facebook
                • Partager sur Twitter
                  30 octobre 2014 à 20:32:04

                  Merci encore pour votre réponse.

                  Je l'ai même supprimer ce n'est hélas pas ce qui posait le soucie :(

                  J'ai également fais 3 images pour montrer concrètement ce qu'il se passe

                  Lancement du programme : http://image.noelshack.com/fichiers/2014/44/1414697433-1.png

                  1er click : http://image.noelshack.com/fichiers/2014/44/1414697433-2.png // la barre d'avancement est bien modifié donc tout devrait fonctionner 

                  2ème click : http://image.noelshack.com/fichiers/2014/44/1414697433-3.png //cependant le badge s'affiche uniquement lors du second...

                  Merci encore!

                  -
                  Edité par musabdossantosaveiro 30 octobre 2014 à 20:32:42

                  • Partager sur Facebook
                  • Partager sur Twitter
                    30 octobre 2014 à 21:27:21

                    Désolé, je ne sais pas ce que je dois voir sur les images ?

                    On clique sur "Blanc" ou "Rouge" ou ..., un bouton s'affiche "valider le texte".

                    On appuie sur le bouton, l'image apparais en grand a droit, je ne vois pas trop le problème avec les images, désolé.

                    • Partager sur Facebook
                    • Partager sur Twitter
                      30 octobre 2014 à 21:57:56

                      Il y a un penel de forme (celui du milieu) avec 2 icones blanc, normalement lorsqu'on click sur l'icone elle devrait apparaître en grand à droite.

                      Les couleurs c'est une autre méthode. (le valider texte est un bug)

                      • Partager sur Facebook
                      • Partager sur Twitter
                        30 octobre 2014 à 22:04:19

                        Pas possible de me transmettre le code en entier (par message priver par exemple, si vous ne voulez pas qu'il soit vu par tous). Sinon, je ne pourrais pas voir.
                        • Partager sur Facebook
                        • Partager sur Twitter

                        Problème avec un mouse listener

                        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                        • Editeur
                        • Markdown