Partage
  • Partager sur Facebook
  • Partager sur Twitter

Coloration syntaxique

Sujet résolu
    2 juin 2008 à 15:27:54

    Bonjour à tous.

    Voilà je suis en train de coder un éditeur html en java. J'aimerais que lorsqu'on tape dans le JTextPane, les balises (ex : <html>) soient coloriées. En recherchant sur google, j'ai trouvé quelques sources de coloration syntaxique mais je n'ai pas trop compris.
    En fait, je ne sais pas trop comment m'y prendre (est-ce qu'il faut travailler sur une chaîne de caractères..).

    Voici mon code :

    JHTML.java (classe main) :

    /*--------------------------------------------------------------------------------------------------------------------|
     |                                                         Compo.java                                                 |
     |                                                                                                                    |
     |                                                      créé par wanghao10                                            |
     |                                                                                                                    |
     |--------------------------------------------------------------------------------------------------------------------|
     */
    
    import javax.swing.*;
    import java.awt.Dimension;
    
    public class JHTML extends JFrame implements Compo{
        
        public JHTML(String titre) { // Constructeur qui prend en argument le titre de la fenêtre
            
            // Construction des menus
            
            // Construction de "Fichier"
    
            fichier.add(nouveau); // on ajoute l'item nouveau au menu fichier
            fichier.add(ouvrir); // on ajoute l'item ouvrir au menu fichier
            enreg.setEnabled(false); // enregistrer ne peut pas être cliqué
            fichier.add(enreg); // on ajoute l'item enregistrer au menu fichier
            fichier.add(enregs); // on ajoute l'item enregistrer sous au menu fichier
            fichier.add(apercu); // on ajoute l'item enregistrer sous au menu aperçu
            assoCSS.setEnabled(false); // associer un fichier.css ne peut pas être cliqué
            fichier.add(assoCSS); // on ajoute l'item associer un fichier.css au menu fichier
            fichier.add(quitter); // on ajoute l'item quitter au menu fichier
    
            // Construction de "Edition"
    
            edition.add(copier); // on ajoute l'item copier au menu edition
            edition.add(couper); // on ajoute l'item couper au menu edition
            edition.add(coller); // on ajoute l'item coller au menu edition
            precedent.setEnabled(false); // précédent ne peut pas être cliqué
            suivant.setEnabled(false); // précédent ne peut pas être cliqué
            edition.add(precedent); // on ajoute l'item écran précédent au menu edition
            edition.add(suivant); // on ajoute l'item écran suivant au menu edition
    
           // Construction de "Projets"
    
            projets.add(mesProjets); // on ajoute l'item mes projtes au menu projets
            projets.add(nouveauProjet); // on ajoute l'item nouveau projet au menu projets
            projets.add(gereProjets); // on ajoute l'item gere les projets au menu projets
    
          // Construction de "Langage"
            
            groupeCheckBox.add(html);
            groupeCheckBox.add(css);
            groupeCheckBox.add(php);
            groupeCheckBox.add(javascript);
            langage.add(html); // on ajoute l'item html au menu langages
            langage.add(css); // on ajoute l'item css au menu langages
            langage.add(php); // on ajoute l'item php au menu langages
            langage.add(javascript); // on ajoute l'item javascript au menu langages
    
          // Construction de "?"
    
            aide.add(aPropos); // on ajoute l'item a propos au menu aide
            aide.add(pointInterro); // on ajoute l'item ? au menu aide
    
          // Construction de la barre des menus 
    
            menuBar.add(fichier); // on ajoute à la barre des menus le menu "Fichier"
            menuBar.add(edition); // on ajoute à la barre des menus le menu "Edition"
            menuBar.add(projets); // on ajoute à la barre des menus le menu "Projets"
            menuBar.add(langage); // on ajoute à la barre des menus le menu "Langage"
            menuBar.add(aide); // on ajoute à la barre des menus le menu "?"
            
            // Construction de la barre d'outils
            
            barreOutils.add(outilsNouveau); // on ajoute nouveau
            outilsNouveau.setToolTipText("Nouveau Document"); // on modifie le texte de nouveau
            barreOutils.addSeparator(); // on ajoute un séparateur
            barreOutils.add(outilsOuvrir); // on ajoute ouvrir
            outilsOuvrir.setToolTipText("Ouvrir un fichier"); // on modifie le texte de ouvrir
            barreOutils.addSeparator(); // on ajoute un séparateur
            barreOutils.add(outilsEnreg); // on ajoute enregistrer
            outilsEnreg.setToolTipText("Enregistrer"); // on modifie le texte de enregistrer
            outilsEnreg.setEnabled(false); // enregistrer ne peut pas être cliqué
            barreOutils.addSeparator(); // on ajoute un séparateur
            barreOutils.add(outilsCopier); // on ajoute copier
            outilsCopier.setToolTipText("Copier"); // on modifie le texte de copier
            barreOutils.addSeparator(); // on ajoute un séparateur
            barreOutils.add(outilsCouper); // on ajoute couper
            outilsCouper.setToolTipText("Couper"); // on modifie le texte de couper
            barreOutils.addSeparator(); // on ajoute un séparateur
            barreOutils.add(outilsColler); // on ajoute coller
            outilsColler.setToolTipText("Coller"); // on modifie le texte de coller
            barreOutils.addSeparator(); // on ajoute un séparateur
            barreOutils.add(outilsPrecedent); // on ajoute précédent
            outilsPrecedent.setToolTipText("Ecran precedent"); // on modifie le texte de precedent
            outilsPrecedent.setEnabled(false); // precedent ne peut pas être cliqué
            barreOutils.addSeparator(); // on ajoute un séparateur
            barreOutils.add(outilsSuivant); // on ajoute suivant
            outilsSuivant.setToolTipText("Ecran suivant"); // on modifie le texte de suivant
            outilsSuivant.setEnabled(false); // suivant ne peut pas être cliqué
            barreOutils.addSeparator(); // on ajoute un séparateur
            barreOutils.add(outilsApercu); // on ajoute aperçu
            outilsApercu.setToolTipText("Apercu"); // on modifie le texte de aperçu
            barreOutils.addSeparator(); // on ajoute un séparateur
            barreOutils.add(outilsQuitter); // on ajoute quitter
            outilsQuitter.setToolTipText("Quitter"); // on modifie le texte de quitter
            barreOutils.setFloatable(false); // la barre d'outils ne peut pas être déplacé
            
            
            // Constructions des panels
            
            // Construction de panelSource
            
            texteSource.setEditable(true); // texteSource peut être edité
            scrollSource.setPreferredSize(new Dimension(1262, 675)); // redimension de scrollSource
            panelSource.add(scrollSource); // on ajoute le JTextPane
            
            // Construction de panelAperçu
            
            vuHtml.setEditorKit(kitHTML); // on ajoute un style de texte
            vuHtml.setEditable(false); // vuHtml ne peut pas être édité
            scrollAperçu.setPreferredSize(new Dimension(1262, 675)); // redimension de scrollAperçu 
            panelAperçu.add(scrollAperçu); // on ajoute le JEditorPane
            
            // Constructions des onglets
            
            onglets.addTab("Source", panelSource); // on ajoute un onglet "Source"
            
            // Construction des boîtes de dialogues
            
            vuHTML.setEditorKit(kitHtml); // on ajoute un kit de style html
            vuHTML.setEditable(false); // vuhtml ne peut pas être édité
            vuHTML.setText(labelAide); // on insère du texte
            scrollAide.setPreferredSize(new Dimension(600, 560));
            panelAide.add(scrollAide); // on ajoute le JScrollPane a interro
            interro.setModal(true); // la boite de dialogue interro est modale
            interro.setTitle("Aide"); // on modifie le titre
            
            // Construction de panel
            
            panel.setLayout(dispo); // on ajoute un gestionnaire de disposition
            this.getContentPane().add(barreOutils, java.awt.BorderLayout.NORTH); // on ajoute la barre d'outils
            this.getContentPane().add(onglets, java.awt.BorderLayout.CENTER); // on ajoute les onglets
            
            onglets.setOpaque(true); // le fond des onglets est en noir
            this.setTitle(titre); // on donne un titre, celui passé en argument
            this.setJMenuBar(menuBar); // on ajoute une barre de menus
            barreOutils.revalidate(); // on revalide la barre d'outils
            this.setVisible(true); // on montre le fenêtre
            this.pack(); // on met à jour
            
            // ActionListener
            
            Actions actions = new Actions(this); // Nouveau écouteur pour actionListener
            
            nouveau.addActionListener(actions); // on ajoute nouveau à ActionListener
            ouvrir.addActionListener(actions); // on ajoute ouvrir à ActionListener
            apercu.addActionListener(actions); // on ajoute aperçu à ActionListener
            enreg.addActionListener(actions); // on ajoute enregistrer à ActionListener
            enregs.addActionListener(actions); // on ajoute enregistrer sous à ActionListener
            copier.addActionListener(actions); // on ajoute copier à ActionListener
            couper.addActionListener(actions); // on ajoute couper à ActionListener
            coller.addActionListener(actions); // on ajoute coller à ActionListener
            precedent.addActionListener(actions); // on ajoute precedent à ActionListener
            suivant.addActionListener(actions); // on ajoute suivant à ActionListener
            assoCSS.addActionListener(actions); // on ajoute associer un fichier .css à ActionListener
            quitter.addActionListener(actions); // on ajoute quitter à ActionListener
            outilsNouveau.addActionListener(actions); // on ajoute nouveau à ActionListener
            outilsOuvrir.addActionListener(actions); // on ajoute ouvrir à ActionListener
            outilsApercu.addActionListener(actions); // on ajoute aperçu à ActionListener
            outilsEnreg.addActionListener(actions); // on ajoute enregistrer à ActionListener
            outilsCopier.addActionListener(actions); // on ajoute copier à ActionListener
            outilsCouper.addActionListener(actions); // on ajoute couper à ActionListener
            outilsColler.addActionListener(actions); // on ajoute coller à ActionListener
            outilsPrecedent.addActionListener(actions); // on ajoute precedent à la barre d'outils
            outilsSuivant.addActionListener(actions); // on ajoute suivant à la barre d'outils
            outilsQuitter.addActionListener(actions); // on ajoute quitter à ActionListener
            pointInterro.addActionListener(actions); // on ajoute aidee à ActionListener
            aPropos.addActionListener(actions); // on ajoute apropos à actionListener
            
            // Undo / Redo
            
           texteSource.getDocument().addUndoableEditListener(managerEcran); // on ajoute texteSource au manager
           
           // DocumentListener
           
           document.addDocumentListener(actions); // on ajoute texteSource au DocumentListener
    
        }
        
        public static void main(String[] args) {
            JHTML editeur = new JHTML("JHTML");
        }
        
    }
    


    Compo.java :

    /*--------------------------------------------------------------------------------------------------------------------|
     |                                                         JHTML.java                                                 |
     |                                                                                                                    |
     |                                                      créé par wanghao10                                            |
     |                                                                                                                    |
     |--------------------------------------------------------------------------------------------------------------------|
     */
    
    import javax.swing.*;
    import javax.swing.text.html.HTMLEditorKit;
    import javax.swing.JFileChooser;
    import javax.swing.JDialog;
    import java.awt.*;
    import javax.swing.undo.*;
    import java.io.File;
    import javax.swing.text.*;
    
    public interface Compo {
        
        // barre des menus
    
        JMenuBar menuBar = new JMenuBar(); // barre des menus
    
        // menus
    
        JMenu fichier = new JMenu("Fichier"); // menu "Fichier"
        JMenu edition = new JMenu("Edition"); // menu "Edition"
        JMenu projets = new JMenu("Projets"); // menu "Projets"
        JMenu langage = new JMenu("Langage"); // menu "Langage"
        JMenu aide = new JMenu("?"); // menu "?"
    
        // Items des menus
    
        // Items de "Fichier"
    
        JMenuItem nouveau = new JMenuItem("Nouveau"); // nouveau
        JMenuItem ouvrir = new JMenuItem("Ouvrir..."); // ouvrir
        JMenuItem enreg = new JMenuItem("Enregistrer"); // enregistrer
        JMenuItem enregs = new JMenuItem("Enregistrer sous..."); // enregistrer sous
        JMenuItem apercu = new JMenuItem("Aperçu"); // aperçu
        JMenuItem assoCSS = new JMenuItem("Associer à un fichier .css"); // associer un fichier.css
        JMenuItem quitter = new JMenuItem("Quitter"); // quitter
    
        // Items de "Edition" 
    
        JMenuItem copier = new JMenuItem("Copier"); // copier
        JMenuItem couper = new JMenuItem("Couper"); // couper
        JMenuItem coller = new JMenuItem("Coller"); // coller
        JMenuItem precedent = new JMenuItem("Ecrant précédent"); // écran précédent
        JMenuItem suivant = new JMenuItem("Ecrant suivant"); // écran suivant
    
        // Items de "Projets"
    
        JMenuItem mesProjets = new JMenuItem("Mes projets"); // mes projets
        JMenuItem nouveauProjet = new JMenuItem("Nouveau projet"); // nouveau projet
        JMenuItem gereProjets = new JMenuItem("Gérer les projets"); // gérer les projets
    
        // Items de "Langage"
    
        JCheckBoxMenuItem html = new JCheckBoxMenuItem("(X)HTML"); // langage (X)HTML
        JCheckBoxMenuItem css = new JCheckBoxMenuItem("CSS"); // langage CSS
        JCheckBoxMenuItem php = new JCheckBoxMenuItem("PHP"); // langage PHP
        JCheckBoxMenuItem javascript = new JCheckBoxMenuItem("Javascript"); // langage javascript
        ButtonGroup groupeCheckBox = new ButtonGroup(); // groupe des cases à cochers
    
        // Items de "?"
    
        JMenuItem aPropos = new JMenuItem("A propos"); // a propos de JHTML
        JMenuItem pointInterro = new JMenuItem("Aide"); // aide
        
        // onglets 
        
        JTabbedPane onglets = new JTabbedPane(); // onglets
        
                
        // barre d'outils 
            
        JToolBar barreOutils = new JToolBar("Barre d'outils"); // barre des outils
            
        // bouttons de la barre des outils
        
        JButton outilsNouveau = new JButton(new ImageIcon("images/nouveau.png")); // nouveau
        JButton outilsOuvrir = new JButton(new ImageIcon("images/ouvrir.png")); // ouvrir
        JButton outilsEnreg = new JButton(new ImageIcon("images/enregistrer.png")); // enregistrer
        JButton outilsApercu = new JButton(new ImageIcon("images/aperçu.png")); // aperçu
        JButton outilsCopier = new JButton(new ImageIcon("images/copier.png")); // copier
        JButton outilsCouper = new JButton(new ImageIcon("images/couper.png")); // couper
        JButton outilsColler = new JButton(new ImageIcon("images/coller.png")); // coller
        JButton outilsPrecedent = new JButton(new ImageIcon("images/precedent.png")); // ecran précédent
        JButton outilsSuivant = new JButton(new ImageIcon("images/suivant.png")); // ecran suivant
        JButton outilsQuitter = new JButton(new ImageIcon("images/quitter.png")); // quitter
        
        // panels 
        
        JPanel panelSource = new JPanel(); // panel contenant le texte source
        JPanel panelAperçu = new JPanel(); // panel contenant l'aperçu du texte source
        JPanel panelAide = new JPanel(); // panel de l'aide
        JPanel panel = new JPanel(); // panel principal
        
        // gestionnaires de dispositions
        
        BorderLayout dispo = new BorderLayout(); // quatre bordures
        
        // composants texte
        
        JTextPane texteSource = new JTextPane(); // texte source
        JEditorPane vuHtml = new JEditorPane(); // texte de l'aperçu
        JEditorPane vuHTML = new JEditorPane(); // texte de l'aide
        
        // documents
        
        Document document = texteSource.getDocument(); // le document du JTextPane
        StyledDocument documentStyle = texteSource.getStyledDocument(); // document avec style du JTextPane
        
        // kits
        
        HTMLEditorKit kitHTML = new HTMLEditorKit(); // kit html pour l'aperçu
        HTMLEditorKit kitHtml = new HTMLEditorKit(); // kit html pour l'aide
        
        // scrollpane
        
        JScrollPane scrollSource = new JScrollPane(texteSource); // ScrollPane de texteSource
        JScrollPane scrollAperçu = new JScrollPane(vuHtml); // ScrollPane de vuHtml
        JScrollPane scrollAide = new JScrollPane(vuHTML); // ScrollPane de vuHTML
        
        // entrées/sorties 
        
        JFileChooser choixFichier = new JFileChooser();  // JFileChooser pour ouvrir un fichier
        
        // fenêtres de dialogues
        
        JDialog interro = new JDialog();
        
        // labels
        
        String labelAide = new String("<html><b><u><h1><center>JHTML 1.0</center></h1></u></b><br><br><br>"+
                "<u><h2><u>I. Qu'est-ce que JHTML ?</h2></u><br><br>" +
                "<p>JHTML est un éditeur (X)HTML très simple qui permet de voir l'aperçu"+
                " du code source tapé dans un des deux onglets (Source et Aperçu).</p><br>"+
                "<p>Pour faciliter la lecturedu code source et l'écriture de celui ci,</p><br>" +
                "<p>JHTML colorie les mots clés en bleu selon l'un des langages choisi" +
                " dans le menu Langage (PHP, CSS, HTML, Javascript).</p><br>"+
                "<p>Pour utiliser le CSS, il faut ajouter un fichier.css au source"+
                " car le CSS ne fonctionne pas encore très bien.</p><br><br>"+
                "<h2><b><u>II. Menus</u></b></h2><br><br>"+
                "<p>Voici l'arboressence des menus</p><br>"+
                "<p><u>1. Fichier :</u></p><br>"+
                "<ul><li>Nouveau,</li><li>Ouvrir,</li<li>Enregistrer,</li>" +
                "<li>Enregistrer sous,</li><li>Aperçu,</li><li>Associer un fichier.css,</li>" +
                "<li>Quitter,</li></ul><br>"+
                "<p><u>2. Edition :</u></p><br>"+
                "<ul><li>Copier,</li><li>Couper,</li><li>Coller,</li>"+
                "<li>Ecran précédent,</li><li>Ecran suivant,</li></ul><br>"+
                "<p><u>3. Projets</u></p><br>"+
                "<ul><li>Mes projets,</li><li>Nouveau projet,</li><li>Gérer les projets,</li></ul><br>"+
                "<p><u>4. Langage</u></p>"+
                "<ul><li>(X)HTML,</li><li>PHP,</li><li>CSS,</li><li>Javascript</li></ul><br>"+
                "<p><u>5. ? :</u></p>" +
                "<ul><li>A propos,</li><li>Aide</li></ul><br><br>"+
                "<p><h2><b><u>III. Le codeur de JHTML :</u></b></h2></p>"+
                "<p>C'est un jeune programmeur java portant le pseudo <b>wanghao10</b></p>"); // label de l'aide
        
        String balises[] = {"<html>", "</html>" ,"<title>", "</title>", "<head>", "</head>",
        "<body>", "</body>"}; // les balises
        
        // gestionnaires d'undo/redo
        
        UndoManager managerEcran = new UndoManager(); // manager ecran suivant et précédent
    }
    


    Actions.java :

    /*--------------------------------------------------------------------------------------------------------------------|
     |                                                         Actions.java                                                 |
     |                                                                                                                    |
     |                                                      créé par wanghao10                                            |
     |                                                                                                                    |
     |--------------------------------------------------------------------------------------------------------------------|
     */
    import java.awt.event.*;
    import java.io.File;
    import java.io.*;
    import javax.swing.JOptionPane;
    import javax.swing.event.*;
    
    public class Actions implements Compo, ActionListener, UndoableEditListener, DocumentListener{
        
        JHTML parent; // necessaire pour la transmission de données entre classes
        
       // boléens
        
        boolean enregistrer = false; // boléen pour enregistrer
        
        public Actions(JHTML parent){ // Constructeur
            this.parent = parent; // transmission de données entre classes
        }
        
        public void actionPerformed(ActionEvent action){ // méthode d'évenements des composants
            
            Object event = action.getSource(); // objet de l'évenement
    
            if(event == quitter || event == outilsQuitter){ // Si on clique sur quitter
                
                System.exit(0); // alors on quitte
            }
            
            else if(event == ouvrir || event == outilsOuvrir){ // Si on vlique su ouvrir
                
                int retour = choixFichier.showOpenDialog(parent); // on fait apparaître un JFileChooser
                if(retour == choixFichier.APPROVE_OPTION){ // si un fichier a été choisi
                    try{ // blocs des exceptions
                        
                        File fichierCourant = choixFichier.getSelectedFile(); // fichier choisi
                        String ligne; // ligne
                        StringBuffer chaine = new StringBuffer(); // chaine de caractère
                        BufferedReader lecture = new BufferedReader(new FileReader(fichierCourant)); // lecture de fichier
                        
                        texteSource.setText(""); // on modifie le texte de texteSource
                        
                        while((ligne = lecture.readLine())!= null){ // tant qu'il y a des lignes
                            
                            chaine.append(ligne + (char) '\n'); // retours à la ligne
                            texteSource.setText(chaine.toString()); // on insère le code dans texteSource
                        }
                        
                        if(choixFichier.accept(fichierCourant)){ // si on ouvre le fichier
                            
                            outilsEnreg.setEnabled(false); // enregitrer de la barre d'outils ne peut être cliqué
                            enreg.setEnabled(false); // enregistrer ne peut être cliqué
                            apercu.setEnabled(true); // aperçu peut être cliqué
                            outilsApercu.setEnabled(true); // aperçu peut être cliqué
                            assoCSS.setEnabled(true); // associer un fichier.css peut être cliqué
                            enregistrer = true; // on modifie la valeur du boléen
                }
                    }
                    catch(IOException ioe) {} // erreurs d'entrées/sorties
                }
            }
            
            else if(event == enregs){ // si on clique sur enregistrer
                
                int retour = choixFichier.showSaveDialog(parent); // on ouvre le JFileChooser
                
                try{ // exceptions
                    
                    File fichierCourant = choixFichier.getSelectedFile(); // fichier choisi
                    BufferedWriter ecriture = new BufferedWriter(new FileWriter(fichierCourant)); // ecriture
                    
                    // on écrit dans le fichier
                    
                    ecriture.write(texteSource.getText()); // on écrit dans le fichier
                    ecriture.close(); // fin de l'écriture
                    
                                
                    if(choixFichier.accept(fichierCourant)){ // si on enregistre le fichier
                        
                        outilsEnreg.setEnabled(false); // enregitrer de la barre d'outils ne peut être cliqué
                        enreg.setEnabled(false); // enregistrer ne peut être cliqué
                        outilsApercu.setEnabled(true); // aperçu peut être cliqué
                        apercu.setEnabled(true); // aperçu peut être cliqué
                        assoCSS.setEnabled(true); // associer un fichier .css peut être cliqué
                        enregistrer = true;
                }
                    
                }
                catch(IOException ioe) {} // erreur d'eentrées/sorties
            }
            
            else if(event == enreg || event == outilsEnreg){ // si on clique sur enregistrer
                
                try{
                    
                File fichierCourant = choixFichier.getSelectedFile(); // fichier choisi
                BufferedWriter ecriture = new BufferedWriter(new FileWriter(fichierCourant)); // ecriture
                    
                // on écrit dans le fichier
                    
                ecriture.write(texteSource.getText()); // on écrit dans le fichier
                ecriture.close(); // fin de l'écriture
                
                outilsEnreg.setEnabled(false); // enregistrer de la barre des outils ne peut être cliqué
                enreg.setEnabled(false); // enregistrer ne peut être cliqué
                
                }
                catch(IOException ioe) {}
            }
            
            else if(event == apercu || event == outilsApercu){ // Si on clique sur aperçu
                
                vuHtml.setText(texteSource.getText()); // on insere le texte contenu dans texteSource dans vuHtml
                onglets.add("Aperçu", panelAperçu); // on ajoute nouveau à ActionListener
            }
            
            else if(event == copier || event == outilsCopier){ // si on clique sur copier
                
                texteSource.getSelectedText(); // on renvoie le texte sélectionné
                texteSource.copy(); // puis on le copier dans le presse-papiers
            }
            
            else if(event == couper || event == outilsCouper){ // si on clique sur couper
                
                texteSource.getSelectedText(); // on renvoie le texte sélectionné
                texteSource.cut(); // pour le couper dans le presse-papiers
            }
            
            else if(event == coller || event == outilsColler){ // si on clique sur coller
             
                texteSource.paste(); // on colle le presse-papiers
            }
            
            else if(event == precedent || event == outilsPrecedent){ // si on clique sur retour
                
                managerEcran.undo(); // on fait un retour
                
                outilsSuivant.setEnabled(true); // suivant de la barre d'outils peut être cliqué
                suivant.setEnabled(true); // suivant peut être cliqué
                parent.pack(); // on mets à jour
            }
            
            else if(event == suivant || event == outilsSuivant){ // si on clique un "avancement"
                
                managerEcran.redo(); // on fait un "avancement"
                
                if(managerEcran.canRedo() == false){
                    
                    outilsSuivant.setEnabled(false); // suivant de la barre d'outils ne peut être cliqué
                    suivant.setEnabled(false); // suivant ne peut être cliqué
                    parent.pack(); // on mets à jour
                }
            }
            
            else if(event == aPropos){ // si on clique sur à apropos
                
                JOptionPane.showMessageDialog(parent, "JHTML 1.0\n\n" + "créé par wangaho10", // boite de dialogue
                        "A propos",  JOptionPane.PLAIN_MESSAGE); // de type JOptionPane
                
            }
            
            else if(event == pointInterro){ // Si on clique sur ?
                
                interro.setContentPane(panelAide); // interro a un panel
                interro.pack(); // on mets à jour les panels
                interro.setVisible(true); // interro devient visible
            }
            
        }
        
        public void removeUpdate(DocumentEvent e){ // méthode de manipulation du document
            
            if(enregistrer == true){
                
            outilsEnreg.setEnabled(true); // enregistrer de la barre des outils peut être cliqué
            enreg.setEnabled(true); // enregistrer peut être cliqué
            }
            
            if(managerEcran.canUndo() == false){ // si on ne peut pas faire de retour
                
                outilsPrecedent.setEnabled(false); // precedent de la barre d'outils ne peut pas être cliqué
                precedent.setEnabled(false); // precedent ne peut pas être cliqué
                parent.pack(); // on mets à jour
            }
        }
        
        public void insertUpdate(DocumentEvent e){ // méthode de manipulation de document
            
            if(enregistrer == true){
                
            outilsEnreg.setEnabled(true); // enregistrer de la barre des outils peut être cliqué
            enreg.setEnabled(true); // enregistrer peut être cliqué
            }
            
            if(managerEcran.canUndo() == true){ // si on peut faire un retour 
                
                outilsPrecedent.setEnabled(true); // precdent de la barre d'outils peut être cliqué
                precedent.setEnabled(true); // precdent peut être cliqué
                parent.pack(); // on mets à jour
            }
        }
        
        public void changedUpdate(DocumentEvent e){ // méthode de manipulation de document       
        }
        
        public void undoableEditHappened(UndoableEditEvent e){ // méthode d'undo/redo
            }
        }
    


    Si quelqu'un aurait une idée de comment faire.

    Merci

    wanghao10.
    • Partager sur Facebook
    • Partager sur Twitter
      2 juin 2008 à 22:08:55

      Pour la recherche des mots clés( variable, balise, méthode, fonction,...) j'utiliserai la class java.util.regex.Pattern et java.util.regex.Matcher afin de rechercher les chaines de caractères caractéristique ex: if, while, for, <>, $, (), [] ...

      Exemple d'utilisation :

      String recherche = "";                  // mot ou expression régulière à rechercher
      String texteSource = "fgjsdqfjmskf";      // le texte dans lequel s'effectue la recherche";
      Pattern p = Pattern.compile(recherche);   
      Matcher m = p.matcher(texteSource); 
      while(m.find()) {
           String tmp = m.group().toString();
           System.out.println("matcher tmp: "+tmp);
           if(tmp!=null) {
                 ...   
           }
      }
      


      tu sera surement amené à manipuler les chaines de caractère, utilise des BuffersBuilders ou StingBuffers ( moins performant que les 1er) pour effectuer tes manipulation, un String est immuable !!!
      • Partager sur Facebook
      • Partager sur Twitter
        3 juin 2008 à 21:22:26

        Merci je me penche sur le sujet.

        Voilà j'ai fait une méthode colorier :

        public void rechercherColorier(String texte){ // la méthode pour rechercher les balises        
            
                // documents
            
                Document document = this.getDocument(); // le document du JTextPane
                StyledDocument documentStyle = this.getStyledDocument(); // document avec style du JTextPane
            
                // styles
            
                StyleContext sc = StyleContext.getDefaultStyleContext(); // style context
                Style defaut = sc.getStyle(StyleContext.DEFAULT_STYLE); // style par défaut
            
                Style balise = sc.addStyle("balise", null); // le style des balise
                
                String balises = texte; // le texte à rechercher
                String source = this.getText(); // le texte dans lequel s'effectue la recherche
                Pattern pattern = Pattern.compile(balises); // pattern
                Matcher matcher = pattern.matcher(source);  // matcher
            
                while(matcher.find()){ // tant que matcher trouve
                    
                    try{
                
                    System.out.println("La balise "+matcher.group()+" a été trouvée."+
                            "Le début est :"+matcher.start()+" la fin est "+
                        matcher.end()); // message de confirmation
                    documentStyle.setCharacterAttributes(matcher.start(), matcher.end(), balise, true); // on colorie
                    
                    }
                    catch(IllegalStateException illegal) {}
            }
            
            }
        


        Mais les caractères ne sont pas coloriés lorsque je tape une balise. Pourquoi ?
        • Partager sur Facebook
        • Partager sur Twitter
          9 juin 2008 à 16:44:03

          Ma question est bête ?
          • Partager sur Facebook
          • Partager sur Twitter
            15 juin 2008 à 11:56:05

            Nulle part tu ne specifies de couleur, donc forcément il ne colorie pas. Il te faudrait un :
            balise.addAttribute(StyleConstants.Foreground, new Color(255,0,0));
            

            pour du rouge par exemple, tu dois "parametrer" ton style. A moins qu'il
            manque un bout de code et que tu l'aies fait, ça doit être ta solution, ajoute la ligne de code que je viens de te donner apres la ligne : Style balise = sc.addStyle("balise", null); et tu devrais au moins l'avoir en rouge, apres tu peux également parametrer l'italic, gras, souligné, barré, et plusieurs autres choses, comme la taille de la police, ou encore la police elle meme.
            • Partager sur Facebook
            • Partager sur Twitter
              5 juillet 2008 à 19:45:49

              C'est bizzarre mais les caractères ne se colorient pas.

              Je remets mon code :

              Source.java :

              /*--------------------------------------------------------------------------------------------------------------------|
               |                                                         Source.java                                                 |
               |                                                                                                                    |
               |                                                      créé par wanghao10                                            |
               |                                                                                                                    |
               |--------------------------------------------------------------------------------------------------------------------|
               */
              
              import java.awt.*;
              import javax.swing.*;
              import java.util.regex.Pattern;
              import java.util.regex.Matcher;
              import javax.swing.text.*;
              import javax.swing.text.Style;
              import javax.swing.text.StyleConstants;
              import javax.swing.text.StyleContext;
              
              public class Source extends JTextPane{
                          
                  public Source() { // Constrcuteur
                      super();
                      setEditable(true);
                  }
                  
                  public void rechercherColorier(String texte){ // la méthode pour rechercher les balises        
                  
                      // documents
                  
                      Document document = this.getDocument(); // le document du JTextPane
                      StyledDocument documentStyle = this.getStyledDocument(); // document avec style du JTextPane
                  
                      Style balise = documentStyle.addStyle("balise", null); // le style des balise
                      balise.addAttribute(StyleConstants.Foreground, new Color(255,0,0));
                      
                      String balises = texte; // le texte à rechercher
                      String source = this.getText(); // le texte dans lequel s'effectue la recherche
                      Pattern pattern = Pattern.compile(balises); // pattern
                      Matcher matcher = pattern.matcher(source);  // matcher
                  
                      while(matcher.find()){ // tant que matcher trouve
                          
                          try{
                      
                          System.out.println("La balise "+matcher.group()+" a été trouvée."+
                                  "Le début est :"+matcher.start()+" la fin est "+
                              matcher.end()); // message de confirmation
                          this.getStyledDocument().setCharacterAttributes(matcher.start(), matcher.end(),
                                  balise, true); // on colorie
                          
                          }
                          catch(IllegalStateException illegal) {}
                  }
                  
                  }
              }
              


              Actions.java :

              /*--------------------------------------------------------------------------------------------------------------------|
               |                                                         Actions.java                                                 |
               |                                                                                                                    |
               |                                                      créé par wanghao10                                            |
               |                                                                                                                    |
               |--------------------------------------------------------------------------------------------------------------------|
               */
              import java.awt.event.*;
              import java.io.File;
              import java.io.*;
              import javax.swing.JOptionPane;
              import javax.swing.event.*;
              import javax.swing.text.BadLocationException;
              import javax.swing.text.Style;
              import javax.swing.text.StyleConstants;
              import javax.swing.text.StyledDocument; 
              
              public class Actions implements Compo, ActionListener, DocumentListener, WindowListener{
                  
                  JHTML parent; // necessaire pour la transmission de données entre classes
                  Source parente; // necessaire pour la transmission de données entre classes
                  
                 // boléens
                  
                  boolean enregistrer = false; // boléen pour enregistrer
                  boolean sauvegarder = false; // boléen pour la sauvegarde
                  boolean enabled = false; // boléen pour les bouttons
                  
                  public Actions(JHTML parent){ // Constructeur
                      this.parent = parent; // transmission de données entre classes
                  }
                  
                  public void actionPerformed(ActionEvent action){ // méthode d'évenements des composants
                      
                      Object event = action.getSource(); // objet de l'évenement
              
                      if(event == quitter || event == outilsQuitter){ // Si on clique sur quitter
                                  
                      if(sauvegarder == true){ // si c'est vrai
                          
                          int message = JOptionPane.showConfirmDialog(parent, "Le fichier en cours n'a pas été sauvegardé.\n\n"+
                                  "Souhaitez-vous l'enregistrer ?\n\n", "Enregistrer", 
                                  JOptionPane.OK_CANCEL_OPTION); // on affiche un message
                          
                          if(message == JOptionPane.OK_OPTION){ // si c'est ok
                              
                              int retour = choixFichier.showSaveDialog(parent); // on ouvre le JFileChooser
                          
                          try{ // exceptions
                              
                              File fichierCourant = choixFichier.getSelectedFile(); // fichier choisi
                              BufferedWriter ecriture = new BufferedWriter(new FileWriter(fichierCourant)); // ecriture
                              
                              // on écrit dans le fichier
                              
                              ecriture.write(texteSource.getText()); // on écrit dans le fichier
                              ecriture.close(); // fin de l'écriture
                              
                          }
                          catch(IOException ioe) {} // erreur d'eentrées/sorties
                          }
                      }
                      
                      else if(enabled == true){ // si c'est vrai
                          
                          int message = JOptionPane.showConfirmDialog(parent, "Le fichier en cours n'a pas été sauvegardé.\n\n"+
                                  "Souhaitez-vous l'enregistrer ?\n\n", "Enregistrer", 
                                  JOptionPane.OK_CANCEL_OPTION); // on affiche un message
                          
                          if(message == JOptionPane.OK_OPTION){ // si c'est ok
                              
                              try{
                              
                          File fichierCourant = choixFichier.getSelectedFile(); // fichier choisi
                          BufferedWriter ecriture = new BufferedWriter(new FileWriter(fichierCourant)); // ecriture
                              
                          // on écrit dans le fichier
                              
                          ecriture.write(texteSource.getText()); // on écrit dans le fichier
                          ecriture.close(); // fin de l'écriture
                          
                          outilsEnreg.setEnabled(false); // enregistrer de la barre des outils ne peut être cliqué
                          enreg.setEnabled(false); // enregistrer ne peut être cliqué
                          
                          }
                          catch(IOException ioe) {}
                          }
                      }
                      
                      else if(sauvegarder == false && enregistrer == false && enabled == false){ // si c'est faux
                          
                          System.exit(0); // on quitte
                      }
                      
                      else{
                          
                          System.exit(0); // on quitte
                      }
                      }
                      
                      else if(event == ouvrir || event == outilsOuvrir){ // Si on clique su ouvrir
                          
                          int retour = choixFichier.showOpenDialog(parent); // on fait apparaître un JFileChooser
                          if(retour == choixFichier.APPROVE_OPTION){ // si un fichier a été choisi
                              try{ // blocs des exceptions
                                  
                                  File fichierCourant = choixFichier.getSelectedFile(); // fichier choisi
                                  String ligne; // ligne
                                  StringBuffer chaine = new StringBuffer(); // chaine de caractère
                                  BufferedReader lecture = new BufferedReader(new FileReader(fichierCourant)); // lecture de fichier
                                  
                                  texteSource.setText(""); // on modifie le texte de texteSource
                                  
                                  while((ligne = lecture.readLine())!= null){ // tant qu'il y a des lignes
                                      
                                      chaine.append(ligne + (char) '\n'); // retours à la ligne
                                      texteSource.setText(chaine.toString()); // on insère le code dans texteSource
                                  }
                                  
                                  if(choixFichier.accept(fichierCourant)){ // si on ouvre le fichier
                                      
                                      outilsEnreg.setEnabled(false); // enregitrer de la barre d'outils ne peut être cliqué
                                      enreg.setEnabled(false); // enregistrer ne peut être cliqué
                                      apercu.setEnabled(true); // aperçu peut être cliqué
                                      outilsApercu.setEnabled(true); // aperçu peut être cliqué
                                      assoCSS.setEnabled(true); // associer un fichier.css peut être cliqué
                                      enregistrer = true; // on modifie la valeur du boléen
                                      sauvegarder = false; // on modifie le boléen
                          }
                              }
                              catch(IOException ioe) {} // erreurs d'entrées/sorties
                          }
                      }
                      
                      else if(event == enregs){ // si on clique sur enregistrer
                          
                          int retour = choixFichier.showSaveDialog(parent); // on ouvre le JFileChooser
                          
                          try{ // exceptions
                              
                              File fichierCourant = choixFichier.getSelectedFile(); // fichier choisi
                              BufferedWriter ecriture = new BufferedWriter(new FileWriter(fichierCourant)); // ecriture
                              
                              // on écrit dans le fichier
                              
                              ecriture.write(texteSource.getText()); // on écrit dans le fichier
                              ecriture.close(); // fin de l'écriture
                              
                                          
                              if(choixFichier.accept(fichierCourant)){ // si on enregistre le fichier
                                  
                                  outilsEnreg.setEnabled(false); // enregitrer de la barre d'outils ne peut être cliqué
                                  enreg.setEnabled(false); // enregistrer ne peut être cliqué
                                  outilsApercu.setEnabled(true); // aperçu peut être cliqué
                                  apercu.setEnabled(true); // aperçu peut être cliqué
                                  assoCSS.setEnabled(true); // associer un fichier .css peut être cliqué
                                  enregistrer = false; // on modifie le boléen
                                  sauvegarder = false; // on modfifie le boléen
                                  enabled = true; // on modifie le boléen
                          }
                              
                              else if(enregistrer == true){ // si c'est vrai'
                                  
                                  outilsEnreg.setEnabled(false); // on modifie la valeur de enregistrer
                                  enreg.setEnabled(false); // on modifie la valeur de enregistrer
                              }
                              
                          }
                          catch(IOException ioe) {} // erreur d'eentrées/sorties
                      }
                      
                      else if(event == enreg || event == outilsEnreg){ // si on clique sur enregistrer
                          
                          sauvegarder = false; // on modifie le boléen
                          enregistrer = false; // on modifie le boléen
                          
                          try{
                              
                          File fichierCourant = choixFichier.getSelectedFile(); // fichier choisi
                          BufferedWriter ecriture = new BufferedWriter(new FileWriter(fichierCourant)); // ecriture
                              
                          // on écrit dans le fichier
                              
                          ecriture.write(texteSource.getText()); // on écrit dans le fichier
                          ecriture.close(); // fin de l'écriture
                          
                          outilsEnreg.setEnabled(false); // enregistrer de la barre des outils ne peut être cliqué
                          enreg.setEnabled(false); // enregistrer ne peut être cliqué
                          
                          }
                          catch(IOException ioe) {}
                      }
                      
                      else if(event == apercu || event == outilsApercu){ // Si on clique sur aperçu
                          
                          vuHtml.setText(texteSource.getText()); // on insere le texte contenu dans texteSource dans vuHtml
                          onglets.add("Aperçu", panelAperçu); // on ajoute nouveau à ActionListener
                      }
                      
                      else if(event == copier || event == outilsCopier){ // si on clique sur copier
                          
                          texteSource.getSelectedText(); // on renvoie le texte sélectionné
                          texteSource.copy(); // puis on le copier dans le presse-papiers
                      }
                      
                      else if(event == couper || event == outilsCouper){ // si on clique sur couper
                          
                          texteSource.getSelectedText(); // on renvoie le texte sélectionné
                          texteSource.cut(); // pour le couper dans le presse-papiers
                      }
                      
                      else if(event == coller || event == outilsColler){ // si on clique sur coller
                       
                          texteSource.paste(); // on colle le presse-papiers
                      }
                      
                      else if(event == precedent || event == outilsPrecedent){ // si on clique sur retour
                          
                          managerEcran.undo(); // on fait un retour
                          
                          outilsSuivant.setEnabled(true); // suivant de la barre d'outils peut être cliqué
                          suivant.setEnabled(true); // suivant peut être cliqué
                          parent.pack(); // on mets à jour
                      }
                      
                      else if(event == suivant || event == outilsSuivant){ // si on clique un "avancement"
                          
                          managerEcran.redo(); // on fait un "avancement"
                          
                          if(managerEcran.canRedo() == false){
                              
                              outilsSuivant.setEnabled(false); // suivant de la barre d'outils ne peut être cliqué
                              suivant.setEnabled(false); // suivant ne peut être cliqué
                              parent.pack(); // on mets à jour
                          }
                      }
                      
                      else if(event == aPropos){ // si on clique sur à apropos
                          
                          JOptionPane.showMessageDialog(parent, "JHTML 1.0\n\n" + "créé par wangaho10", // boite de dialogue
                                  "A propos",  JOptionPane.PLAIN_MESSAGE); // de type JOptionPane
                          
                      }
                      
                      else if(event == pointInterro){ // Si on clique sur ?
                          
                          interro.setContentPane(panelAide); // interro a un panel
                          interro.pack(); // on mets à jour les panels
                          interro.setVisible(true); // interro devient visible
                      }
                      
                  }
                  
                  public void removeUpdate(DocumentEvent e){ // méthode de manipulation du document
                      
                      if(enregistrer == false){
                      
                      sauvegarder = true; // on modifie le boléen
                      }
                      
                      else if(enabled == true){
                          
                      outilsEnreg.setEnabled(true); // enregistrer de la barre des outils peut être cliqué
                      enreg.setEnabled(true); // enregistrer peut être cliqué
                      }
                      
                      if(managerEcran.canUndo() == false){ // si on ne peut pas faire de retour
                          
                          outilsPrecedent.setEnabled(false); // precedent de la barre d'outils ne peut pas être cliqué
                          precedent.setEnabled(false); // precedent ne peut pas être cliqué
                          parent.pack(); // on mets à jour
                      }
                  }
                  
                  public void insertUpdate(DocumentEvent e){ // méthode de manipulation de document
                      
                      if(enregistrer == false){ // si c'est faux
                      
                      sauvegarder = true; // on modifie le boléen
                      }
                      
                      if(enregistrer == true){ // si c'est vrai
                          
                          enabled = true; // on modifie le boléen
                      }
                      
                      texteSource.rechercherColorier("<html>"); // on cherches la balise <html> puis on la colore
                      texteSource.rechercherColorier("</html>"); // on cherche la balise </html> puis on la colore
                      
                      if(enabled == true){
                          
                      outilsEnreg.setEnabled(true); // enregistrer de la barre des outils peut être cliqué
                      enreg.setEnabled(true); // enregistrer peut être cliqué
                      sauvegarder = false; // on modifie le boléen
                      }
                      
                      else if(managerEcran.canUndo() == true){ // si on peut faire un retour 
                          
                          outilsPrecedent.setEnabled(true); // precdent de la barre d'outils peut être cliqué
                          precedent.setEnabled(true); // precdent peut être cliqué
                          parent.pack(); // on mets à jour
                      }
                  }
                  
                  public void changedUpdate(DocumentEvent e){ // méthode de manipulation de document       
                  }
                  
                  // méthodes d'evenèmenr de la fenêtre
                  
                  public void windowOpened(WindowEvent window){ // la premiere fois que la fenetre est visible
                  }
                  public void windowIconified(WindowEvent window){ // fenêtre iconifié
                  }
                  public void windowDeiconified(WindowEvent window){ // fenêtre désiconifié
                  }
                  public void windowActivated(WindowEvent window){ // la premiere fois que la fenêtre est active
                  }
                  public void windowDeactivated(WindowEvent window){ // fenêtre désactivé
                  }
                  public void windowClosing(WindowEvent window){ // demande de fermeture
                      
                      if(sauvegarder == true){ // si c'est vrai
                          
                          int message = JOptionPane.showConfirmDialog(parent, "Le fichier en cours n'a pas été sauvegardé.\n\n"+
                                  "Souhaitez-vous l'enregistrer ?\n\n", "Enregistrer", 
                                  JOptionPane.OK_CANCEL_OPTION); // on affiche un message
                          
                          if(message == JOptionPane.OK_OPTION){ // si c'est ok
                              
                              int retour = choixFichier.showSaveDialog(parent); // on ouvre le JFileChooser
                          
                          try{ // exceptions
                              
                              File fichierCourant = choixFichier.getSelectedFile(); // fichier choisi
                              BufferedWriter ecriture = new BufferedWriter(new FileWriter(fichierCourant)); // ecriture
                              
                              // on écrit dans le fichier
                              
                              ecriture.write(texteSource.getText()); // on écrit dans le fichier
                              ecriture.close(); // fin de l'écriture
                              
                          }
                          catch(IOException ioe) {} // erreur d'eentrées/sorties
                          }
                      }
                      
                      else if(enabled == true){ // si c'est vrai
                          
                          int message = JOptionPane.showConfirmDialog(parent, "Le fichier en cours n'a pas été sauvegardé.\n\n"+
                                  "Souhaitez-vous l'enregistrer ?\n\n", "Enregistrer", 
                                  JOptionPane.OK_CANCEL_OPTION); // on affiche un message
                          
                          if(message == JOptionPane.OK_OPTION){ // si c'est ok
                              
                              try{
                              
                          File fichierCourant = choixFichier.getSelectedFile(); // fichier choisi
                          BufferedWriter ecriture = new BufferedWriter(new FileWriter(fichierCourant)); // ecriture
                              
                          // on écrit dans le fichier
                              
                          ecriture.write(texteSource.getText()); // on écrit dans le fichier
                          ecriture.close(); // fin de l'écriture
                          
                          outilsEnreg.setEnabled(false); // enregistrer de la barre des outils ne peut être cliqué
                          enreg.setEnabled(false); // enregistrer ne peut être cliqué
                          
                          }
                          catch(IOException ioe) {}
                          }
                      }
                      
                      else if(sauvegarder == false && enregistrer == false && enabled == false){ // si c'est faux
                          
                          System.exit(0); // on quitte
                      }
                      
                      else{
                          
                          System.exit(0); // on quitte
                      }
                  }
                  public void windowClosed(WindowEvent window){ // la fenêtre vient d'être refermé
                  }
                  }
              
              • Partager sur Facebook
              • Partager sur Twitter
                6 juillet 2008 à 0:19:05

                Est-ce que ton Matcher trouve tes balises ? Si oui, verifie donne un exemple concret de texte entré, avec les sorties console pour voir un peu les différentes valeures, car à prioris ça devrait colorer, sinon tente voir de colorer une partie du texte hors de la boucle while() avec le Style balise, mais à prioris il devrait colorer.
                • Partager sur Facebook
                • Partager sur Twitter
                  6 juillet 2008 à 10:40:51

                  Normalement, le matcher trouve les balises. Lorsqu'une balise est trouvée un message apparaît bien sur la console. Si je rentre "<html>" dans le JTextPane le message apparaît mais la balise "<html>" n'est pas coloriée en rouge.

                  Est-ce à cause du boléen de la méthode setCharracatersAttribute ?
                  Je ne comprends pas du tout pourquoi.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    6 juillet 2008 à 12:19:47

                    J'ai déjà trouvé une erreure, la méthode c'est :

                    void setCharacterAttributes(int offset, int length, AttributeSet s, boolean replace)
                    


                    D'apres la documentation de Sun. Toi tu donnes un indice de début, et un indice de fin, ce qui à mon avis te fais sortir de la longueur de ton document, imaginons la chaine suivante : String text = "<html>";
                    Ton matcher démarre à 0, et finit à 5, hors il te faudrait une longueur de 6, donc tu devrais donner 0 et 6 comme parametres, pas 0 et 5. Dans ce cas ça ne colorierait que 5 caracteres, mais imagine la chaine : String text2 = "test en cours ... <html>"; Là ton matcher.end() retourne un nombre qui sort de la longueur de la chaine, car il va donner 18 pour matcher.start(), et il faudrait également donner une longueur de 6, donc matcher.end() - matcher.start(), car lui en interne fait une boucle avec comme longueur le lenght que tu specifie, si tu sors de la longueur du document, le comportement doit être asssez indéfinit, t'as peut être pas d'Exception levée, mais ça colore pas, je sais pas quels tests tu as fait, mais corrige déjà ça, et check dans la documentation toutes les methodes relatives à la coloration pour t'assurer qu'il n'y a pas d'utilisation maladroite. J'ai pas trop le temps là, donne déjà des nouvelles à la suite de cette correction.
                    • Partager sur Facebook
                    • Partager sur Twitter
                      6 juillet 2008 à 12:33:30

                      Source.java :

                      /*--------------------------------------------------------------------------------------------------------------------|
                       |                                                         Source.java                                                 |
                       |                                                                                                                    |
                       |                                                      créé par wanghao10                                            |
                       |                                                                                                                    |
                       |--------------------------------------------------------------------------------------------------------------------|
                       */
                      
                      import java.awt.*;
                      import javax.swing.*;
                      import java.util.regex.Pattern;
                      import java.util.regex.Matcher;
                      import javax.swing.text.*;
                      import javax.swing.text.Style;
                      import javax.swing.text.StyleConstants;
                      import javax.swing.text.StyleContext;
                      
                      public class Source extends JTextPane{
                                  
                          public Source() { // Constrcuteur
                              super();
                              setEditable(true);
                          }
                          
                          public void rechercherColorier(String texte){ // la méthode pour rechercher les balises        
                          
                              // documents
                          
                              Document document = this.getDocument(); // le document du JTextPane
                              StyledDocument documentStyle = this.getStyledDocument(); // document avec style du JTextPane
                          
                              Style balise = documentStyle.addStyle("balise", null); // le style des balise
                              balise.addAttribute(StyleConstants.Foreground, new Color(255,0,0));
                              
                              String balises = texte; // le texte à rechercher
                              String source = this.getText(); // le texte dans lequel s'effectue la recherche
                              Pattern pattern = Pattern.compile(balises); // pattern
                              Matcher matcher = pattern.matcher(source);  // matcher
                          
                              while(matcher.find()){ // tant que matcher trouve
                                  
                                  try{
                              
                                  System.out.println("La balise "+matcher.group()+" a été trouvée."+
                                          "Le début est :"+matcher.start()+" la fin est "+
                                      matcher.end()); // message de confirmation
                                  this.getStyledDocument().setCharacterAttributes(matcher.start(), matcher.end()-matcher.start(),
                                          balise, false); // on colorie
                                  
                                  }
                                  catch(IllegalStateException illegal) {}
                          }
                          
                          }
                      }
                      


                      Les message qui s'affiche est

                      La balise <html> a été trouvée.Le début est :0 la fin est 6

                      le matcher démarre donc à 0 et finit à 6.

                      Toujours aucune coloration.
                      • Partager sur Facebook
                      • Partager sur Twitter
                        6 juillet 2008 à 14:39:14

                        Je suis pas chez moi là, mais faudra que je compile tes sources pour voir, ça doit être un truc bête. Mais comme dit, parcourt la doc pour verifier l'utilisation des fonctions que tu utilises.
                        • Partager sur Facebook
                        • Partager sur Twitter
                          6 juillet 2008 à 15:59:04

                          ok j'espère trouver la solution qui comme tu dis et c'est ce que je pense est bête.
                          • Partager sur Facebook
                          • Partager sur Twitter
                            6 juillet 2008 à 17:50:58

                            Juste une question peut être con, n'ayant que trés rarement utilisé un JTextPane, as tu essayé un repaint() une fois la coloration effectuée?

                            monJtextPane.repaint();
                            
                            • Partager sur Facebook
                            • Partager sur Twitter
                              6 juillet 2008 à 18:28:05

                              je viens d'essayer, aucun mot n'est colorié.

                              Je ne vois vraiment pas où est le problème.
                              • Partager sur Facebook
                              • Partager sur Twitter
                                7 juillet 2008 à 18:48:00

                                Personne n'aurait une idée du problème : lorsque j'insère dans le JTextPane une balise qui est cherchée et devrait être colorée, aucune coloration ne s'effectue.

                                En espérant que quelqu'un trouve la solution pour en fin maîtriser la coloration syntaxique.
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  20 juin 2009 à 21:58:21

                                  pourquoi ne pas faire un validate(); puis un repaint(); à ta fenêtre carrément ? ca raffiche les composants ^^
                                  • Partager sur Facebook
                                  • Partager sur Twitter

                                  Coloration syntaxique

                                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                  • Editeur
                                  • Markdown