JPanel...encore

Fermé
nico - 26 mai 2003 à 12:50
choubaka Messages postés 39412 Date d'inscription jeudi 4 avril 2002 Statut Modérateur Dernière intervention 16 janvier 2025 - 30 mai 2003 à 08:06
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

choubaka Messages postés 39412 Date d'inscription jeudi 4 avril 2002 Statut Modérateur Dernière intervention 16 janvier 2025 2 104
26 mai 2003 à 16:34
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
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
choubaka Messages postés 39412 Date d'inscription jeudi 4 avril 2002 Statut Modérateur Dernière intervention 16 janvier 2025 2 104
27 mai 2003 à 07:42
monPanel.add(new DessineLevel1());


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

Chouba
Casque Bleu forumique
0
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
choubaka Messages postés 39412 Date d'inscription jeudi 4 avril 2002 Statut Modérateur Dernière intervention 16 janvier 2025 2 104
27 mai 2003 à 08:31
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
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
choubaka Messages postés 39412 Date d'inscription jeudi 4 avril 2002 Statut Modérateur Dernière intervention 16 janvier 2025 2 104
27 mai 2003 à 10:31
je cherche, je cherche

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

Merci de prendre un peu de ton temps pour ca,
nico.
0
choubaka Messages postés 39412 Date d'inscription jeudi 4 avril 2002 Statut Modérateur Dernière intervention 16 janvier 2025 2 104
27 mai 2003 à 10:50
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
Merci bien, j'essaie ca tout de suite et je te dis ce qu'il en est.

nico.
0
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
choubaka Messages postés 39412 Date d'inscription jeudi 4 avril 2002 Statut Modérateur Dernière intervention 16 janvier 2025 2 104
28 mai 2003 à 07:29
salut

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

Chouba
Casque Bleu forumique
0
Salut,

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

Nico.
0
choubaka Messages postés 39412 Date d'inscription jeudi 4 avril 2002 Statut Modérateur Dernière intervention 16 janvier 2025 2 104
28 mai 2003 à 12:25
quel est le message d'ereur à la compilation???
r
Chouba
Casque Bleu forumique
0
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
choubaka Messages postés 39412 Date d'inscription jeudi 4 avril 2002 Statut Modérateur Dernière intervention 16 janvier 2025 2 104
28 mai 2003 à 12:34
re

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

Chouba
Casque Bleu forumique
0
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
choubaka Messages postés 39412 Date d'inscription jeudi 4 avril 2002 Statut Modérateur Dernière intervention 16 janvier 2025 2 104
28 mai 2003 à 12:50
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
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
choubaka Messages postés 39412 Date d'inscription jeudi 4 avril 2002 Statut Modérateur Dernière intervention 16 janvier 2025 2 104
28 mai 2003 à 13:14
c'est quoi panel2????

il est déclaré où??

Chouba
Casque Bleu forumique
0