@Megatotor : "J'aimerai savoir si il était possible d'afficher les valeurs sélectionnées dans les listes déroulantes, dans la zone de texte du joueur ? Genre je choisi dans habilitation une valeur contenue dans la JComboBox, je clique dessus et hop la valeur apparait dans le JTextField...c'est possible ? "
![]()
Oui. Tu l'affiches déjà en console, il suffit juste d'afficher dans ça dans le bon composant, donc à ajouter du texte dans celui-ci.
"Et ma seconde question : En haut j'ai mit un JTextArea, c'est ici que je veux faire défiler le texte de mon programme (genre les règles du jeu, les questions bref, tout le blabla quoi), est ce que le JTextArea est fait pour ? J'ai mit un JScrollPane pour ne pas avoir de limite avec la taille de la fenêtre de base. "
![]()
C'est faisable, mais je prédis un problème au niveau de l'ascenseur, qui ne va pas en bas par défaut.
Pour préciser la réponse à la première réponse. Normalement j'imagine que ces deux composant comboBox1 et textField1 doivent appartenir à la même hiérarchie donc normalement l'un est accessible à partir de l'autre. Il suffit de overrider le bon évènement dans ta comboBox (ca doit etre un truc qui doit s'appeler genre SelectionChanged j'imagine) et juste de remplacer le texte présent dans le textfield par la valeur selectionnée dans la combobox. Regarde la documentation mais il n'y rien de sorcier ça doit tenir en un bon click dans l'interface Netbeans pour qu'il override automatiquement l'event de ta JComboBox et juste un setter à appeler sur ton bon JTextField.
tbop2
Oui enfin je m'en sort pas avec la doc' ![]()
Je pige pas bien l'anglais...
Qu'est ce que tu veux dire par overrider un évènement ? Le modifier ?
Bunyan
" Oui. Tu l'affiches déjà en console, il suffit juste d'afficher dans ça dans le bon composant, donc à ajouter du texte dans celui-ci. "
Oui ça j'avais deviné merci ![]()
Si je demande des indications, c'est surtout pour m'indiquer le nom du composant qui fait ça, parce que j'ai beau chercher sur internet, je tombe tout le temps sur "comment faire pour récupérer la valeur d'un JTextField", et non l'inverse ![]()
Le composant, tu l'as déjà
Tu as écrit "[...] je clique dessus et hop la valeur apparait dans le JTextField...c'est possible ?".
Le composant cible est donc un JTextField, comme tu l'a écrit.
Après, au niveau de la méthode, pour tout les composants textuelles que j'ai rencontré jusqu'à présent, il y avait des méthodes/fonctions "setText", "addText", "appendText", ce genre de chose.
C'est le cas pour le JTextField : http://docs.oracle.com/javase/1.4.2/docs/api/javax/swing/text/JTextComponent.html#setText%28java.lang.String%29
La doc sera toujours en anglais quel que soit le langage, le framework, l'algorithme. Il faut s'y mettre des maintenant car c'est de toute facon reculer pour mieux plonger.
Un programmeur ne peut pas avancer et progessser sans savoir lire et ecrire un anglais technique c'est meme pas facultatif c'est vital. ![]()
Bordel de m**** ![]()
Merci à vous ça marche !

Regardez
Encore merci pour vos indications, vous êtes super.
tbop2
L'anglais ne me pose pas spécialement problème, après ce sont les termes techniques que je connais pas, faudra que je me fasse du vocabulaire informatique, promis je m'y mettrai ![]()
Bon j'ai avancé depuis tout à l'heure
Mais j'ai maintenant un problème, regardez je vais vous expliquer :
J'ai réussi à trouver un moyen d'utiliser les JtextArea comme la console d'eclipse.
PrintStream out = new PrintStream(new TextAreaOutputStream(textProg));
System.setOut(out);
System.setErr(out);
Cela me permet de faire apparaitre mes System.out.print non plus dans la console mais directement dans ma fenêtre, c'est juste génial.
Or comme vous devez le voir sur l'image, les caractères spéciaux (é, à, etc...) ne passent pas, j'ai cherché, je suis tombé sur les codes unicodes, mais rien n'y fait, j'ai testé pour changer le "é" ça ne passe passe pas ![]()
Sauriez vous comment faut-il faire ?
Mon deuxième problème, c'est que lorsque je clique sur valider pour envoyer ma chaine de caractère, celle ci efface le texte qu'il y a à l'écran ! Y a t-il une instruction spéciale pour faire comprendre d'aller à la suite sans effacer le précédant texte ?
Et aussi, j'ai l'impression que le PrintStream n'arrive qu'à afficher le texte, mais ne peut pas lire les chaines de caractères / integer / booléen qu'on met...Je vous avoue que je n'ai pas encore cherché de solution pour ce problème, j'imagine qu'il faut mettre d'autre instruction par rapport aux lignes que je vous ai montré juste avant peut-être ? Ou mettre un composant qui permet de lire ?
Merci de votre aide encore une fois.
"Cela me permet de faire apparaitre mes System.out.print non plus dans la console mais directement dans ma fenêtre, c'est juste génial. "
Genial mais absolument pas fait pour ca a l'origine. Ici on parle a l'utilisateur pas au programmeur, le sortie console n'a rien a faire a etre redirige vers ce JTextArea. Fais plutot ca http://bit.ly/MoM1LG et n'affiche PLUS JAMAIS de ta vie quelque chose qui devrait etre en console sous le nez du pauvre utilisateur qui n'y connait rien (et par dessus tout : n'a surtout pas le droit de savoir ce qu'il se passe sous le capot). ![]()
Ah c'est pas bien de faire ça ? ![]()
Je vais réfléchir comment faire autrement alors...
Mais en quoi faire afficher des system.out.print n'est pas recommandé ? L'utilisateur ne voit que du texte, pas des instructions.
Je suis bien d'accord avec toi sur le fait qu'un utilisateur n'a pas à voir le code en lui même.
Mais selon moi faire la réplique de la console me semblait bien car ça allait faire défiler mon texte quoi ![]()
La logique se tient, mais tu empruntes un chemin plus long que la normale dans ce cas
Pour afficher un texte, tu fais :
Texte -> console -> flux -> composant -> texte
La normale est :
Texte -> composant -> texte
Quand tu as le texte, tu n'as pas besoin de passer par la console pour l'afficher
Je pense que tu as fait ça comme "adapteur", puisque ton code n'affichait qu'en console et était fonctionnel de ce côté-ci. Ainsi, tu avais juste a faire une petite moulinette permettant de rediriger la sortie vers le bon composant.
tbop2
Merci pour le ".append", j'avais pas trouvé de réponse tout à l'heure, je vais chercher directement en anglais comme tu l'as fait, je risquerai de trouver plus de réponse sûrement.
"Mais en quoi faire afficher des system.out.print n'est pas recommandé ? L'utilisateur ne voit que du texte, pas des instructions. "
Pourquoi ? ben parce que la console c'est generalement utilise pour le debuguage donc imagine que tu aies par inadvertance laisse des logs ici et la ou des messages a la c** du style "ici", "par la", tout sera alors redirige vers ta JTextArea qui n'en a rien a faire.
Chaque chose a sa place.
Ah d'accord, je ne savais pas que la console était utilisée pour ça...je comprends bien mieux en effet.
J'utilisai la console pour faire tourner mon programme moi ![]()
Non mais tu fais ce que tu veux de ta console en fait. Le fait est que la tu rediriges tout ton flux de la console vers une fenetre qui dans tous les cas n'est pas faite pour ca. Donc a un moment ou a un autre tu auras des messages rediriges vers celle-ci qui n'auront rien a faire.... Et si tu as deux JTextArea dans ton programme comment tu aurais fait ? Tu changeais le flux a chaque fois ? Allons bon. ;)
Tu n'as jamais utilise des println pour debuguer de toute facon ? Arrete de mentir ! ![]()
Tu n'as jamais utilise des println pour debuguer de toute facon ? Arrete de mentir !
Je te rappelle que je ne suis qu'un pauvre petit BTS SIO de première année qui découvre le java ![]()
Non mais j'te jure quand je te dis que j'utilise la console pour faire tourner le programme ![]()
Ma prof nous a jamais montré un seul aspect des interfaces graphiques, je découvre là, en même temps j'obtiens votre aide qui m'est précieuse car je n'y connais rien du tout dans ce domaine...
Donc bon, dis toi que t'as un noob assoiffé de connaissance en face de ton écran là
Sinon, j'ai à nouveau un petit soucis (un de plus
) regardez :
Mon programme se lance, les règles apparaissent, hourra c'est génial, bref, une première question arrive, il faut rentrer un integer, je tape un chiffre dans la zone de saisie, j'appuie sur Valider et hop le 2 est entré...mais...rien ne se passe
Alors bon vous allez me dire "Mais t'as bien mit un système de lecture pour lire la valeur entrée par l'utilisateur ?", bah oui, c'est ça que je comprends pas, regardez mon code :
Fenetre.java contient les lignes suivantes :
public static void setProg(){
textProg.append("Bienvenu sur le \"Trivial Sécu\" les règles du jeu sont simples "BLABLABLA" -Bon courage à tous !\n \n");
Joueurs.Nombre();
}
...
public static void main(String args[])
{
new Fenetre();
setProg();
}
Ok, voilà pour Fenetre.java, maintenant l'autre class,
Joueurs.java contient ces lignes là :
public static int Nombre(){
Fenetre.textProg.append("Combien y a t-il de joueurs ? ");
Scanner scan = new Scanner(System.in);
nbJoueurs = scan.nextInt();
while (2 > nbJoueurs || 6 < nbJoueurs){
Fenetre.textProg.append("Les joueurs doivent être compris entre 2 et 6, recommencez : ");
nbJoueurs = scan.nextInt();
}
Fenetre.textProg.append("La partie va donc se jouer avec " +nbJoueurs+ " participants");
return nbJoueurs;
}
Donc j'ai aucune erreur de signalée, et normalement "Scanner scan = new Scanner(System.in); nbJoueurs = scan.nextInt();" me permet bien de lire les valeurs numériques je ne suis pas fou ?
Alors pourquoi lorsque j'envoie un chiffre il ne se passe rien ? ça n'arrive pas à le lire comme si il ne le voit pas...
Scanner ne te permet que de lire une entrée clavier.
Une entrée clavier est un événement, tout comme un clic sur un bouton, un redimensionnement, le remplissage d'une zone de texte, le mouvement d'une souris, un scroll ...
Pourquoi donc écris-je ça ? Simplement pour te dire que l'événement "entrée clavier" attendue par Scanner est sans aucune doute attrapée par l'UI avant que cela ne lui arrive (il y a un ordre de hiérarchie pour les événements). Quand un événement est pris et choisi de ne se propager, on parle d'événement consommé (et encore ... c'est pas dit ... n'ayant jamais utilisé la classe Scanner ...).
Ici, tu ne dois pas passer par la classe Scanner ![]()
Tu dois passer par un écouteur d'événement sur le bouton "valider" (pour détecter sa pression).
De mémoire, OnClickListener.
Ensuite, il faut que ce listener regarde la valeur entrée dans le champ de texte qu'il faut, fasse le contrôle (vide, valeur numérique, valeur non-entière, valeur incorrect) et qu'il fasse ensuite le traitement (ici : soit afficher "Les joueurs doivent être compris entre 2 et 6, recommencez" OU "La partie va donc se jouer avec " +nbJoueurs+ " participants").
Au niveau des interfaces graphiques, on parle de "programmation événementielle" : tu programmes des comportements en fonction des événements que l'interface reçoit (majoritairement).
Tu ne programmes plus des suites d'instructions devant être agencée/appelée dans un ordre logique
Ps : pour la partie "tu dois faire ..." je pars du principe que l'utilisateur rentre le chiffre dans la zone de texte et c'est l'appui sur le bouton "valider" qui fait le traitement.
Whoua merci beaucoup pour les détails.
Je comprends comment procéder, je vais me renseigner sur le OnClickListener, merci du conseil.
Je tiendrai vous tiendrai au courant de mon évolution si cela marche ou non.
Encore merci à tous ![]()
Justement Megatotor le debuguage a l'arrache en console au lieu de breakpoint bien senti c'est generalement le syndrome du newbie... Et d'ailleurs tu es peut-etre un newbie mais crois moi que tu te debrouilles deja pas mal et tu peux etre confiant pour la suite des aventures.
Concernant la surcharge d'evenement tout ca est ultra simplifie par Netbeans. Normalement tu vas dans l'editeur des views, tu cliques sur le component dont tu t'interesses a l'evenement. Ensuite dans la fenetre des proprietes intrinseques au component tu dois avoir un tab event comme ici (en bas a droite) http://netbeans.org/images_www/v7/1/screenshots/gui-builder.png
Clique juste dessus et tu vas avoir la liste de tous les evenements rattrapable par ce component. c'est tres self-explanatory donc tu dois effectivement avoir un truc genre "quand tu viens de me cliquer dessus", tu double cliques sur la case a cote Netbeans va alors automatiquement creer la fonction et te rediriger vers la partie du code source a overrider. Dans cette partie tu n'as juste qu'a faire le lien entre ce que tu veux et les autres components a l'ecran (ils sont accessibles en scope ici de toute facon). Voila.
Dans ce cas la quand tu as clique sur valide tu as juste a recuperer le texte present dans ta TextField et en faire ce que tu veux....
http://netbeans.org/kb/articles/gui-functionality.html#how
Ah ouais pas mal l'astuce avec NetBeans ô_Ô
Merci du tuyau, quand je reviendrai sur NetBeans je regarderai ça de plus près.
Là je suis sur Eclipse, je vais essayer de finir le programme cette semaine, il ne me reste plus grand chose je pense.