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

JBuilder Java Discussion :

colorer des mots specifiques dans un jTestErea, JpaneEditor..


Sujet :

JBuilder Java

  1. #21
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    429
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 429
    Points : 475
    Points
    475
    Par défaut
    Bonjour,

    Ci-dessous une nouvelle version :
    • insensible à la casse : (?i) au début de l'expression régulière
    • ne valide une occurrence de mot clé que si le mot clé est bien un mot, et pas s'il apparaît au sein d'un mot : //b...//b au sein de l'expression régulière
    • les mots clés trouvés ne sont plus en gras, mais apparaissent maintenant surlignés en jaune
    • deux boutons supplémentaires permettent de surligner manuellement d'autres mots, ou bien d'annuler un surlignement (ce n'est pas très utile, mais était destiné à m'exercer)


    Attention : c'est à nouveau du Java 1.5 avec génériques. A toi de faire les adaptations nécessaires si tu es dans une version antérieure de la JDK.

    Ce n'est pas parfait, mais peut te donner des idées.

    Nicolas

    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
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    // Nicolas_75, 27 août 2006 - 4 septembre 2006
    // http://www.developpez.net/forums/showthread.php?p=1297289
    // appeler le fichier Exemple064_StyledDocument.java
     
    import java.awt.*;
    import java.awt.event.*;
    import java.util.ArrayList;
    import java.util.regex.*;
    import javax.swing.*;
    import javax.swing.text.*;
     
    public class Exemple064_StyledDocument extends JFrame {
     
        private JTextArea text2; // texte initial
        private JTextArea text4; // liste des mots clés
        private JTextPane text8; // texte avec mots clés surlignés
        private StyledDocument sdoc; // StyledDocument correspondant au JTextPane inférieur (text8)
        private SimpleAttributeSet yellowHighlighted = new SimpleAttributeSet();
        {
            StyleConstants.setBackground(yellowHighlighted, Color.yellow);
        }
        private SimpleAttributeSet whiteHighlighted = new SimpleAttributeSet();
     
        public Exemple064_StyledDocument() {
     
            // caractéristiques générales de la frame :
            this.setResizable(false);
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
            // JTextArea supérieur, contenant le texte initial :
            JLabel label1 = new JLabel("Texte initial :");
            text2 = new JTextArea();
            text2.setEditable(true);
            text2.setRows(10);
            text2.setColumns(40);
            JScrollPane scroll2 = new JScrollPane(text2);
            JPanel panel12 = new JPanel();
            panel12.setLayout(new BorderLayout());
            panel12.add(label1, BorderLayout.NORTH);
            panel12.add(scroll2, BorderLayout.SOUTH);
            this.getContentPane().add(panel12, BorderLayout.NORTH);
     
            // initialisation du texte initial :
            text2.append("La terre est bleue comme une orange...\n\nLa terre est bleue comme une orange\nJamais une erreur les mots ne mentent pas\nIls ne vous donnent plus à chanter\nAu tour des baisers de s'entendre\nLes fous et les amours\nElle sa bouche d'alliance\nTous les secrets tous les sourires\nEt quels vêtements d'indulgence\nÀ la croire toute nue.\n\nLes guêpes fleurissent vert\nL'aube se passe autour du cou\nUn collier de fenêtres\nDes ailes couvrent les feuilles\nTu as toutes les joies solaires\nTout le soleil sur la terre\nSur les chemins de ta beauté.\n\nPaul ELUARD, L'Amour la poésie (1929)");
     
            // JTextArea médian, contenant les mots clés à trouver :
            JLabel label3 = new JLabel("Mots clés à chercher :");
            text4 = new JTextArea();
            text4.setEditable(true);
            text4.setPreferredSize(new Dimension(500,50));
            text4.setRows(1);
            text4.setColumns(40);
            JScrollPane scroll4 = new JScrollPane(text4);
     
            // initialisation des mots clés
            text4.append("les la sa un");
     
            // bouton de lancement de la recherche de mots clés :
            JButton button5 = new JButton("Chercher les mots clés <== CLIQUER !");
            button5.setBackground(Color.CYAN);
            button5.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    lookForKeyWords();
                }
            });
     
            // inclusion du JTextArea médian et du bouton dans la fenêtre :
            JPanel panel345 = new JPanel();
            panel345.setLayout(new BorderLayout());
            panel345.add(label3, BorderLayout.NORTH);
            panel345.add(scroll4, BorderLayout.CENTER);
            panel345.add(button5, BorderLayout.SOUTH);
            this.getContentPane().add(panel345, BorderLayout.CENTER);
     
            // JTextArea inférieur, contenant entre autres le texte avec mots clés identifiés :
            JLabel label6 = new JLabel("Texte après identification des mots-clés :");
            JPanel buttonPanel7 = new JPanel();
            // bouton de surlignement en jaune :
            JButton button7a = new JButton("surligne sélection en jaune");
            button7a.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    if ((!(sdoc==null))&&(!(text8.getSelectedText()==null))) {
                        sdoc.setCharacterAttributes(text8.getSelectionStart(), text8.getSelectedText().length(), yellowHighlighted, false);
                    }
                }
            });
            // bouton d'annulation du surlignement en jaune :
            JButton button7b = new JButton("enlève le surlignement de la sélection");
            button7b.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    if ((!(sdoc==null))&&(!(text8.getSelectedText()==null))) {
                        sdoc.setCharacterAttributes(text8.getSelectionStart(), text8.getSelectedText().length(), whiteHighlighted, true);
                    }
                }
            });
            buttonPanel7.add(button7a);
            buttonPanel7.add(button7b);
            text8 = new JTextPane();
            text8.setEditable(true);
            JScrollPane scroll8 = new JScrollPane(text8);
            scroll8.setPreferredSize(new Dimension(300,200));
            JPanel panel678 = new JPanel();
            panel678.setLayout(new BorderLayout());
            panel678.add(label6, BorderLayout.NORTH);
            panel678.add(buttonPanel7, BorderLayout.CENTER);
            panel678.add(scroll8, BorderLayout.SOUTH);
            this.getContentPane().add(panel678, BorderLayout.SOUTH);
     
            // affichage de la frame :
            this.pack();
            this.setVisible(true);
        }
     
        public void lookForKeyWords() {
     
            // récupération de la liste des mots clés
            String[] keyWordsList = text4.getText().split(" ");
     
            // construction d'une regex correspondant à ces mots clés :
            StringBuffer regexBuffer = new StringBuffer("");
            if (keyWordsList.length>0) {
                regexBuffer.append("(?i)\\b("+keyWordsList[0]);
                // (?i) : ne tient pas compte de la casse
                // \\b : début de mot
                int i=1;
                while (i<keyWordsList.length) {
                    regexBuffer.append("|"+keyWordsList[i]);
                    i++;
                }
                regexBuffer.append(")\\b");
                // \\b : fin de mot
            }
            String regex = regexBuffer.toString();
            // à ce stade, regex == "(les|la|sa|un)"
     
            // récupération du texte situé de part et d'autre des mots clés :
            String[] wordsBetweenKeyWords = text2.getText().split(regex);
     
            // récupération de la liste des occurrences des mots clés :
            ArrayList<String> keyWordsOccurrencesListBuffer = new ArrayList<String>();
            Matcher m = Pattern.compile(regex).matcher(text2.getText());
            while(m.find()) {
                keyWordsOccurrencesListBuffer.add(m.group());
            }
            String[] keyWordsOccurrencesList = new String[keyWordsOccurrencesListBuffer.size()];
            keyWordsOccurrencesList = keyWordsOccurrencesListBuffer.toArray(keyWordsOccurrencesList);
     
            // dans la zone texte du bas, écriture du texte initial en mettant en gras les mots clés :
            // on suppose que le texte initial ne commence pas et ne termine pas avec un mot clé
            sdoc = text8.getStyledDocument();
            try {
                sdoc.remove(0,sdoc.getLength());
                sdoc.insertString(sdoc.getLength(), wordsBetweenKeyWords[0], null); 
                int k;
                for (int i=0; i<keyWordsOccurrencesList.length; i++) {
                    sdoc.insertString(sdoc.getLength(), keyWordsOccurrencesList[i], yellowHighlighted); 
                    sdoc.insertString(sdoc.getLength(), wordsBetweenKeyWords[i+1], null); 
                }
                text8.setCaretPosition(0);
            } catch (BadLocationException ble) {
                System.out.println("Couldn't insert text into text pane. This should not happen!");
                ble.printStackTrace();
            }
        }
     
        public static void main(String[] args) {
            new Exemple064_StyledDocument();
        }
    }

  2. #22
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 21
    Points : 9
    Points
    9
    Par défaut
    merci nicolas pour la solution c'est ce que je cherche.....alors on peut maintenent arreter la discution pour ce pb ...a bientôt et @+

  3. #23
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    429
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 429
    Points : 475
    Points
    475
    Par défaut
    Je t'en prie.

Discussions similaires

  1. [Débutant] colorer un mot specifique dans un text c#
    Par maitoti dans le forum C#
    Réponses: 1
    Dernier message: 12/03/2014, 00h22
  2. Colorer des mots automatiquement dans une richtextbox
    Par ghost emperor dans le forum Windows Forms
    Réponses: 8
    Dernier message: 21/05/2008, 11h28
  3. [JTextArea] colorer des mots dans un
    Par roosse dans le forum Composants
    Réponses: 1
    Dernier message: 13/03/2008, 14h06
  4. [SimpleXML] Récupérer des mots étrangers dans XML
    Par yamayo dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 23/11/2006, 23h25
  5. Comment stocker des mots clés dans une bas Mysql
    Par renofx1 dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 05/01/2006, 00h57

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