Problème de référence static / non-static lors de l'appel d'une méthode

cs_FunkyJulius Messages postés 6 Date d'inscription lundi 23 janvier 2006 Statut Membre Dernière intervention 31 janvier 2006 - 23 janv. 2006 à 23:02
cs_FunkyJulius Messages postés 6 Date d'inscription lundi 23 janvier 2006 Statut Membre Dernière intervention 31 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 :






Code:,

----

public void AjouterCarte(JFrame frm, int no)

{

int posX, posY, carteAffichee;

carteAffichee = layeredPane.getComponentCount();

posX = layeredPane.getComponent(carteAffichee-1).getX()+35;

posY = layeredPane.getComponent(carteAffichee-1).getY()+35;

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...


Merci encore

2 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
24 janv. 2006 à 08:11
A mon avis, c'est que LayeredPaneBJ est le nom d'une classe et non d'une instance de ta classe, donc modifie un peu ton code :

public void actionPerformed (ActionEvent ev)
{
LayeredPaneBJ lpbj = new LayeredPaneBJ();
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) {}
}

_____________________________________________________________________
0
cs_FunkyJulius Messages postés 6 Date d'inscription lundi 23 janvier 2006 Statut Membre Dernière intervention 31 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..
0
Rejoignez-nous