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 :

Changer couleur d'un mot dans le texte d'un JTextArea


Sujet :

Composants Java

  1. #1
    Membre du Club Avatar de apicard3
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2013
    Messages : 60
    Points : 50
    Points
    50
    Par défaut Changer couleur d'un mot dans le texte d'un JTextArea
    Bonjour a tous en ce si beau temps,

    Euh, j'essaye de changer la couleur/font d'un seul mot (ou d'un seul caractere) pour le texte d'un JTexteArea mais cela s’avère plus dur que je pensais.
    Je m'explique, dans mon JTextArea je rentre un code d'un langage crée pour l'occas et j'aimerais le colorier dynamiquement.

    Merci de votre aide si vous connaissez une technique

    Alexis

  2. #2
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 312
    Points : 533
    Points
    533
    Par défaut
    Bonjour,

    Ce n'est pas possible avec un JTextArea de changer la couleur d'une partie du texte. Regarde du coté de JTextPane......

  3. #3
    Membre du Club Avatar de apicard3
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2013
    Messages : 60
    Points : 50
    Points
    50
    Par défaut
    Merci, j'ai mis a la place un JTextPane et ca marche, voici le résultat pour ceux qui sont dans le meme cas:

    Maintenant j'aimerais rendre cette mis a jour automatique avec la saisie d'un nouveau caractere pour rendre le coloriage syntaxique dynamique, si vous avez une idée de comment, est-il possible de mettre un écouteur sur la saisie d'un caractere dans ce JTextePane?

    Merci, voici le code:



    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    /**
     * Fonction qui colorie tout les mot d'une phrase suivant un tableau de string
     * @param strsToHighlight
     * @param text
     * @param doc
     * @param color 
     */
    private void colorWords(String[] strsToHighlight,String text,final StyledDocument doc, Color color, boolean bold){
     
        for(String strToHL : strsToHighlight){
                Pattern p = Pattern.compile(strToHL);
                Matcher m = p.matcher(text);
     
                while(m.find() == true){                                                
                        MutableAttributeSet attri = new SimpleAttributeSet();
                        StyleConstants.setForeground(attri, color);
                        StyleConstants.setBold(attri, bold);
     
                        final int start = m.start();
                        final int end = m.end();
                        final int length = end-start;
                        final MutableAttributeSet style = attri;
     
                        SwingUtilities.invokeLater(new Runnable(){
                            public void run(){
                                    doc.setCharacterAttributes(start, length, style, true);
                            }
                        });
                }
        }
    }
     
     
    /**
     * Fonction qui recupere le texte d'un TextePane et lance le coloriage des mot a partir de ses tableau de mot 
     * @param c 
     */
    public void sQLHighlight(JTextPane c) {
        String[] strsToHighlightFunction {"nbCellNeu","nbCellMoo","nbCellSq","nbCellCir","pCellSq","pCellCir","cellDuration"};
        String[] strsToHighlightGreen = {"not","or","xor","and"};
        String[] strsToHighlightBlack = {"->" , ":" , ";"};
        String[] strsToHighlightLayer = stringLayer();
        String[] strsToHighlightState = stringStates();
     
     
        String text = c.getText().replaceAll("\n", " ");
        final StyledDocument doc = c.getStyledDocument();
        final MutableAttributeSet normal= new SimpleAttributeSet();
        StyleConstants.setForeground(normal, Color.black);
        StyleConstants.setBold(normal, false);
     
        SwingUtilities.invokeLater(new Runnable() {
     
        public void run() {
                doc.setCharacterAttributes(0, doc.getLength(), normal, true);
            }
        });
        colorWords(strsToHighlightFunction, text, doc, new Color(88,54,48), false);
        colorWords(strsToHighlightGreen, text, doc, new Color(107,94,255), false);
        colorWords(strsToHighlightBlack, text, doc, Color.BLACK, true);
        colorWords(strsToHighlightLayer, text, doc, Color.blue, false);    
        colorWords(strsToHighlightState, text, doc,new Color(59,176,23) , false); 
    }

  4. #4
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 312
    Points : 533
    Points
    533
    Par défaut
    Bonjour tu peux ajouter un KeyListener sur ton JTextPane comme dans cet exemple :

    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
    31
    32
    33
    34
    35
    36
    37
    38
     
    import javax.swing.*;
    import java.awt.event.*;
    import java.awt.*;
    import javax.swing.text.*;
     
    public class TestJTextPane extends JFrame implements KeyListener {
     
    	JTextPane textPane = new JTextPane();
     
    	public TestJTextPane() {
    		setSize(500,500);
    		textPane.addKeyListener(this);
    		add(textPane,BorderLayout.CENTER);
    		setVisible(true);
     
    	}
     
    	public static void main(String[] args) {
    		TestJTextPane jtp = new TestJTextPane();
    	}
     
    	public void keyPressed(KeyEvent e) {
    		Color color = new Color((int)(Math.random()*256),(int)(Math.random()*256),(int)(Math.random()*256));
    		System.out.println(color);
    		MutableAttributeSet attri = new SimpleAttributeSet();
                    StyleConstants.setForeground(attri, color);
                    StyledDocument doc = textPane.getStyledDocument();
                    doc.setCharacterAttributes(doc.getLength()-1, doc.getLength() +1, attri, false);
     
    	}
    	public void keyReleased(KeyEvent e) {
     
    	}
    	public void keyTyped(KeyEvent e) {
     
    	}
    }

  5. #5
    Membre du Club Avatar de apicard3
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2013
    Messages : 60
    Points : 50
    Points
    50
    Par défaut
    Merci pour ta réponse c'est tout bete, j'aime le java
    Et puisque j'utilise le design NetBeans c'est encore plus simple: (click droit-> event-> key released)

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

Discussions similaires

  1. Changer la couleur d'un mot dans une richtxtbox
    Par Lostincode dans le forum C#
    Réponses: 4
    Dernier message: 12/07/2012, 15h40
  2. changer la couleur d'un mot dans un jtextpane
    Par tamara6 dans le forum Débuter
    Réponses: 2
    Dernier message: 26/03/2010, 20h08
  3. Changer la couleur d'un mot dans un wxTextCtrl ?
    Par Poison_xtreamlua dans le forum wxWidgets
    Réponses: 1
    Dernier message: 30/06/2009, 14h52
  4. [WD10]Changer la couleur d'un mot dans un champ RTF
    Par Louis Griffont dans le forum WinDev
    Réponses: 2
    Dernier message: 15/11/2007, 03h52
  5. comment masquer un mot dans un texte de type JTextArea
    Par harakat21 dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 21/05/2006, 00h18

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