IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants Java Discussion :

Ecrire du texte en couleurs dans un composant


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Inscrit en
    Mai 2004
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 8
    Par défaut Ecrire du texte en couleurs dans un composant
    Bonjour à tous,

    Je cherche à ajouter des lignes à un composant Java, sachant que ces lignes seront parfois rouges, bleues, vertes, etc... Je sais qu'on ne peut pas utiliser de JTextArea pour résoudre ce problème. Apparemment il faudrait utiliser un JEditorPane, qui peut interpréter le HTML. Pour l'instant j'ai vu qu'il y avait une méthode "setText" qui permet d'ajouter du texte dedans, mais cette méthode modifie tout le contenu. J aimerai pouvoir ajouter du texte ligne par ligne. Si quelqu'un a déjà rencontré ce problème, et qui pourrait me fournir un extrait de code, je serai sauvé!

    Merci d'avance.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 22
    Par défaut
    Si il n'y a pas de méthode addText(String text), tu peux la créer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public void addText(String text) {
    	setText(getText() + text);
    }
    Soit tu le fait en dérivant JEditorPane ou tu fait un truc du genre addTextToEditorPane(String text).

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 29
    Par défaut
    Modifie le style du document :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    DefaultStyledDocument  df=new DefaultStyledDocument() ;
    JTextPane l=new JTextPane(df);
     
    String vert="vert";
    String bleu="bleu";
    String jaune="jaune";
    l.setText(vert+bleu+jaune);
     
    int debut=0;
    int fin=vert.length();
     
    SimpleAttributeSet at=new SimpleAttributeSet();
    at.addAttribute(StyleConstants.CharacterConstants.Foreground,Color.GREEN);
    df.setCharacterAttributes(debut,fin,at,true);	
     
    debut=fin;
    fin+=bleu.length();
     
    at=new SimpleAttributeSet();
    at.addAttribute(StyleConstants.CharacterConstants.Foreground,Color.BLUE);
    df.setCharacterAttributes(debut,fin,at,true);
     
     
    debut=fin;
    fin+=jaune.length();
     
    at=new SimpleAttributeSet();
    at.addAttribute(StyleConstants.CharacterConstants.Foreground,Color.YELLOW);
    df.setCharacterAttributes(debut,fin,at,true);

  4. #4
    Membre Expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Par défaut
    pour faire comprendre l'HTML à un JEditorPane:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
      JEditorPane pane = new JEditorPane();
      pane.setEditorKit(new HTMLEditorKit());
      frame.getContentPane().add(pane);			
      pane.setText("<b>Texte en gras</b>, <br><i>italique</i>, <u>souligné</u>");
    ensuite, tu peux par exemple utiliser la méthode setPage(URL) pour remplir l'EditorPane


  5. #5
    Membre régulier
    Inscrit en
    Mai 2004
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 8
    Par défaut
    Bonjour,

    Merci pour toutes ces réponses, mais je n'ai toujours pas trouvé une solution qui convient à mon problème :-(

    La solution que tu proposes Ymer marche effectivement, mais dans mon cas ce n'est pas acceptable. En fait, pour résumer, je lance un script en boucle qui va faire des affichages dans un composant. Quand il y aura plusieurs milliers de lignes, il y aura des pertes de performances à cause du "getText()". De plus, quand on fait un "setText(getText() + text)", on perd toutes les couleurs du texte initial, seul "text" pourra être en couleur.

    En ce qui concerne ta solution Staul, c'est pas possible non plus, parce que tu fais un "setText()" au début, et après tu ajoutes des couleurs. Comme je l 'ai dit précédemment, mon script affiche des lignes au fur et à mesure, donc ca marche pas non plus :-(

    Enfin, pour la réponse de ThePills, c'est toujours le même problème concernant le "setText()"... De plus, quand on fait un "getText()" sur le JEditorPane ayant un HTMLEditorKit, on obtient une chaîne de caractère contenant des balises HTML, en particulier <HTML><BODY> et </BODY></HTML> , donc pas possible d'ajouter une chaîne de caractères après ces deux dernières balises.

    En tout cas merci beaucoup d'avoir réfléchi à mon problème ;-) Si quelqu'un a d'autres idées, qu'il me fasse signe! Et si je suis pas assez clair dans ce que je demande, n'hésitez pas à me demander d'être plus précis.
    Merci d'avance.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 22
    Par défaut
    Et pourquoi getText() ne récupérerais pas l'HTML? C'est avant tout du text.
    Tu peux aussi essaye d'utiliser des tampons et utiliser simplement setText() avec le contenu du tampon en argument.

  7. #7
    Membre régulier
    Inscrit en
    Mai 2004
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 8
    Par défaut
    Et pourquoi getText() ne récupérerais pas l'HTML? C'est avant tout du text.
    Tu peux aussi essaye d'utiliser des tampons et utiliser simplement setText() avec le contenu du tampon en argument.
    Ben en fait, si tu passes pas en argument un HTMLEditorKit au JEditorPane, ce dernier n'interprete pas les balises. Du coup tu te retrouves avec les balises affichées dans ton JEditorPane (ou alors je me suis trompé qq part ).
    Sinon la solution utilisant les tampons est une bonne idée, ca évitera d'avoir des performances catastrophiques.
    Enfin, j'ai trouvé un moyen en utilisant ton idée pour "setText(getText() + text)", et en utilisant un HTMLEditorKit. En fait c'est pas tout à fait un "getText()" qu'il faut faire, mais il faut en extraire une sous-chaine en otant les balises HTML en début et en fin de document (il faut enlever <HTML><HEAD><BODY> au début, puis les balises fermantes correspondantes). Mais bon, il y a peut-etre une manière plus propre pour faire tout ca.

    Merci pour tes idées Ymer ;-)

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 22
    Par défaut
    Je ne fait pas beaucoup de SWING, JEditerPane n'inperpréte pas directement l'HTML? car je me rappelle que JLabel le fait, par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new JLabel("<b>gras</b>")
    sera bien en gras.

  9. #9
    Membre régulier
    Inscrit en
    Mai 2004
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 8
    Par défaut
    Je ne fait pas beaucoup de SWING, JEditerPane n'inperpréte pas directement l'HTML? car je me rappelle que JLabel le fait, par exemple:
    Code:
    new JLabel("<b>gras</b>")
    sera bien en gras.
    Oui tu as raison Ymer, JLabel fait directement l'interprétation du HTML. Mais pas JEditorPane, et c'est bien dommage :-(
    Pour l'instant je n'ai pas encore implémenté la solution que tu as proposé avec l'utilisation de tampons, mais je vais bientot y venir. Apparemment il n'y a pas de manière "simple" pour obtenir le comportement que je souhaite. Une autre solution serait peut-être d'écrire soi-même un EditorKit, mais ca fait beaucoup quand même.

    En tout cas de nouvelles idées à ce sujet sont toujours les bienvenues. :-)

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 22
    Par défaut
    Citation Envoyé par wutang
    Une autre solution serait peut-être d'écrire soi-même un EditorKit, mais ca fait beaucoup quand même.
    Pas forcément, tu peux hériter d'un déjà existant et lui ajouter ce que tu veux, comme l'utilisation d'un tampon.

  11. #11
    Membre régulier
    Inscrit en
    Mai 2004
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 8
    Par défaut
    Pas forcément, tu peux hériter d'un déjà existant et lui ajouter ce que tu veux, comme l'utilisation d'un tampon.
    Oui tu as raison, j'y suis peut-être allé un peu fort ;-)

  12. #12
    Membre régulier
    Inscrit en
    Mai 2004
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 8
    Par défaut
    Hello,
    Bon ca y est, j'ai trouvé quelque chose d'acceptable pour mon problème. Tout d'abord il faut associer un document à un JTextPane, et ensuite y associer les différents styles que l'on souhaite utiliser. Dans mon cas, il s'agit de couleurs, mais on peut aussi vouloir écrire en gras, en italique, etc...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    	JTextPane jtp = new JTextPane();
       DefaultStyledDocument doc = new DefaultStyledDocument();
    	jtp.setDocument(doc);
    	Style def = StyleContext.getDefaultStyleContext().getStyle(StyleContext.DEFAULT_STYLE);
    	StyleConstants.setFontFamily(def, "SansSerif");
    	Style regular = jtp.addStyle("regular", def);
    	Style s = jtp.addStyle("red", regular);
    	StyleConstants.setForeground(s, Color.RED);
    	s = jtp.addStyle("green", regular);
    	StyleConstants.setForeground(s, Color.GREEN);
    	s = jtp.addStyle("blue", regular);
    	StyleConstants.setForeground(s, Color.BLUE);
    	s = jtp.addStyle("black", regular);
    	StyleConstants.setForeground(s, Color.BLACK);
    Une fois les styles déclarés, on peut utiliser le tout de la manière suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	    try{
    		    doc.insertString(doc.getLength(), "ecrit en rouge\n", jtp.getStyle("red"));
           }catch(BadLocationException ble){
    		    //traitement de l'exception
    	    }
    En espérant que ça dépanne d'autres personnes également ;-)
    ++

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Ajouter du texte en couleur dans un TextView
    Par Lunixinclar dans le forum GTK+ avec C & C++
    Réponses: 2
    Dernier message: 23/12/2006, 19h51
  2. text multi couleur dans un JTextArea
    Par dalio2579 dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 10/06/2006, 16h22
  3. Ecrire du texte en chinois dans une page html
    Par Maxi-môme dans le forum Balisage (X)HTML et validation W3C
    Réponses: 7
    Dernier message: 15/05/2006, 15h44
  4. certains texte en couleur dans une liste deroulante
    Par moicats dans le forum Access
    Réponses: 17
    Dernier message: 07/04/2006, 09h19
  5. text en couleur dans un tableau
    Par molesqualeux dans le forum Balisage (X)HTML et validation W3C
    Réponses: 13
    Dernier message: 02/09/2005, 18h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo