Ah mince j'avais pas vu que tu avais modifié mon code Bunyan, ta façon de procéder est bizarre car tu mets le contenu de ma méthode Nombre() directement dans l'action du bouton Valider...
J'y avais pas pensé, mais pourquoi pas après tout...
tbop2
Ah bon ? ![]()
C'est comme ça que je l'avais comprit dans mon cours
Bon je vais regarder le code modifier, et essayer de bien comprendre comment tu as procédé Bunyan, encore merci pour votre aide tout les deux ![]()
Non ce que tu decris s'appelle final, et de toute facon ni static ni final ne devraient etre utilises ici ca n'a rien a faire la. Il est etrange par ailleurs de stocker le nombre de joueurs presents dans ton jeu par une variable statique. Je serais toi je ferais juste une autre classe qui s'appelerait JoueurManager et qui serait ni plus ni moins qu'un ArrayList de joueurs auquel tu mettrais toi-meme tes propres restrictions dans les methodes ajouterJoueur par exemple.
Je te conseille de bien verifier que tu as compris ce que le keyword static implique cela dit.
T'as mit des erreurs volontairement non ? ![]()
if (joueurs == null)
if (nbJoueurs == 0)
Ah moins que t'ai voulu faire autre chose ![]()
Il est etrange par ailleurs de stocker le nombre de joueurs presents dans ton jeu par une variable statique. Je serais toi je ferais juste une autre classe qui s'appelerait JoueurManager et qui serait ni plus ni moins qu'un ArrayList de joueurs auquel tu mettrais toi-meme tes propres restrictions dans les methodes ajouterJoueur par exemple.
Ouais j'avoue qu'un tableau aurait été bien, mais j'ai fait le code Joueurs.java il y a 4 semaines, lorsque je débutais mon stage, et j'utilisais que ce que j'avais vu en cours car j'avais pas internet (comme maintenant) pour m'aider...
Donc là si je dois tout modifier, je vais jamais finir à temps...
Pour ceci : "if (joueurs == null)
if (nbJoueurs == 0) "
Je suis parti du principe que l'objet Joueurs n'existait pas TANT QUE la personne n'avait pas rentré un nombre de joueur acceptable.
Ainsi, si le nombre de joueur est bon, l'objet Joueurs est créé ensuite, et le bouton "valider" ne passera plus jamais ici (il n'a pas à le faire).
"Donc là si je dois tout modifier, je vais jamais finir à temps..."
Oui en meme temps c'est vraiment pas un probleme esthetique la mais vraiment un design chelou... Je ne veux pas etre pessimiste mais ton stage se termine demain de toute facon non ? Et si j'ai bien compris c'est pas le dernier probleme que tu as non ? Ca sera de toute facon tendu de boucler tout ca en un jour.
J'ai cherché des explications pour le static, apparemment il y aurait une histoire avec les variables d'instances, enfin je vais pas vous cacher que j'ai pas bien comprit...
Ma prof m'avait expliqué le fait qu'une variable static c'était comme une constante, ça bougeait plus une fois que c'était défini...si elle m'a raconté des conneries ~_~
Le fait est que je trouve pas la solution, j'ai envie de récupérer ce qui est rentré dans mon JTextField via la methode getTextRep() si c'est du type String, ou getIntRep() si c'est des Integer, or à cause de ce problème de static, ça ne veut pas me les récupéré
Vous êtes sûr qu'on parle bien des mêmes static ? Parce que bon je veux vous croire, mais que ma prof me dise de la merde, ça me mettrai mal pour mon BTS ![]()
non il me reste une semaine ![]()
Dans ce cas :
- Debarasse toi de ce static
- Fais une classe JoueurManager
- Vire ta prof si elle reconfirme cette explication de static (qui est celle pour final)
Une variable statique (methode ou attribut) appartient a ta classe, elle est accessible sans instantiation (objet). Une variable d'instance (donc non statique) appartient aux objets instanties d'une classe, autrement dit leur porte depend du cycle de vie d'un objet.
Dans ton cas precis tu es dans une fonction statique et tu veux faire appel a une fonction d'instance..... ben oui mais ta fonction d'instance elle appartient a un objet... comment pourrait-on de toute facon savoir quel objet est-ce sachant que l'on est dans un contexte static et non d'instance ?
Merci pour tes explications clairs et précises ![]()
Bon j'ai regardé des explications pour les ArrayList, mais ça m'a l'air de ne pas correspondre à mon problème en fait, et je pense pas que cela soit adapté pour créer des joueurs
Pour créer les joueurs, j'avais au début du stage utilisé une manière vu en cours :
public class Joueurs {
private int numJoueur;
private String nomJoueur;
private String habilitation1Joueur;
private String habilitation2Joueur;
private String habilitation3Joueur;
private String habilitation4Joueur;
private int nbpoints;
private static int i=1;
public Joueurs (int num, String Joueur, String habilitation1 , String habilitation2 , String habilitation3 , String habilitation4, int points){
this.numJoueur = num;
this.nomJoueur = Joueur;
this.habilitation1Joueur = habilitation1;
this.habilitation2Joueur = habilitation2;
this.habilitation3Joueur = habilitation3;
this.habilitation4Joueur = habilitation4;
this.nbpoints = points;
}
public void Candidats(){
this.numJoueur = i;
Fenetre.textProg.append("Le joueur rentre son nom :");
this.nomJoueur = Lire.S();
Fenetre.textProg.append("Le joueur rentre son habilitation n°1 :");
this.habilitation1Joueur= Lire.S();
Fenetre.textProg.append("Le joueur rentre son habilitation n°2 :");
this.habilitation2Joueur= Lire.S();
Fenetre.textProg.append("Le joueur rentre son habilitation n°3 :");
this.habilitation3Joueur= Lire.S();
Fenetre.textProg.append("Le joueur rentre son habilitation n°4 :");
this.habilitation4Joueur= Lire.S();
i++;
}
Puis dans le programme qui s'exécute :
// liste des joueurs, 6 emplacements max
Joueurs j1 = new Joueurs(0, null, null , null , null , null, 0);
Joueurs j2 = new Joueurs(0, null, null , null , null , null, 0);
Joueurs j3 = new Joueurs(0, null, null , null , null , null, 0);
Joueurs j4 = new Joueurs(0, null, null , null , null , null, 0);
Joueurs j5 = new Joueurs(0, null, null , null , null , null, 0);
Joueurs j6 = new Joueurs(0, null, null , null , null , null, 0);
if (a==2){// Si 2 joueurs
j1.Candidats();
j2.Candidats();
...
Et on continu les if jusqu'à 6 joueurs, cela marchait bien...sous la console d'eclipse
Pffff bon je crois que de tout de façon c'est mort, j'arriverai jamais à régler les problèmes, j'ai pas le niveau pour faire un programme de ce type...c'est bien dommage, car j'aurai apprit pas mal de choses quand même.
Un ArrayList c'est juste un tableau dynamique hein rien de plus tu sais... peut-etre que tu n'en as pas besoin dans tous les mais dans ce cas je t'assure que tu devrais differencier tes donnees (un joueur) de leur logique (JoueurManager).
Et c'est nul de se rabaisser je pense que tu es tres proche de la solution et que tu as tout a fait le niveau pour continuer ton programme.
tbop2 : "Et c'est nul de se rabaisser je pense que tu es tres proche de la solution et que tu as tout a fait le niveau pour continuer ton programme. "
De même.
J'ai vu que tu avais utilisé le GridBagLayout. C'est le layout évité par la très grande majorité des débutants commençant les interfaces graphiques, car celui-ci est assez complexes à comprendre et mettre en œuvre les premières fois.
Donc, si tu l'as mis en œuvre, et compris ce que tu as fait (au moins à peu près), j'appuie la phrase de tbop2.
Pose-toi quelques minutes, lâche le Pc, réfléchis bien à ton problème, n'hésite pas à l'écrire sur un papier et penses-y calmement ![]()
Tu devrais trouver une solution, ou au moins plusieurs pistes à creuser ;)
Merci les gars =')
Pour le GridBagLayout j'en avait chié au début, mais ayant trouvé un tuto qui expliquait bien sur développez.net, j'ai su très bien comprendre comment cela s'utilisait et ça ne m'a pas plus posé problème.
Je vais réfléchir calmement à une solution alors, je vous tiendrai au courant de tout de façon. ![]()
Salutation,
Bon j'ai un petit peu avancé, or j'ai encore un problème, je vois bien de quoi il s'agit, mais je ne trouve pas de solution pour le régler.
http://pastebin.com/Rd5xduQV
http://pastebin.com/DX8MDc4r
Si vous l'exécutez, vous verrez que pour entrer le nombre de joueurs il n'y a pas de problèmes, or pour rentrer les infos des joueurs là ça se corse...car le programme n'attend pas que l'utilisateur rentre les infos dans la zone de texte...
Je comprends bien que le problème vient du fait que ce que j'ai mit dans Candidats() ne suffit pas, car il ne comprend pas qu'il faut attendre que l'utilisateur rentre du texte puis le valide.
Et c'est là la difficulté, car lorsque l'utilisateur valide, l'action du bouton recommence du début (dans Fenetre.java, if(e.getSource == buttonRep)...).
Auriez vous une idée de quoi mettre dans Candidats() pour pas que au clic de Valider la lecture reprenne pas du début, et que l'utilisateur puisse rentrer les infos ?
Ici ou ailleurs personne n'executera jamais ton code
J'ai vite fait lu ta description, ton pastebin regorge de la moitie du source code quand j'imagine seule une petite partie est mise en defaut ici. Je te conseille de reposter un nouveau message avec une description un peu plus precise et seulement un pastebin des zones precises ou tu as un probleme.
Événementielle, toujours ;)
Personnellement, je te conseillerai de créer un JDialog custom avec un wizard pour créer le joueur.
Premier écran : "Le prénom"
Deuxième écran : "Choisissez l'habilitation"
Ou un seul écran avec les 2 champs.
À la validation, cela met à jour le Joueur correspondant.
Dis-toi bien que toutes tes instructions se dérouleront, que tu le veuilles ou non ![]()
Pense à tout les logiciels que tu as installé, que tu as utilisé. À chaque fois qu'il fallait entrer des informations, c'était dans des champs prévus pour, et le code derrière se mettait à jour suivant les événements de cet UI.
Lien pour le JDialog custom : http://docs.oracle.com/javase/tutorial/uiswing/components/dialog.html
Je te conseil aussi de faire un BoxLayout vertical pour afficher les JLabel de tes joueurs, et de n'afficher tes joueurs qu'une fois l'initialisation faite, pas avant.
Joueurs : http://pastebin.com/tdScBMkr
Fenetre : http://pastebin.com/icufsd2Z
Je les ai un peu retravaillé pour que ce soit plus simple (plus de variable j1, j2, ... , j6, mais une List<Joueurs>).
Tu as aussi des commentaires dans le code.
Pour l'indentation, c'est la mienne, et elle ne plaît pas à tout le monde, donc je te conseils vivement de remettre la tienne ensuite ^^"
@tbop2 : ça me change les idées, et le code est très court, mine de rien.
Le problème se situe dans Joueurs#Candidat. Tout est fait en séquence, et l'entrée utilisateur n'est pas attendue.
http://pastebin.com/8seD6aFw
http://pastebin.com/vEiMJTbw
Je vais la refaire : Lorsque le programme demande "Combien il y a de joueurs ?", l'utilisateur rentre un chiffre, si il n'est pas comprit entre 2 et 6, ça va lui demander de recommencer, là pas de problème ça marche.
Une fois le nombre défini, on entre les infos de chaque joueurs, or c'est là que ça coince, ça n'attend pas que l'utilisateur saisie du texte, ça affiche toutes les phrases contenues dans Candidats() à la suite, et donc les Joueurs n'ont pas de nom, ni habilitations...
Bunyan
Wow merci pour tes explications, mais comment t'as fais pour modifier aussi vite le code ?! T'es un dieu en java ou bien...?
Et ce que tu me propose a l'air pas mal, or je dois finir le projet d'ici vendredi, au rythme auquel j'avance...j'aurai sûrement pas le temps d'entreprendre des changements de cet envergure ![]()
Je vais quand même voir de quoi il en retourne, et tester si je peux modifier ça.
J'ai juste commenté ~50 lignes, retirer 2-3 mots-clés et changer une variable de type. Rien de bien transcendant non plus.
Si tu penses que tu n'auras pas le temps, je te suggère de définir ce que tu pourras faire (de sûr), ce que tu pourrais faire (ça va être plus tendu) et ce que tu ne pourras pas faire. Tu fais en priorité ce que tu penses pouvoir faire, tu t'attaques ensuite à la deadline la plus chaude, et le reste, tu ne t'en occupes pas, tu le gardes pour la soutenance.
Ainsi, tu pourras présenter un travail non-fini, mais que tu sais faire comment faire évoluer pour aller vers la fin. De plus, cela te permet de d'entraîner au chiffrage de ton travail ("en combien de temps je fais ça ?" -> une estimation, on fait, on essaye de tenir, et on compare).