Problème de référence static / non-static lors de l'appel d'une méthode
cs_FunkyJulius
Messages postés6Date d'inscriptionlundi 23 janvier 2006StatutMembreDernière intervention31 janvier 2006
-
23 janv. 2006 à 23:02
cs_FunkyJulius
Messages postés6Date d'inscriptionlundi 23 janvier 2006StatutMembreDernière intervention31 janvier 2006
-
24 janv. 2006 à 14:30
Hello tout le monde,
Ben voilà je débute et bien sur je croule sous les problèmes et erreurs diverses...
Et là je sollicite votre aide.
ça doit être con comme la lune mais je m'en sors pas.... J'essaie
de faire un jeu de BlackJack. J'ai donc une fenêtre avec un fond et un
panel de boutons pour contrôler le jeux. Dans le cours du jeu, je suis
amené à afficher des cartes dans ma fenêtre, pour ça j'utilise une
classe LayeredPaneBJ dérivée de JLayeredPane. Le hic est quand j'essaie
d'afficher une carte supplémentaire... ben ça marche pas!! Et j'ai
l'erreur suivante
Cannot make a static reference to the non-static method AjouterCarte(Jframe, int) from the type LayeredPaneBJ
Comme j'ai dis, l'affichage des cartes se fait par l'action de boutone placés sur un panel. Voici le code qui gère
les évènement sur le bouton en question. Cette méthode se trouve dans la classe qui construit le panel des boutons d'options.
Code,
----
public void actionPerformed (ActionEvent ev)
{
if(ev.getSource()== btDouble) {}
if(ev.getSource()== btCarteSup)
LayeredPaneBJ.AjouterCarte((JFrame)this.getParent(), 1);
// this renvoie un panel
if(ev.getSource()== btReste) {}
if(ev.getSource()== btSplit) {}
}
et voici comment ma méthode AjouterCarte est définie dans ma classe LayeredPanelBJ :
JPanel carte = new PanelAvecFond(PanelAvecFond.loadImages(frm, ".//0"+no+".png"));
carte.setBounds(posX, posY, 50, 75);
layeredPane.add(carte, new Integer(carteAffichee-1));
frm.pack();
frm.setVisible(true);
}
Le hic est que je ne peux pas rendre la méthode AjouterCarte
statique (enfin je pense) puisque je fais référence à des attributs privé de la classe
dans cette méthose (layeredPane.add(carte, new Integer(carteAffichee-1))
AAAAAAAAAhhhhhhh y-a-t-il une solution??? car là je sais pas du tout comment m'en sortir...
cs_FunkyJulius
Messages postés6Date d'inscriptionlundi 23 janvier 2006StatutMembreDernière intervention31 janvier 2006 24 janv. 2006 à 14:30
merci pour ta réponse,
c'est vrai que j'appelais une classe et non une instance... Mais à ce propos, j'ai encore un petit soucis...
J'aimerais éviter de faire appel au constructeur de LayeredPaneBJ et
appeler directement AjouterCarte(...) depuis l'instance de
LayeredPaneBJ que j'ai déjà créé. Je ne pense pas que ça me donne de
très bon résultats de créer un nouveau panel LayeredPaneBJ à chaque
appel de AjouterCarte()..non?
En fait voici comment je construit ma fenêtre:
Je créer une fenêtre et je modifie sa propiété ContentPane comme ceci : .setContentPane(newContentPane)
newContentPaneI est un panel contenant :
- une rigidArea Box.createRigidArea(new Dimension(0, 10))
- mon JLayeredPane
- une autre RigidArea
- un dernier panel qui contient les boutons qui gère le schmilblic (Classe PanelOption)
L'appel de Ajouter carte se fait donc dans la classe PanelOption. Par
rapport à ta solution, serait-il possible de faire qqch du genre :
public void actionPerformed (ActionEvent ev)
{
LayeredPaneBJ lpbj = (LayeredPaneBJ)
this.getParent().getComponent(); ?????? mais comment êre sur de tomber
sur le bon composant???
if(ev.getSource()== btDouble) {}
if(ev.getSource()== btCarteSup)
lpbj .AjouterCarte((JFrame)this.getParent(), 1); // this
renvoie un panel
if(ev.getSource()== btReste) {}
if(ev.getSource()== btSplit) {}
}
merci encore ..... tu m'enlèverais une belle épine du pied..