Probleme affichage dans un JTextArea
rela33
Messages postés
4
Statut
Membre
-
rela33 -
rela33 -
Bonjour à tous,
j'ai mon TextArea dans une classe appelée message :
La methode display() donne les différents messages à afficher dans le JTextArea. (Ce sont des messages concernant une initialisation d'un API mais c'est pas important)
Le getResponse() me permet de renvoyer le JTextArea à la vue et le println c'était pour vérifier le contenu du TextArea et il est bien modifié à chaque nouveau message!
Mais au point de vue graphique je reste toujours avec un bijour.
J'ai pensé que c'était un problème de rafaichissement, j'ai essayé pas mal de truc avec la gestion d'évènement ou le modifier en JTextField et utiliser TextListener ou même un timer pour le rafraichir à chaque fois mais soit je m'y prend mal soit ce n'est pas la bonne méthode.
Dans ma vue j'ai ça:
Merci d'avance!
j'ai mon TextArea dans une classe appelée message :
public Message(){
reponse = new JTextArea("",10, 10);
reponse.setEditable(false);
reponse.setText("bijour");
}
public int display(MoneticMessageDisplay message) {
System.out.println("Sa doit ecrire");
reponse.setText(message.getDisplay());
return 0;
}
public JTextArea getResponse(){
System.out.println("YA KELKUN!!! " + reponse.getText());
return reponse;
}
La methode display() donne les différents messages à afficher dans le JTextArea. (Ce sont des messages concernant une initialisation d'un API mais c'est pas important)
Le getResponse() me permet de renvoyer le JTextArea à la vue et le println c'était pour vérifier le contenu du TextArea et il est bien modifié à chaque nouveau message!
Mais au point de vue graphique je reste toujours avec un bijour.
J'ai pensé que c'était un problème de rafaichissement, j'ai essayé pas mal de truc avec la gestion d'évènement ou le modifier en JTextField et utiliser TextListener ou même un timer pour le rafraichir à chaque fois mais soit je m'y prend mal soit ce n'est pas la bonne méthode.
Dans ma vue j'ai ça:
Message message = new Message() texteAsc = new JScrollPane(message.getResponse()); add(texteAsc, BorderLayout.CENTER);
Merci d'avance!
A voir également:
- Probleme affichage dans un JTextArea
- Affichage double ecran - Guide
- Problème affichage fenêtre windows 10 - Guide
- Problème affichage page internet google chrome ✓ - Forum Google Chrome
- Windows 11 affichage classique - Guide
- Problème d'affichage/bugs graphiques sur Chrome sur Android - Forum Téléphones & tablettes Android
8 réponses
Bonjour,
1/ta méthode getMessage() de MoneticMessageDisplay retourne bien un String?
2/ Ca n'a rien à voir, mais pourquoi ta méthode display retourne 0? A quoi te sert-il?
Merci
1/ta méthode getMessage() de MoneticMessageDisplay retourne bien un String?
2/ Ca n'a rien à voir, mais pourquoi ta méthode display retourne 0? A quoi te sert-il?
Merci
Déja merci de me réponde jsuis limite desespérée là j'en peux plus!
<quote>
1/ta méthode getMessage() de MoneticMessageDisplay retourne bien un String?
</quote
je pense que tu parle de message.getDipslay()? Si c'est ca oui elle retourne bien un string pour être plus préciser je reçois parfaitement les messages sur la console mais je n'arrive pas à les afficher dans ma TextArea
<quote>
2/ Ca n'a rien à voir, mais pourquoi ta méthode display retourne 0? A quoi te sert-il?
</quote>
Je me posée la même question! Et mon chef de stage n'a pas pu me répondre mais je dois laisser comme ça. En fait moi j'ai du implémenté l'interface et danc cette interface cette fonction était déclaré comme cela donc j'ai laissé.
De plus je ne peux pas utiliser cette fonction par moi même car le paramètre message est trouvé grâve à plein d'autre fonctions!!
En fait quand j'appuis sur le bouton valider je lance mon initilisation comme cela :
<quote>
1/ta méthode getMessage() de MoneticMessageDisplay retourne bien un String?
</quote
je pense que tu parle de message.getDipslay()? Si c'est ca oui elle retourne bien un string pour être plus préciser je reçois parfaitement les messages sur la console mais je n'arrive pas à les afficher dans ma TextArea
<quote>
2/ Ca n'a rien à voir, mais pourquoi ta méthode display retourne 0? A quoi te sert-il?
</quote>
Je me posée la même question! Et mon chef de stage n'a pas pu me répondre mais je dois laisser comme ça. En fait moi j'ai du implémenté l'interface et danc cette interface cette fonction était déclaré comme cela donc j'ai laissé.
De plus je ne peux pas utiliser cette fonction par moi même car le paramètre message est trouvé grâve à plein d'autre fonctions!!
En fait quand j'appuis sur le bouton valider je lance mon initilisation comme cela :
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equals("Quitter")) {
System.exit(0);
}
else{
nom = VueAdmin.getNom().getText();
resulVerifNom = VueAdmin.VerifNom(VueAdmin.getNom());
resulVerifTpv = VueAdmin.VerifTPVnb(VueAdmin.getTPV());
//si les données rentrées sont correctes je lance l'initialisation
if (resulVerifNom && resulVerifTpv)
{
lancerinitialisation()
}
}
Quelques info suppl
Lancerinitialisation() c'est plusieurs fonctions que je n'ai pas programmé moi même ça vient de l'entreprise donc je ne les mets pas ici.
De plus je pense à utiliser un Thread et ensuite EventQueue.InvokeLater (j'ai vu ça dans un forum)
Mais j'ai beaucoup de mal à voir comment l'implémenter dans mon code..
En effet le premier problème c'est que si je modifie mon textArea dans le controleur dans la methode ActionPerformed ça marche (il n'y a pas la notion d'affichage au fur et à mesure c 'est juste un TextArea.setText("kikou"))
Mais si j'essaye de le faire avec la classe Message que je dois utiliser, la modification n'est pas prise graphiquement (parce que sur la console les modifs ont bien été fait)
Lancerinitialisation() c'est plusieurs fonctions que je n'ai pas programmé moi même ça vient de l'entreprise donc je ne les mets pas ici.
De plus je pense à utiliser un Thread et ensuite EventQueue.InvokeLater (j'ai vu ça dans un forum)
Mais j'ai beaucoup de mal à voir comment l'implémenter dans mon code..
En effet le premier problème c'est que si je modifie mon textArea dans le controleur dans la methode ActionPerformed ça marche (il n'y a pas la notion d'affichage au fur et à mesure c 'est juste un TextArea.setText("kikou"))
Mais si j'essaye de le faire avec la classe Message que je dois utiliser, la modification n'est pas prise graphiquement (parce que sur la console les modifs ont bien été fait)
Resalut,
Ok pour tes explications. Si ton message est bien affiché en console, c'est qu'effectivement c'est ok sur ce point là.
As-tu essayé la méthode repaint() dans ta classe d'affichage (elle doit étendre JFrame non?) ?
Ok pour tes explications. Si ton message est bien affiché en console, c'est qu'effectivement c'est ok sur ce point là.
As-tu essayé la méthode repaint() dans ta classe d'affichage (elle doit étendre JFrame non?) ?
Coucou merci encore pour ta réponse.
Sans vouloir raconter ma vie, je suis en stage sans mon chef de projet, sans celui qui s'occupe de moi sur ce projet et sans un autre qui m'a déjà aidé en Java.
Oui je demande votre pitié lol .
Pour ce qui est de repaint() je l'ai essayé un peu partout...
Dans la classe Message ds la méthode display(..) à chaque fois qu'on a un message on rafrachit comme tu me l'as proposé si j'ai bien compris. J'ai essayé sur le TextArea et sur la vue mais rien ni fait... J'ai essayé sur le controleur à mon avis c'est faut mais au point j'en étais j'essayais vraiment partout! J'ai même essayé un validate aussi ou un update() sans succès peut être que je ne les place pas au bon endroit aussi je ne sais pas trop...
Ce qui est bizzare ce que ok l'affichage au fur et à mesure ne marche pas, je veux bien. Mais ça devrait au moins m'afficher tous les messages à la fin alors?
Sans vouloir raconter ma vie, je suis en stage sans mon chef de projet, sans celui qui s'occupe de moi sur ce projet et sans un autre qui m'a déjà aidé en Java.
Oui je demande votre pitié lol .
Pour ce qui est de repaint() je l'ai essayé un peu partout...
Dans la classe Message ds la méthode display(..) à chaque fois qu'on a un message on rafrachit comme tu me l'as proposé si j'ai bien compris. J'ai essayé sur le TextArea et sur la vue mais rien ni fait... J'ai essayé sur le controleur à mon avis c'est faut mais au point j'en étais j'essayais vraiment partout! J'ai même essayé un validate aussi ou un update() sans succès peut être que je ne les place pas au bon endroit aussi je ne sais pas trop...
Ce qui est bizzare ce que ok l'affichage au fur et à mesure ne marche pas, je veux bien. Mais ça devrait au moins m'afficher tous les messages à la fin alors?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Essaie plutôt de faire :
reponse.setText(response.getText()+"\n"+message.getDisplay());
Parce qu'en fait je viens de voir que tu ne reprends pas le contenu du TextArea pour le réafficher à nouveau, tu ne fais que le remplir avec une nouvelle phrase sans réécrire le contenu déjà présent d'où ce que je te propose.
C'est à dire remplir le contenu du textarea avec ce qui était déjà dedans avant, d'où mon response.getText() qui récupère le contenu du textarea, puis de passer à la ligne avec un \n, puis de rajouter à cela ton arrivée de message.
Essaie et dis moi si ça marche.
reponse.setText(response.getText()+"\n"+message.getDisplay());
Parce qu'en fait je viens de voir que tu ne reprends pas le contenu du TextArea pour le réafficher à nouveau, tu ne fais que le remplir avec une nouvelle phrase sans réécrire le contenu déjà présent d'où ce que je te propose.
C'est à dire remplir le contenu du textarea avec ce qui était déjà dedans avant, d'où mon response.getText() qui récupère le contenu du textarea, puis de passer à la ligne avec un \n, puis de rajouter à cela ton arrivée de message.
Essaie et dis moi si ça marche.
J'ai essayé et donc je reprend bien tous les messages sur la console mais toujours rien niveau graphique
console:
"reponse :" c'est pour m'indiquer que c'est l'affichage de la TextArea
Et au niveau graphique j'ai que bonjour.
Pour ce que tu m'as dit sinon , je pense faire reponse.append au lieu de setText aprés j'aurais pas le \n mais c'est faisable aussi de toute façon ça revient à la même chose.
Je pense que pour l'instant le véritable problème c'est que quand je passe par la classe Message pour modifier graphiquement ça ne fait rient alors que quand je passe par le controleur (le bouton valider) je n'ai pas de souci...
Mais je ne vois pas du tout pourquoi...
console:
reponse :bonjour C3 5.2 - 3.00 21/12/07 A03E Initialisation Admin en cours... Initialisation Admin Terminee Initialisation Cheque en cours... Initialisation Cheque Terminee Initialisation Amex en cours... Initialisation Amex Terminee CHARGEMENT LECTEUR EN COURS CHARGEMENT LECTEUR TERMINE Initialisation Amex Terminee Initialisation Aurore en cours... Initialisation Aurore Terminee Initialisation Sofinco en cours... Initialisation Sofinco Terminee Initialisation EMV en cours... Initialisation EMV Terminee CHARGEMENT LECTEUR EN COURS CHARGEMENT LECTEUR TERMINE Initialisation EMV Terminee
"reponse :" c'est pour m'indiquer que c'est l'affichage de la TextArea
Et au niveau graphique j'ai que bonjour.
Pour ce que tu m'as dit sinon , je pense faire reponse.append au lieu de setText aprés j'aurais pas le \n mais c'est faisable aussi de toute façon ça revient à la même chose.
Je pense que pour l'instant le véritable problème c'est que quand je passe par la classe Message pour modifier graphiquement ça ne fait rient alors que quand je passe par le controleur (le bouton valider) je n'ai pas de souci...
Mais je ne vois pas du tout pourquoi...
Je comprends pas ta console t'affiche ce qui sort dans ta classe Message ou bien l'affichage console provient d'une autre classe?
Parce que ayant déjà fait des JTextArea je n'ai jamais eu de problème comme cela.
Ce que je crois est que ton constructeur est bien initialisé à l'appel de la classe, mais ensuite je crois que ton objet Message n'est plus utilisé, parce que sinon si des messages étaient injectés ils apparaîtraient hors ce n'est pas le cas dans ton jtextarea.
Tu es sûr que les messages sont bien envoyés au niveau graphique avec la méthode Display ?
Moi je serais toi je passerais en mode full debug pour voir où ca cloche, car là sinon c'est pas facile de trouver.
Parce que ayant déjà fait des JTextArea je n'ai jamais eu de problème comme cela.
Ce que je crois est que ton constructeur est bien initialisé à l'appel de la classe, mais ensuite je crois que ton objet Message n'est plus utilisé, parce que sinon si des messages étaient injectés ils apparaîtraient hors ce n'est pas le cas dans ton jtextarea.
Tu es sûr que les messages sont bien envoyés au niveau graphique avec la méthode Display ?
Moi je serais toi je passerais en mode full debug pour voir où ca cloche, car là sinon c'est pas facile de trouver.
Elle m'affiche le contenu du TextArea , ici je le regarde dans la classe message avec System.out.println(reponse.getMess());
Je viens de faire la même chose mais sur la classe du controleur et à la fin de l'initialisation j'obtien le résultat du contenu du TextArea et j'ai bien tous les messages.
Que veux tu dire par "les messages sont bien envoyés au niveau graphique?" C'est surement là méthode que je cherche. A part faire un setText(...) je ne sais pas quoi faire d'autre pour l'envoyer au niveau graphique.
Je viens de faire la même chose mais sur la classe du controleur et à la fin de l'initialisation j'obtien le résultat du contenu du TextArea et j'ai bien tous les messages.
Que veux tu dire par "les messages sont bien envoyés au niveau graphique?" C'est surement là méthode que je cherche. A part faire un setText(...) je ne sais pas quoi faire d'autre pour l'envoyer au niveau graphique.
Bonjour,
juste une petite remarque, pourquoi mettez vous votre JTextArea en lecture seule?
CF:
Voici ce que la javadoc dit:
setEditable
public void setEditable(boolean b)
Sets the specified boolean to indicate whether or not this TextComponent should be editable. A PropertyChange event ("editable") is fired when the state is changed.
Parameters:
b - the boolean to be set
Je pense que votre problème viens de là. A moins que cette propriété ne bloque l'écriture que dans le GUI. Et non pas par programme. Bien à vous.
juste une petite remarque, pourquoi mettez vous votre JTextArea en lecture seule?
CF:
message.setEditable(false);
Voici ce que la javadoc dit:
setEditable
public void setEditable(boolean b)
Sets the specified boolean to indicate whether or not this TextComponent should be editable. A PropertyChange event ("editable") is fired when the state is changed.
Parameters:
b - the boolean to be set
Je pense que votre problème viens de là. A moins que cette propriété ne bloque l'écriture que dans le GUI. Et non pas par programme. Bien à vous.
Oui c'est pour éviter que l'utilisateur ne modifie les messages mais j'ai résolu un probleme!!!
C'est bon les messages s'affichent!! vous ne pouviez pas m'aider c'était dans une fonction que je n'ai pas mise ici.
En fait je faisais dans une fonction : lafonction(new Message())
Hors dans new message je créé une TextArea donc j'avais toujours cette TextArea affiché avec que le bonjour, je réinitialisait à chaque fois en fait!!!
Bref j'ai fait mon TextArea plus haut et maintenant c'est bon.
Now le véritable problème!!!!!
Comment afficher les messages au fur et à mesure au lieu que tout arrive à la fin?
(Je vais réessayer tout ce que j'ai déjà fait parce que maintenant peut être que ça marchera ^^)
Si jamais vous avez une idée je suis tout ouïe!!!
C'est bon les messages s'affichent!! vous ne pouviez pas m'aider c'était dans une fonction que je n'ai pas mise ici.
En fait je faisais dans une fonction : lafonction(new Message())
Hors dans new message je créé une TextArea donc j'avais toujours cette TextArea affiché avec que le bonjour, je réinitialisait à chaque fois en fait!!!
Bref j'ai fait mon TextArea plus haut et maintenant c'est bon.
Now le véritable problème!!!!!
Comment afficher les messages au fur et à mesure au lieu que tout arrive à la fin?
(Je vais réessayer tout ce que j'ai déjà fait parce que maintenant peut être que ça marchera ^^)
Si jamais vous avez une idée je suis tout ouïe!!!
Monetic message Display est une classe qui me permet de recevoir des affichages d'un API, je dois lancer l'initialisation et recevoir via mon textarea le résultat de cette initialisation et il y a donc plusieurs messages qui doivent apparaitrent au fur et a mesure...
J'espère avoir été plus claire.