Utiliser setText (JLabel) dans une methode static
Bonjour,
Je travaille actuellement sur un projet de jeu (très très modeste).
J'ai une classe Fenetre (héritée de JFrame) contenant un cardLayout qui me permet de naviguer dans les différents écrans (l'écran du jeu lui même, l'écran d'inventaire, celui des options, de la carte...).
J'ai également des tas de boutons pour les diverses actions (déplacements, attaques, menus...).
J'ai aussi tout un tas d'autres classes (Personnage, ainsi que ses classes filles (Guerrier, Archer... sans oublier les méchants Gobelin et autres...)), combat, arme...
Bref j'en viens donc à mon problème :
J'ai une classe Affichage qui continent diverse méthodes (static car des affichages j'en fais un peu partout) avec des bêtes "Systeme.out.print" pour me tenir informer des dégâts, des changements de niveaux ou autre.
C'est bien pratique pour vérifier que tout fonctionne bien quand je code, mais maintenant que ça prend forme, j'ai besoin que ces messages soient visible par l'utilisateur. J'ai donc créé un JLabel dans Fenetre, que je place dans un coin (uniquement s'il contient du texte), jusque là pas de souci.
Mais ensuite je me dit que ce label devrait simplement être de type Affichage (que je fais hériter de JLabel), et comme ça j'ai juste à faire un setText quand j'ai besoin.
Je fais donc ça et ma méthode
Code:
1 2 3
| public static void afficheChangeNiveau(int niveau){
System.out.println("Votre niveau augmente. Vous êtes maintenant niveau " + niveau);
} |
devient
Code:
1 2 3
| public static void afficheChangeNiveau(int niveau){
setText("Votre niveau augmente. Vous êtes maintenant niveau " + niveau);
} |
pensant que mon problème est résolu. Et en fait non pas du tout.
Voila qu'il me dit "non-static method setText(String) cannot be referenced from static context"
Donc ma question est : Comment faire pour modifier le texte de mon label depuis n'importe quelle classe ?
Investissement à long terme
Proposition d'investissement à long terme :
Si ton jeu se développe un tant soit peu, tu risques de t'engluer dans plusieurs méthodes et objets static.
Tu devrais plutôt regarder du côté du modèle de programmation "singleton" qui te permets d'instancier un objet (comme "Affichage") et d'y accéder de partout facilement.
Si tu fais d'autres programmes en java, plus tard, ce modèle (desing pattern) est très utile.