JPanel...encore

Je ne comprends pas pourquoi:

je ne sais pas pourquoi je n'arrive pas a afficher une image dans un panel apres un clique sur un bouton, alors que ma fonction d'affichage fonctionne, et que j'arrive a change la couleur de fond du panel destinataire a l'aide de la methode ActionPerformed de ce meme bouton sans probleme...

Ma question: y a t il un contexte a transmettre absoluement ou qqch dans le genre. J'ai l'impression qu'il y a une sorte de "barriere" a franchir dans l'ActionListener, et que je fonce tete baissee dedans...
Si qqun avait qqch pour eviter de me faire mal...

Merci.
Nico

29 réponses

Résumé de la discussion

Le problème est d'afficher une image dans un panel après un clic sur un bouton, alors que la modification de la couleur de fond fonctionne et que l'affichage est censé être géré par une fonction. Plusieurs réponses évoquent un problème d'écoute d'événements et de visibilité: le panel destinataire doit implémenter ActionListener et être correctement relié au bouton, par exemple via un setter. Il faut aussi assurer que le listener est partagé correctement entre frame et panels, en déclarant panel2 dans la frame et en ajoutant le DessineLevel10 au panel d'affichage lors de l'action. En cas de souci persistant, vérifier la visibilité des composants et la gestion du repaint dans le flux d'événements peut éviter les blocages.

Bobot (l’IA à votre service)
  1. Modérateur
    salut, il te suffit de faire appel de la méthode dans le constructeur de DessineLevel1

    Chouba
    Casque Bleu forumique
    0
    1. Bon, j'ai mis un peu d'ordre dans mon prog, et la compil passe nickel. Maintenant, lors du clic, il va jusque dans le constructeur de la classe DessineLevel1, mais il semble pas lancer la methode paint(...); , car il ne me fait meme pas le System.out qu'il y a dedans....

      Je lis et relis la doc, ms je ne vois pas: peut-etre y a t'il un truc que j'ai oublie?

      La, j'avoue que je ne comprends pas... Je pense avoir atteinds mes limites en Java...

      Enfin, je suis la pour aller plus loin, d'autant que j'ai pas le choix...

      En tout cas merci de t'etre fait chier dans mon programme bordelique... ;-)

      nico
      0
      1. c'est parti, et encore merci...

        Je continue a chercher de mon cote

        Bon courage

        nico
        0
        1. Modérateur
          ça va aller va 8)

          je renvoie ça dès que possible

          Chouba
          Casque Bleu forumique
          0
          1. ok je t'envoie ca tout de suite...

            Bon courage,

            nico.
            0
            1. Modérateur
              bon, je te propose ceci

              envoie moi ton code en fichier texte sur

              uboot_70@yahoo.fr

              je vais le vérifier, tester et compiler chez moi, ça te va?

              Chouba
              Casque Bleu forumique
              0
              1. En fait, lors de la compilation il me dit qu'il ne connait pas DessineLevel1();

                Et je viens de voir, qu'en fait, panel2 passe a la compil, mais qu'un panel2.setBackground(Color.red); n'est pas pris en compte (toujours au moment du clic)...

                nico.
                0
                1. Modérateur
                  bon ben tu dois le déclarer pour le faire reconnaître alors

                  class JPanel2 extends JPanel implements ActionListener
                  {
                  private JPanel panel2 = new JPanel() "" ou alors tu dois le récupérer de quelque part""

                  public void actionPerformed(ActionEvent e)
                  {
                  System.out.println("monBoutonCbienCeluilaquimarche");
                  panel2.add(new DessineLevel10());
                  }
                  }


                  Chouba
                  Casque Bleu forumique
                  0
                  1. panel2 est sense etre mon panel destinantaire, celui ou je veux dessiner un image.

                    nico
                    0
                    1. Modérateur
                      c'est quoi panel2????

                      il est déclaré où??

                      Chouba
                      Casque Bleu forumique
                      0
                      1. Code qui se trouve ds la classe qui me lance tout:

                        class JPanel2 extends JPanel implements ActionListener
                        {
                        public void actionPerformed(ActionEvent e)
                        {
                        System.out.println("monBoutonCbienCeluilaquimarche");
                        panel2.add(new DessineLevel10());
                        }
                        }

                        nico
                        0
                        1. Modérateur
                          ok, le prob ne vient pas de là

                          tu peux me montrer le code où tu trouves

                          monPanel.add(new DessineLevel1()); ???

                          Chouba
                          Casque Bleu forumique
                          0
                          1. class DessineLevel1 extends JPanel
                            {
                            public DessineLevel1()
                            {
                            this.setSize(20,20);
                            System.out.println("Constlevel10");
                            }
                            public void paint(Graphics g)
                            {
                            super.paintComponent(g); System.out.println("\nje suis bien dedans");
                            boolean good1 = g.drawImage(niveau1, 0, 0, 181, 145,this);
                            }
                            }

                            Avec niveau1, l'image que j'ai chargee.

                            nico.
                            0
                            1. Modérateur
                              re

                              tu veux bien me montrer le code de ta classe DessineLevel1??

                              Chouba
                              Casque Bleu forumique
                              0
                              1. Voila le message que je recois lors de la compilation:

                                cannot resolve symbol
                                symbol : method DessineLevel1 ()
                                location: class myprojects.samplemove.DessineLevel1
                                monPanel.add(new DessineLevel1());
                                Si ca peut t'aider...
                                Je suis toujours sur ce probleme dps hier.

                                nico
                                0
                                1. Modérateur
                                  quel est le message d'ereur à la compilation???
                                  r
                                  Chouba
                                  Casque Bleu forumique
                                  0
                                  1. Salut,

                                    oui il n'y a pas de probleme de ce cote-la...

                                    Nico.
                                    0
                                    1. Modérateur
                                      salut

                                      la classe se trouve t'elle dans le même package??

                                      Chouba
                                      Casque Bleu forumique
                                      0
                                      1. Le programme entre maintenant, avec ce que tu m'as donne, correctement dans l'ActionPerformed(); .

                                        Seulement, maintenant il ne connait plus ma classe DessineLevel1,
                                        losrque je l'appelle dans l'actionPerformed:
                                        panel2.add(new DessineLevel1());

                                        Dois-je declarer ma classe d'une maniere particuliere?

                                        nico.
                                        0
                                        1. Merci bien, j'essaie ca tout de suite et je te dis ce qu'il en est.

                                          nico.
                                          0
                                          • 1
                                          • 2