JtextArea et couleur de texte

JtextArea et couleur de texte - Java - Programmation

Marsh Posté le 04-11-2003 à 13:48:44    

Bonjour a tous,
 
Voila je realise un rcon Q3 en java et lorsque je recois les reponses du server Q3, parfois certain joueurs ont des noms composé de "^1Ex^2ca...". Je sais que ces joili caracteres servent a colorié le nom du joueur mais je voudrais que mon JTextArea puisse changer de couleur en fonction des charactere...
 
 
Ma question ne pose pas que l'algo car elle serait assez bidon..
Mais plutot sur une des methode d'un JTextArea (genre setColorFont()) qui permettré d'ecrire... EXCA
 
Merci :jap:  
 
Ps: Le JTextPane le fait parait il mais je n'arrive pas a lui specifié un nb de lignes et de colonnes comme pour le JTextArea...

Reply

Marsh Posté le 04-11-2003 à 13:48:44   

Reply

Marsh Posté le 04-11-2003 à 14:14:09    

Tu dois pouvoir faire quelque chose avec la méthode getHighlighter de la classe javax.swing.text.JTextComponent en ajoutant des "highlights" (addHighlight) dont le javax.swing.text.Highlighter.HighlightPainter est un javax.swing.text.DefaultHighlighter.DefaultHighlightPainter que tu redéfinis de façon à dessiner les caractères en une certaine couleur.
 
J'ai utilisé cette dernière pour surligner, mais il doit y avoir moyen d'intervenir sur la couleur du texte uniquement.


---------------
"Colère et intolérance sont les ennemis d'une bonne compréhension." Gandhi
Reply

Marsh Posté le 04-11-2003 à 14:23:03    

Tu peux aussi jeter un oeil sur le forum de Sun :
http://forum.java.sun.com/thread.j [...] ead=168251
;)


---------------
"Colère et intolérance sont les ennemis d'une bonne compréhension." Gandhi
Reply

Marsh Posté le 05-11-2003 à 19:31:00    

3xc4l18ur a écrit :

Bonjour a tous,
 
Voila je realise un rcon Q3 en java et lorsque je recois les reponses du server Q3, parfois certain joueurs ont des noms composé de "^1Ex^2ca...". Je sais que ces joili caracteres servent a colorié le nom du joueur mais je voudrais que mon JTextArea puisse changer de couleur en fonction des charactere...
 
 
Ma question ne pose pas que l'algo car elle serait assez bidon..
Mais plutot sur une des methode d'un JTextArea (genre setColorFont()) qui permettré d'ecrire... EXCA
 
Merci :jap:  
 
Ps: Le JTextPane le fait parait il mais je n'arrive pas a lui specifié un nb de lignes et de colonnes comme pour le JTextArea...


 
tu crée une classe qui herite de JTextPane:
dans le constructeur:

Code :
  1. style = new SimpleAttributeSet();
  2.         this.setContentType("text/rtf" );
  3.         this.setEditorKit(new RTFEditorKit());
  4.         doc = this.getDocument();


 
 

Code :
  1. public void append(String msg, Color color, Color bgColor, boolean isBold) {
  2.         StyleConstants.setForeground(style, color);
  3.         StyleConstants.setBackground(style, bgColor);
  4.         StyleConstants.setBold(style, isBold);
  5.         int len = doc.getLength();
  6.         try {
  7.   doc.insertString(len, msg, style);
  8.         } catch (Exception e) {
  9.             System.out.print("Failed to append msg ["+msg+"]" );
  10.         }
  11.     }


Message édité par veryfree le 05-11-2003 à 19:32:30
Reply

Marsh Posté le 07-11-2003 à 08:23:30    

Merci a tous

Reply

Marsh Posté le 07-11-2003 à 10:38:48    

veryfree a écrit :


 
tu crée une classe qui herite de JTextPane:
dans le constructeur:

Code :
  1. style = new SimpleAttributeSet();
  2.         this.setContentType("text/rtf" );
  3.         this.setEditorKit(new RTFEditorKit());
  4.         doc = this.getDocument();


 
 

Code :
  1. public void append(String msg, Color color, Color bgColor, boolean isBold) {
  2.         StyleConstants.setForeground(style, color);
  3.         StyleConstants.setBackground(style, bgColor);
  4.         StyleConstants.setBold(style, isBold);
  5.         int len = doc.getLength();
  6.         try {
  7.   doc.insertString(len, msg, style);
  8.         } catch (Exception e) {
  9.             System.out.print("Failed to append msg ["+msg+"]" );
  10.         }
  11.     }




 
a quoi sert la premiere partie on peu pas tout simplement récupérer le doc associé au jtextpane et utiliser la fonction insertString que tu a fait ?

Reply

Marsh Posté le 07-11-2003 à 12:08:49    

EpoK a écrit :


 
a quoi sert la premiere partie on peu pas tout simplement récupérer le doc associé au jtextpane et utiliser la fonction insertString que tu a fait ?


ben regarde : dans insertStrig il utilise un paramêtre style.
Faut bien qu'il l'ait créé quelque part [:spamafote]


Message édité par benou le 07-11-2003 à 12:09:02

---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 07-11-2003 à 13:39:15    

en effet  [:meganne]

Reply

Marsh Posté le 07-11-2003 à 13:47:36    

car moi en fait j'ai plusieur string que je met dans une seul et j'affiche que la finale mais il me faut une couleur pôur chaque chaine, mais sur la chaine final je peut pas retrouver le début ou la fin d'un petite chaine
 
du cou je pense a faire un Document, à add au fur et a mesur dans le doc et faire un setDocument a la fin
 
c'est fesable vous pensez ?

Reply

Marsh Posté le 07-11-2003 à 13:49:57    

oui

Reply

Marsh Posté le 07-11-2003 à 13:49:57   

Reply

Marsh Posté le 07-11-2003 à 19:10:59    


 
et comment je fait  [:meganne]  
 
je me fait une classe qui extends Document ? ou StyledDocument ou quoi ? je rajoute les meme fonctions ?

Reply

Marsh Posté le 07-11-2003 à 19:23:59    

Citation :

je pense a faire un Document, à add au fur et a mesur dans le doc et faire un setDocument a la fin


 
 
t as tout dit la :jap:
 
le doc tu le recupere via tonTextComponent.getDocument();
 
et tu t'inpire du bout de code que je t'ai filé
 
 
 :hello:

Reply

Marsh Posté le 07-11-2003 à 20:10:22    

veryfree a écrit :

Citation :

je pense a faire un Document, à add au fur et a mesur dans le doc et faire un setDocument a la fin


 
 
t as tout dit la :jap:
 
le doc tu le recupere via tonTextComponent.getDocument();
 
et tu t'inpire du bout de code que je t'ai filé
 
 
 :hello:  


 
hum hum :)
 
ca marche ^^
 
tu peux juste m'indiquer comment marche le StyleConstants pour choisir la font ?  
 
merci  :hello:  :jap:

Reply

Marsh Posté le 07-11-2003 à 22:01:35    

setFontFamily(MutableAttributeSet a, String fam)  
 
 
 
 
la javadoc bourdel

Reply

Marsh Posté le 07-11-2003 à 22:42:06    

veryfree a écrit :

setFontFamily(MutableAttributeSet a, String fam)  
 
 
 
 
la javadoc bourdel  


 
oui oui j'ai trouvé ca mais je sais pas comment l'utiliser
 
mais le reste marche tres bien :) merci  :hello:

Reply

Marsh Posté le 12-12-2007 à 15:15:45    

Salut à tous, désolé de remonter ce vieux vieux topic, mais je suis embeté avec la methode insertString.
 
J'ai un thread qui tourne, et qui de temps en temps (une fois par seconde, variable) appelle la méthode :
 

Code :
  1. public void addLog(String s, Color c, boolean bold){
  2.  try{
  3.   SimpleAttributeSet style = new SimpleAttributeSet();
  4.   StyleConstants.setForeground(style,c);
  5.   StyleConstants.setBackground(style,taDetails.getBackground());
  6.   StyleConstants.setBold(style,bold);
  7.   taDetails.getDocument().insertString(taDetails.getDocument().getLength(),s,style);
  8.   // Scroll lock
  9.   if(chkbxScrollLock.isSelected()){
  10.    try{
  11.     taDetails.scrollRectToVisible(taDetails.modelToView(taDetails.getDocument().getLength()));
  12.    }catch(Exception e){}
  13.   }
  14.  }catch(Exception e){
  15.   System.out.println("Err insert : " + e);
  16.   e.printStackTrace();
  17.  }
  18. }


taDetails étant mon JTextPane  :jap:  
 
De temps en temps ca marche, mais la plupart du temps pas du tout l'eventDispatcher me pete des mega exceptions du genre :
 

Code :
  1. Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
  2. at javax.swing.plaf.basic.BasicTextUI$RootView.paint(Unknown Source)
  3. at javax.swing.plaf.basic.BasicTextUI.paintSafely(Unknown Source)
  4. at javax.swing.plaf.basic.BasicTextUI.paint(Unknown Source)
  5. at javax.swing.plaf.basic.BasicTextUI.update(Unknown Source)
  6. at javax.swing.JComponent.paintComponent(Unknown Source)
  7. at javax.swing.JComponent.paint(Unknown Source)
  8. at javax.swing.JComponent.paintWithOffscreenBuffer(Unknown Source)
  9. at javax.swing.JComponent.paintDoubleBuffered(Unknown Source)
  10. at javax.swing.JComponent._paintImmediately(Unknown Source)
  11. at javax.swing.JComponent.paintImmediately(Unknown Source)
  12. at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
  13. at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(Unknown Source)
  14. at java.awt.event.InvocationEvent.dispatch(Unknown Source)
  15. at java.awt.EventQueue.dispatchEvent(Unknown Source)
  16. at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
  17. at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
  18. at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
  19. at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
  20. at java.awt.EventDispatchThread.run(Unknown Source)


 
Et le try de la fonction addLog attrape une NullPointerException qui sort de nulle part :/
 
Si quelqu'un peut m'aider je lui en serait tres reconnaissant :)
 
PS: Ca marchait tres bien avant avec une JTextArea et la méthode append() de cette derniere.


Message édité par DaV-X le 12-12-2007 à 15:21:28
Reply

Marsh Posté le 12-12-2007 à 15:22:16    

Ca le fait plus quand je met en commentaire la partie pour le "scroll lock", pour que le scroll se fasse en meme temps qu'il y a des ajouts.

Reply

Marsh Posté le 12-12-2007 à 15:37:04    

Bon ben résolu en changeant de méthode pour le scroll lock.
J'ai remplacé par le code ci-dessous et ca fonctionne aussi bien [:spamafote]
 

Code :
  1. taDetails.setCaretPosition(taDetails.getDocument().getLength());

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed