JPanel...encore

nico -  
choubaka Messages postés 5535 Date d'inscription   Statut Modérateur Dernière intervention   -
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

  • 1
  • 2
  1. choubaka Messages postés 5535 Date d'inscription   Statut Modérateur Dernière intervention   2 113
     
    salut, ça doit être un probmlème au niveau de l'evènement, qui ne doit pas être bien traité, mais bon sans plus d'info ????????

    Chouba
    Casque Bleu forumique
    0
  2. nico
     
    je te donne en gros la structure de mon prg:

    j'ai une classe qui me dessine l'image dans la fonction paint(); a l'aide de drawImage(...);
    Cela fonctionne (affichage nickel) losrque je fais monPanel.add(new DessineImage());

    Ensuite, j'ai un bouton qui implemente l'actionListener en appelant la fonction precedente en l'appelant de la meme maniere.
    Pb, c'est comme si il n'y avait rien dans l'ActionPerformed, il ne se passe kedal...
    C'est pas ce qui semble etre le plus complique en java, mais je m'avoue vaincu...

    class DessineLevel1 extends JPanel
    {
    public DessineLevel1()
    {
    this.setSize(20,20);
    }
    public void paint(Graphics g)
    {
    super.paintComponent(g);
    g.drawImage(niveau1, 0, 0, 181, 145,this);
    }

    public void update(Observable obs, Object o)
    {
    repaint();
    }
    }

    monBouton.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent e)
    {
    System.out.println("monBouton");
    monPanel.add(new DessineLevel1());
    }
    });

    Mon panel est cree directement dans le constructeur, comme tout le reste d'ailleurs...

    Je sais pas ce qui pourrait t'aider plus.

    Je sens que c'est une connerie qui me bloque, et elle doit etre tellement grosse que je ne la vois pas.

    Si tu peux me filer le tuyau qui me sauvera la vie! Ok j'en demande un peu trop...

    Merci,
    nico.
    0
  3. choubaka Messages postés 5535 Date d'inscription   Statut Modérateur Dernière intervention   2 113
     
    monPanel.add(new DessineLevel1());


    tu peux me préciser ce qu'est "monPanel" ?

    Chouba
    Casque Bleu forumique
    0
  4. nico
     
    En fait, j'ai decoupe ma fenetre avec un BorderLayout(); puis le panel central en GridLayout(); =>monPanel.

    Mon bouton se situe ds le panel est: je voudrai que ce bouton declenche un drawImage(..); dans un des panels du panel central.

    Si je fais monPanel.add(new DessineLevel1()); en dehors de l'actionPerformed(); du bouton, l'image est dessinee sans probleme.
    Par contre, des que je le mets dans l'actionPerformed(); du bouton, il ne se passe rien, il ne semble meme pas appeler la classe DessineLevel(); responsable du drawImage(...);

    Forcement, j'oublie qqch qque part...

    nico.
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. choubaka Messages postés 5535 Date d'inscription   Statut Modérateur Dernière intervention   2 113
     
    essaye ça...

    class DessineLevel1 extends JPanel implements ActionListener
    {
    public DessineLevel1()
    {
    this.setSize(20,20);
    }
    public void paint(Graphics g)
    {
    super.paintComponent(g);
    g.drawImage(niveau1, 0, 0, 181, 145,this);
    }

    public void update(Observable obs, Object o)
    {
    repaint();
    }
    }

    monBouton.addActionListener(this);

    public void actionPerformed(ActionEvent e)
    {
    System.out.println("monBouton");
    monPanel.add(new DessineLevel1());
    }
    });

    Chouba
    Casque Bleu forumique
    0
  7. nico
     
    J'ai essaye mais cela n'a pas fonctionne.

    Alors, est-ce que la partie:
    monBouton.addActionListener(this);

    public void actionPerformed(ActionEvent e)
    {
    System.out.println("monBouton");
    monPanel.add(new DessineLevel1());
    }
    });

    doit faire partie de la classe DessineLevel1 ?

    De plus, a la compilation, il ne veut pas de la ligne :

    monBouton.addActionListener(this);

    Il me dit qu'il attend un identifieur pour le this, et que le package monBouton n'existe pas.

    Mes competences en java sont encore limitees, mais si tu ne peux plus m'aider, faudra bien que je me demmerde.

    Merci,
    nico.
    0
  8. choubaka Messages postés 5535 Date d'inscription   Statut Modérateur Dernière intervention   2 113
     
    je cherche, je cherche

    Chouba
    Casque Bleu forumique
    0
  9. nico
     
    pareil et ca commence a faire trop longtemps...

    Merci de prendre un peu de ton temps pour ca,
    nico.
    0
  10. choubaka Messages postés 5535 Date d'inscription   Statut Modérateur Dernière intervention   2 113
     
    Bon, je vois, je vois

    Le panel destinataire du dessin doit implémenter ActionListener
    ton problème apparemment est un problème de visibilité

    Bon je résume
    par exemple:
    Tu as ta frame principale qui contient deux panels

    un panel (panel1) contient un bouton
    l'autre (panel2) est chargé d'afficher le dessin

    le panel2 doit implémenter ActionListener

    pour que le bouton puisse reconnaître panel2 comme actionListener, la frame principale doit faire connaître panel2 à panel1. C'est à dire que la panel1 doit avoir comme attribut panel2 de manière à pouvoir l'utiliser avec le bouton.

    public class maFrame{

    private JPanel1 panel1
    private JPanel2 panel2
    private Container myContainer;

    public maFrame(){

    panel1 = new JPanel1();
    panel2 = new JPanel2();
    panel1.setListener(panel2);
    panel1.initView();
    }

    }

    public class JPanel1 {

    private JPanel panel2Listener;
    private JButton button;

    public void setListener (JPanel2 panel2Listener){
    this.panel2Listener = panel2Listener
    }

    public void initView(){
    button = new JButton("button")
    button.addActionListener(panel2Listener);

    }

    }

    public classJPanel2 extends JPanel implements ActionListener

    public void actionPerformed(ActionEvent e)
    {
    System.out.println("monBouton");

    }
    });

    une solution possible????

    Chouba
    Casque Bleu forumique
    0
  11. nico
     
    Merci bien, j'essaie ca tout de suite et je te dis ce qu'il en est.

    nico.
    0
  12. nico
     
    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
  13. choubaka Messages postés 5535 Date d'inscription   Statut Modérateur Dernière intervention   2 113
     
    salut

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

    Chouba
    Casque Bleu forumique
    0
  14. nico
     
    Salut,

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

    Nico.
    0
  15. choubaka Messages postés 5535 Date d'inscription   Statut Modérateur Dernière intervention   2 113
     
    quel est le message d'ereur à la compilation???
    r
    Chouba
    Casque Bleu forumique
    0
  16. nico
     
    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
  17. choubaka Messages postés 5535 Date d'inscription   Statut Modérateur Dernière intervention   2 113
     
    re

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

    Chouba
    Casque Bleu forumique
    0
  18. nico
     
    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
  19. choubaka Messages postés 5535 Date d'inscription   Statut Modérateur Dernière intervention   2 113
     
    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
  20. nico
     
    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
  21. choubaka Messages postés 5535 Date d'inscription   Statut Modérateur Dernière intervention   2 113
     
    c'est quoi panel2????

    il est déclaré où??

    Chouba
    Casque Bleu forumique
    0
  • 1
  • 2