CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[Java] Une fois son code fini...

Bunyan
Bunyan
Niveau 17
18 juin 2012 à 16:55:58

@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 ? "
:d)
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. "
:d)
C'est faisable, mais je prédis un problème au niveau de l'ascenseur, qui ne va pas en bas par défaut.

tbop2
tbop2
Niveau 10
18 juin 2012 à 18:48:57

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.

Pseudo supprimé
Pseudo supprimé 18 juin 2012 à 22:36:52

tbop2 :d) Oui enfin je m'en sort pas avec la doc' :rouge:
Je pige pas bien l'anglais...

Qu'est ce que tu veux dire par overrider un évènement ? Le modifier ?

Bunyan :d) " 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 :hap:
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 :-(

Bunyan
Bunyan
Niveau 17
19 juin 2012 à 08:13:55

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

tbop2
tbop2
Niveau 10
19 juin 2012 à 09:12:59

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

Pseudo supprimé
Pseudo supprimé 19 juin 2012 à 09:28:40

Bordel de m**** :fou:
Merci à vous ça marche ! :-d

https://image.noelshack.com/fichiers/2012/25/1340090772-Sanstitre.png
Regardez :p)

Encore merci pour vos indications, vous êtes super.

tbop2 :d) 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 :oui:

Pseudo supprimé
Pseudo supprimé 19 juin 2012 à 11:34:05

Bon j'ai avancé depuis tout à l'heure :)

Mais j'ai maintenant un problème, regardez je vais vous expliquer :
https://image.noelshack.com/fichiers/2012/25/1340097826-Sanstitre.png

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 ? :doute:

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.

tbop2
tbop2
Niveau 10
19 juin 2012 à 12:11:34

"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). :ok:

Pseudo supprimé
Pseudo supprimé 19 juin 2012 à 13:37:13

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 :-(

Bunyan
Bunyan
Niveau 17
19 juin 2012 à 13:40:56

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.

Pseudo supprimé
Pseudo supprimé 19 juin 2012 à 13:47:40

tbop2 :d) 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.

tbop2
tbop2
Niveau 10
19 juin 2012 à 14:01:43

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

Pseudo supprimé
Pseudo supprimé 19 juin 2012 à 14:04:43

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 :o))

tbop2
tbop2
Niveau 10
19 juin 2012 à 15:00:49

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 ! :rire:

Pseudo supprimé
Pseudo supprimé 19 juin 2012 à 15:44:26

Tu n'as jamais utilise des println pour debuguer de toute facon ? Arrete de mentir ! :rire:

:d) Je te rappelle que je ne suis qu'un pauvre petit BTS SIO de première année qui découvre le java :cute:
Non mais j'te jure quand je te dis que j'utilise la console pour faire tourner le programme :hap:
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à :noel:

Sinon, j'ai à nouveau un petit soucis (un de plus :-( ) regardez :
https://image.noelshack.com/fichiers/2012/25/1340112979-Sanstitre.png

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 :hap:

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

Bunyan
Bunyan
Niveau 17
19 juin 2012 à 15:59:05

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.

Pseudo supprimé
Pseudo supprimé 19 juin 2012 à 16:05:06

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 :)

tbop2
tbop2
Niveau 10
19 juin 2012 à 16:55:27

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

tbop2
tbop2
Niveau 10
19 juin 2012 à 16:56:16

http://netbeans.org/kb/articles/gui-functionality.html#how

Pseudo supprimé
Pseudo supprimé 19 juin 2012 à 18:52:22

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.

Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Internet
  • Macintosh
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment