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. #1
    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 colorer des mots specifiques dans un jTestErea, JpaneEditor..
    salut tout le monde ,
    voila j'aimerai bien si quelqu'un peu m'aider ,...Voilà mon pb : j'ai fait une petite application qui fait une recherche de documents texte en soumetrant des mots clés, lors d'affichage d'un document par exemple dans un jtexterea
    je ne sais pas comment colore les mots de la requete dans le document ( colorier tous les mots de la requete dans le dcument)...Si quelqu'un a une idée je serai reconaissant de la connaitre.........merci

  2. #2
    Membre habitué Avatar de manube
    Homme Profil pro
    Responsable sécurité
    Inscrit en
    Mai 2004
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Responsable sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 180
    Points : 178
    Points
    178
    Par défaut
    Salut,
    Alors il me semble que tu peux faire afficher une page HTML dans du java (grace à JTextPane si je ne dis pas de betise). Pourquoi ne pas ajouter des balises autour des mots que tu veux mettre en evidence, ca ne devrait pas être trop difficile en manipulant des expressions régulières???
    Bon apres je ne l'ai jamais fait dc ca reste une idée comme ca...
    ++
    Manu

  3. #3
    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 je ne trouve pas la solution
    merci manu pour ton idée. mais je ne sais pas comment faire car mes documents sont de type texte et je voudrai trouver une astuce qui me permetra de deffirencier les mots trouvés dans le document avec une autres couleur pas forcement sur jpaneditor, ou jTextErea ..peu imorte le composant..L'essentiel qu'il m'affiche le contenu du document ou les mots de la requete apparaissent avec une autre couleur.....

  4. #4
    Membre habitué Avatar de manube
    Homme Profil pro
    Responsable sécurité
    Inscrit en
    Mai 2004
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Responsable sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 180
    Points : 178
    Points
    178
    Par défaut
    Alors alors,
    Si tu trouves comment afficher une page HTML dans ton appli, apres c'est plutot facile : tu construiras juste ta page html. Pour cela, il te suffira de rajouter un "header" à ton texte avec du css par ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <HTML>
    <style type="text/css">
    hightlight {Color: Blue; Font-Size: 12pt }
    </style>
    <BODY>
    Puis tu ajoutes autour de tes mots clefs cette balise, par ex (syntaxe à vérifier) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    monTexte.replaceAll(monMot,"<span class=\"hightlight \""+monMot+"</span>");
    puis à la fin de ton fichier un "footer"
    J'espère avoir répondu à ta question et ne pas etre totalement à coté de la plaque.
    Bon courage et a +
    Manu

  5. #5
    Membre habitué Avatar de manube
    Homme Profil pro
    Responsable sécurité
    Inscrit en
    Mai 2004
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Responsable sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 180
    Points : 178
    Points
    178
    Par défaut
    Alors alors,
    Si tu trouves comment afficher une page HTML dans ton appli, apres c'est plutot facile : il te resteras juste à construire ta page html.
    Pour cela tu récupères le contenu de ton fichier texte comme une String à laquelle il te suffira de rajouter un "header" (en incluant du css), par ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    monTexte = "<HTML>"
    +"<style type=\"text/css\">"
    +"hightlight {Color: Blue; Font-Size: 12pt }"
    +"</style>"
    +"<BODY>"
    +monTexte;
    Puis tu ajoutes autour de tes mots clefs cette balise, par ex (syntaxe à vérifier) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    monTexte.replaceAll(monMot,"<span class=\"hightlight\""+monMot+"</span>");
    puis à la fin de ton fichier un "footer"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    monTexte = "</BODY>"
    +"</HTML>";
    A noter que tu devras surement faire attention avec certains mots clefs qui risqueront de poser pb (si tu veux faire ressortir le <span> par ex) et avec les caractères speciaux (remplacer < par son code html "&lt;"...)

    J'espère avoir répondu à ta question et ne pas etre totalement à coté de la plaque.
    Bon courage et a +
    Manu

    NOTE: Désolé j'ai confondu "Editer" et "Citer"

  6. #6
    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,

    As-tu regardé JTextPane et Document ?
    Cela permet d'afficher un texte "stylé" (gras, italique, couleur, etc...)

    Tutorial :
    http://java.sun.com/docs/books/tutor...ents/text.html

    Nicolas

  7. #7
    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 ça marche pas!!!!
    merci manu pour ton code mais je l'essaye et ça na rien donné. premirement j'ai recuper mon doc dans un string mais lepb pour un String il y a pas la methode replaceall ....alors j'essayer de lemettre dans un jLabel et laaussi c'est la meme chose il ya que replace ( char , char) pas de string.....alors si tu peu me faire un demo correct je serai ravi..( un code qui marcherai).....
    cordielement boudji

  8. #8
    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 un exemple compilable et exécutable mettant en oeuvre un JTextPane avec Document.

    L'écran se compose en gros de 3 zones de texte :
    - la zone supérieure contient le texte initial (ici un poème de Paul Eluard)
    - la zone médiane contient les mots clés à chercher (zone également déjà remplie)
    - après avoir appuyé sur le bouton, la zone inférieure affiche le texte initial, où les mots clés ont été mis en gras.

    Attention : j'ai fait cela très vite. Le code peut probablement être optimisé. De plus, tous les cas particuliers ne sont pas traités. J'ai juste vérifié que cela marchait avec le poème.

    Nicolas

    PS - tutorial SUN pour les composants texte :
    http://java.sun.com/docs/books/tutor...ents/text.html

    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
    // Nicolas_75, 27 août 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 text7; // texte avec mots clés surlignés
     
        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 le texte avec mots clés identifiés :
            JLabel label6 = new JLabel("Texte après identification des mots-clés :");
            text7 = new JTextPane();
            text7.setEditable(true);
            JScrollPane scroll7 = new JScrollPane(text7);
            scroll7.setPreferredSize(new Dimension(300,200));
            JPanel panel67 = new JPanel();
            panel67.setLayout(new BorderLayout());
            panel67.add(label6, BorderLayout.NORTH);
            panel67.add(scroll7, BorderLayout.SOUTH);
            this.getContentPane().add(panel67, 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("("+keyWordsList[0]);
                int i=1;
                while (i<keyWordsList.length) {
                    regexBuffer.append("|"+keyWordsList[i]);
                    i++;
                }
                regexBuffer.append(")");
            }
            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);
     
            // création du style par défaut et du style gras :
            StyledDocument doc = text7.getStyledDocument();
            Style def = StyleContext.getDefaultStyleContext().getStyle(StyleContext.DEFAULT_STYLE);
            Style regular = doc.addStyle("regular", def);
            Style s = doc.addStyle("bold", regular);
            StyleConstants.setBold(s, true);
     
            // 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é
            try {
                doc.insertString(doc.getLength(), wordsBetweenKeyWords[0], doc.getStyle("regular"));
                for (int i=0; i<keyWordsOccurrencesList.length; i++) {
                    doc.insertString(doc.getLength(), keyWordsOccurrencesList[i], doc.getStyle("bold"));
                    doc.insertString(doc.getLength(), wordsBetweenKeyWords[i+1], doc.getStyle("regular"));
                }
            } catch (BadLocationException ble) {
                System.out.println("Couldn't insert  text into text pane.");
                ble.printStackTrace();
            }
        }
     
        public static void main(String[] args) {
            new Exemple064_StyledDocument();
        }
    }

  9. #9
    Membre habitué Avatar de manube
    Homme Profil pro
    Responsable sécurité
    Inscrit en
    Mai 2004
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Responsable sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 180
    Points : 178
    Points
    178
    Par défaut

    Dc on laisse tomber ma méthode et on adapte celle ci qui est mieux sous tous les points.
    En tout cas félicitation Nicolas pour ce morceau de code.

  10. #10
    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
    Merci, mais ces félicitations ne sont pas méritées.
    Le hasard fait que j'étais face au même besoin, donc je me suis livré à l'exercice d'écriture du code en entier.
    Je ne prétends pas qu'il est meilleur que d'autres solutions. L'un des avantages est d'avoir un texte final (avec mots clés en gras) éditable.
    J'insiste sur le fait que le code nécessite encore un peu de travail pour être rendu robuste.

    Nicolas

  11. #11
    Membre habitué Avatar de manube
    Homme Profil pro
    Responsable sécurité
    Inscrit en
    Mai 2004
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Responsable sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 180
    Points : 178
    Points
    178
    Par défaut
    Alors je m'explique,
    Je disais que ta solution est meilleure car ca évite de manipuler toute la chaine de caractère pour la transformer en html, ce qui peut poser des pbs avec les caractères spéciaux...En plus, tu manipules uniquement des objets de swing ce que je trouve plus agréable et plus propre.
    ++

  12. #12
    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 oui filicitation nicolas mais....
    tout d'abord merci nicolas pour ce morceaux de code mais commeil ya tjs un mais ça ne foctionne pas chez moi ni sur Jbuilder 7.1 entreprise ni sur le JdK 1.3 a cause de ces ereures que j'arrive pas a corrigé ...

    String[] wordsBetweenKeyWords = text2.getText().split(regex): Split methode non reconnu par jbuilder7.1 et jdk 1.3.1ArrayList<String> keyWordsOccurrencesListBuffer = new ArrayList<String>(); : erreur <String> syntaxe non reconnu par jbuilder 7 ni jdk1.3.1
    Matcher m = Pattern.compile(regex).matcher(text2.getText()): Class non reconnu (Matcher,Pattern)keyWordsOccurrencesList = keyWordsOccurrencesListBuffer.toArray(keyWordsOccurrencesList);:keyWordsOccurrencesList incompatible type
    j'ai essaye de les corrigé mais ça n'a rien donné ...
    alors si tu peux medonné sur quel envirenement tu l'a executé ou le version du jdk peut eter ça résoudra mon pb.....@+

  13. #13
    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,

    J'ai programmé sous NetBeans 5.0, mais cela n'intervient pas.
    Ce qui joue, en revanche, c'est ma version du JDK : 1.5.0_02, un peu loin de ton 1.3.1

    En effet, String.split() n'est disponible que depuis 1.4.
    De même pour les classes Pattern et Matcher.
    Quant aux génériques (les <...>), c'est même plutôt du 1.5

    Nicolas

  14. #14
    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 pouvez vous m'aider les gars
    salut les pots, voila en passant du jdk 1.3 à 1.5 j'ai rencontré quelques bug ds me pgs alors vous pouvez m'aider les gars pour dechiffré la signification de ces erreurs!!!!!.?....la principale erreure c'est quant je fait un appel à une frame dont elle a des methodes voila un exple d'erreur...
    : Exception in thread "AWT-EventQueue-0" java.lang.VerifyError: (class: projet01/IUer, method: Indexation signature: (Ljava/lang/String;)V) Incompatible object argument for function call..........................franchement je ne sais pas ce qui veut dire "signature: (Ljava/lang/String;)V) Incompatible object argument for function "


    alors si quelqu'un connait quelque chose il sera le bienvenu....1 détail dans l'exemple je fait de appel le 1 ere marche bien et le 2 (jbutton 2 ne marche pas il genere une erreur comme celle en haut....
    merci d'avance
    Fichiers attachés Fichiers attachés

  15. #15
    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,

    [Est-ce positif ou négatif d'être traité de "pot" (de fleurs ?)]

    J'ai chargé "essai" dans mon IDE préféré. Mais je n'arrive pas à le compiler car il importe des API que je n'ai pas, comme "com.borland.jbcl.layout". Pour ma part, je ne peux donc pas aller plus loin.

    Il serait peut-être plus simple que tu nous donnes une classe unique, de taille minimale, et présentant le problème que tu évoques. La résolution en serait facilitée.

    Nicolas

  16. #16
    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 salut !!!
    tout d'abord je tiens à m'execuser si j'ai vous y manqués du respect...ce n'est pas de mon atenttion de manqué de respect à qui ce soit surtout pas au gens qui se donnent la peine pour nous aider....et concernant le mot "pot"qui doit etre "pote"... si ça été moi je le prendrai dans le bon sens (+)...je vous demander une deuxième fois de m'excuser...
    revenant au pb que je vous y exposés ...comme je vous ai dis durant mon passage du jdk1.3 à 1.5 cetain de mes pg me signale des erreure de compilation et meme celui qui tu nous a donné Nicolas ..avec l'invite de commande ça marche très bien mais sous jbuilder 7 il me signale une erreur au niveau du générique:
    ArrayList<String> keyWordsOccurrencesListBuffer = new ArrayList<String>(); erreure :ArrayList<String>() '(' or '[' expected appaparemment les génériques ça ne marche pas sous jbuilder 7.... en tout cas si quelqu'un peut nous donner une solution sans utilisée les génériques il sera le bienvenu et de ma part je continuerai de chercher la solution pour que ça marche sur jbuilder car c'et là ou je voudrai que ça marché je besion de cette fonction dans les bref delais.....

    merci tout le monde
    et désolé nicolas

  17. #17
    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

    Un pot = un pot de fleurs
    Un pote = un ami en langage familier

    Si tu as installé JDK 1.5, tu devrais pouvoir utiliser les génériques sans problème. Je suspecte un problème de configuration de ton IDE.

    Quoi qu'il en soit, voici la même classe sans générique. Elle compile chez moi en 1.4.

    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
    // Nicolas_75, 27 août 2006
    // http://www.developpez.net/forums/showthread.php?p=1297289
    // appeler le fichier Exemple064bis_StyledDocumentSansGenerique.java
    // en JAVA 1.4 (sans génériques)
     
    import java.awt.*;
    import java.awt.event.*;
    import java.util.ArrayList;
    import java.util.regex.*;
    import javax.swing.*;
    import javax.swing.text.*;
     
    public class Exemple064bis_StyledDocumentSansGenerique extends JFrame {
     
        private JTextArea text2; // texte initial
        private JTextArea text4; // liste des mots clés
        private JTextPane text7; // texte avec mots clés surlignés
     
        public Exemple064bis_StyledDocumentSansGenerique() {
     
            // 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 le texte avec mots clés identifiés :
            JLabel label6 = new JLabel("Texte après identification des mots-clés :");
            text7 = new JTextPane();
            text7.setEditable(true);
            JScrollPane scroll7 = new JScrollPane(text7);
            scroll7.setPreferredSize(new Dimension(300,200));
            JPanel panel67 = new JPanel();
            panel67.setLayout(new BorderLayout());
            panel67.add(label6, BorderLayout.NORTH);
            panel67.add(scroll7, BorderLayout.SOUTH);
            this.getContentPane().add(panel67, 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("("+keyWordsList[0]);
                int i=1;
                while (i<keyWordsList.length) {
                    regexBuffer.append("|"+keyWordsList[i]);
                    i++;
                }
                regexBuffer.append(")");
            }
            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 keyWordsOccurrencesListBuffer = new ArrayList();
            Matcher m = Pattern.compile(regex).matcher(text2.getText());
            while(m.find()) {
                keyWordsOccurrencesListBuffer.add(m.group());
            }
            String[] keyWordsOccurrencesList = new String[keyWordsOccurrencesListBuffer.size()];
            for (int k=0; k<keyWordsOccurrencesList.length; k++) keyWordsOccurrencesList[k]=(String) keyWordsOccurrencesListBuffer.get(k);
     
            // création du style par défaut et du style gras :
            StyledDocument doc = text7.getStyledDocument();
            Style def = StyleContext.getDefaultStyleContext().getStyle(StyleContext.DEFAULT_STYLE);
            Style regular = doc.addStyle("regular", def);
            Style s = doc.addStyle("bold", regular);
            StyleConstants.setBold(s, true);
     
            // 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é
            try {
                doc.insertString(doc.getLength(), wordsBetweenKeyWords[0], doc.getStyle("regular"));
                for (int i=0; i<keyWordsOccurrencesList.length; i++) {
                    doc.insertString(doc.getLength(), keyWordsOccurrencesList[i], doc.getStyle("bold"));
                    doc.insertString(doc.getLength(), wordsBetweenKeyWords[i+1], doc.getStyle("regular"));
                }
            } catch (BadLocationException ble) {
                System.out.println("Couldn't insert text into text pane.");
                ble.printStackTrace();
            }
        }
     
        public static void main(String[] args) {
            new Exemple064bis_StyledDocumentSansGenerique();
        }
    }

  18. #18
    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 pour la sol
    Pour commencer je tiens vraiment à ce que tu m’excuses pour l’erreur d’orthographe qui j’ai commis …elle a complètement changé le sens de mot..et quoi qu’il arrive saches bien Nicolas que si tu ne seras pas un amis (pote), tu ne seras jamais un pot …..la cause c’est que j’ai passé des heure devant mon micro sans trouvé la solution et tu sais quant tu restes des heures devant un micro à la fin tu perds tout concentration.. c’est ce qui m’est arrivé je n’ai pas vérifié mon message…. Bon pour ce qui concerne le pb j’ai trouvé même moi la sol presque le même principe.. on enlève les génériques et les récupère comme des objets et puis lors du traitement on les couverte a des string avant de les rajouter au tab keyWordsOccurrencesList voila le bloc qui j’ai changé :
    Original :

    // 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);

    Modifier :

    // récupération de la liste des occurrences des mots clés :
    ArrayList keyWordsOccurrencesListBuffer = new ArrayList(); Matcher m = Pattern.compile(regex).matcher(text2.getText());
    while(m.find()) {
    keyWordsOccurrencesListBuffer.add(m.group());
    }

    String[] keyWordsOccurrencesList = new String[keyWordsOccurrencesListBuffer.size()];
    for(int i=0;i<keyWordsOccurrencesListBuffer.size();i++){
    keyWordsOccurrencesList[i]= keyWordsOccurrencesListBuffer.get(i).toString();
    }

    bon pour ce pb c’est réglé maintenant Nicolas si tu veux qu’on l’amélioré j’ai deux critiques la première c’est que les mot qu’il mais en gras ne sont pas automatiquement les vrais mots (exemple pour le mot « les » il met en gras « les » du mot feuilles alors qu’il fallait pas le mettre…la deuxième c’est que il respects la casse ce qui n’est pas génial !!!! exple si il trouve « Les » il ne le met pas en gras ..etc pour la deuxième j’ai preque trouvé la sol en mettant tout le texte et les mot clefs en minuscule mais ce n’est pas astucieux car comme ça on modifie la structure du texte initiale……. Bon si quelqu’un a une solution ou une idée il sera le bienvenu de l’exposé……..
    @ bienôt

  19. #19
    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,

    Les adaptations que tu proposes pour ton code sont en effet quasiment celles que j'ai postées ci-dessus.

    Je suis d'accord avec ton identification des pistes d'amélioration.
    a) ne pas retenir les "les", etc... au milieu des mots => ne retenir par exemple que les "les" précédés et suivis d'un caractère qui n'est pas une lettre
    b) ne pas tenir compte de la casse

    Dans les deux cas, la solution se trouve dans l'expression régulière. Il est très facile de la modifier pour prendre en compte a) et b). Il n'y a que quelques caractères à changer.

    A toi de jouer !

    Mais peut-être conviendrait-il plutôt de se concentrer sur les mots clés que tu cherches à identifier...

    Nicolas

  20. #20
    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 mais
    merci Nicolas pour ton idée, mais pour etre franc avec toi je n'est jamais essayé de programmer avec une grammaire regulière ni de la construire une dans un cas pratique...je les juste étudié a la fac....alors je me suis juste contenter avec des exos theoriques ... voilà ...si tu sais comment les faire, tu peux me les passer stp ou, si tu as une doc qui parle sur ce sujet (pratique sirtout....)...De ma part, je vais continuer à chercher et je te tiendrai au courant dés que j'aurai de nouvelles.... @+

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