Probleme affichage dans un JTextArea

rela33 Messages postés 4 Statut Membre -  
 rela33 -
Bonjour à tous,

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!

8 réponses

arth Messages postés 10414 Statut Contributeur 1 293
 
Je comprends pas c'est quoi ce MoneticMessageDisplay ? ça sert à quoi?
0
rela33 Messages postés 4 Statut Membre
 
En fait je suis en stage et je dois ajouter mon ptit bout de prog à un programme déjà fait.

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.
0
rela33
 
Up!

C'est très important sviouplait! Je suis dessus depuis le début de la semaine!
0
Marco la baraque
 
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
0
rela33
 
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 :

           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()
			}
              }

				
				    
0
rela33 Messages postés 4 Statut Membre > rela33
 
Désolé j'ai appuyé sur une mauvaise touche et sa a envoyé le message jai pas pu le relire y a plein de fautes sorry!
0
rela33 Messages postés 4 Statut Membre
 
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)
0
Marco la baraque
 
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?) ?
0
rela33
 
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?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
arth Messages postés 10414 Statut Contributeur 1 293
 
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.
0
rela33
 
J'ai essayé et donc je reprend bien tous les messages sur la console mais toujours rien niveau graphique

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...
0
arth Messages postés 10414 Statut Contributeur 1 293
 
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.

0
rela33
 
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.
0
Blasco
 
Bonjour,
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.
0
rela33
 
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!!!
0
rela33 > rela33
 
je remonte ce sujet !
Si quelqu'un à une idée sur la façon d'afficher un message dans un Jtextarea au fur et a mesure je suis preneuse!
Merci!
0
arth Messages postés 10414 Statut Contributeur 1 293
 
SI c'est l'API qui envoie le résultat, alors c'est dans l'API qu'il faut modifier l'envoie des messages d'initisalisation.
0
rela33
 
Pourquoi pas, mais je ne pense pas avoir le droit de toucher à ça. Quelqu'un est venu m'aider aujourd'hui mais il n'a rien trouvé...il doit revenir me voir normalement dans l'après midi pendant ce temps ben je fais mon mémoire!!

En tout cas merci à tous!
Bonne continuation!
0