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

AWT/Swing Java Discussion :

Colorier une ligne d'un JTextArea


Sujet :

AWT/Swing Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Poste x dans une société
    Inscrit en
    Mars 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations professionnelles :
    Activité : Poste x dans une société

    Informations forums :
    Inscription : Mars 2007
    Messages : 27
    Points : 38
    Points
    38
    Par défaut Colorier une ligne d'un JTextArea
    j'aimerai savoir si c'est possible de colorier la ligne dans laquelle le curseur se trouve (le cas des editeurs de texte ) , dans un composant java (JTextArea ou JEditorPane ou ...)
    Merci .

  2. #2
    Membre expert
    Avatar de Gueritarish
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2007
    Messages
    1 800
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 800
    Points : 3 919
    Points
    3 919
    Par défaut
    Salut,

    Tu voudrais colorier toute la ligne sur laquelle se trouve le curseur, ou juste ce que tu as sélectionné avec le curseur?

    Dans les 2 cas, il te faut te tourner vers les MouseListener ou MouseMotionListener (ou encore MouseAdapter qui est plus "complet" et regroupe les MouseListener et MouseMotionListener).

    Précise un peu ton problème s'il te plait
    Pas de questions technique par MP, les forums sont là pour ça.

  3. #3
    Nouveau membre du Club
    Profil pro
    Poste x dans une société
    Inscrit en
    Mars 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations professionnelles :
    Activité : Poste x dans une société

    Informations forums :
    Inscription : Mars 2007
    Messages : 27
    Points : 38
    Points
    38
    Par défaut merci
    je veut faire un highlight de toute la ligne , pas une selection du texte

  4. #4
    Membre émérite
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Points : 2 582
    Points
    2 582
    Par défaut
    À ma connaissance, c'est faisable, mais un peu compliqué. Si c'est réellement utile, essaie avec le Highlighter et le modelToView, dont sont pourvus ces deux composants.
    Mieux que Google, utilisez Sur Java spécialisé sur la plate-forme java !
    Pour réaliser vos applications Java dans le cadre de prestations, forfait, conseil, contactez-moi en message privé.

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

    Pas si compliqué.

    Voici un exemple compilable et exécutable qui surligne en jaune la ligne du curseur, et s'adapte aux mouvements de ce dernier.

    Cordialement,

    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
    // appeler le fichier Exemple102_HighlightCaretLine.java
     
    import java.awt.*;
    import javax.swing.*;
    import javax.swing.event.*;
    import javax.swing.text.*;
     
    // Nicolas_75
    // dimanche 23 septembre 2007
    // pour http://www.developpez.net/forums/showthread.php?t=414305
     
    // voir aussi :
    // http://java.sun.com/docs/books/tutorial/uiswing/components/textapi.html#carrots
    // http://java.sun.com/docs/books/tutorial/uiswing/examples/components/TextFieldDemoProject/src/components/TextFieldDemo.java
     
    public class Exemple102_HighlightCaretLine extends JFrame {
     
        private static final String INITIAL_TEXT = "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)";
        private static final int TEXT_COMPONENT_WIDTH = 400;
        private static final int TEXT_COMPONENT_HEIGHT = 250;
        private static final Color HIGHLIGHT_COLOR = Color.YELLOW;
     
        final private JTextArea textarea = new JTextArea(); 
        final private Highlighter highlighter = new DefaultHighlighter();
        final private Highlighter.HighlightPainter painter = new DefaultHighlighter.DefaultHighlightPainter(HIGHLIGHT_COLOR);
     
        // constructeur
        public Exemple102_HighlightCaretLine() {
     
            // mise en place de la zone de texte :
            textarea.append(INITIAL_TEXT);
            textarea.setHighlighter(highlighter);
     
            // ajout d'un listener réagissant aux mouvement du curseur
            // il appelle la méthode de surlignement
            textarea.addCaretListener(new CaretListener() {
                public void caretUpdate(CaretEvent e) {
                    highlightCurrentLine();
                }
            });
     
            // mise en place du contenu de la frame :
            textarea.setEditable(true);
            JScrollPane scroll = new JScrollPane(textarea);
            scroll.setPreferredSize(new Dimension(TEXT_COMPONENT_WIDTH ,TEXT_COMPONENT_HEIGHT));
            this.getContentPane().add(scroll);
     
            // préparation de la frame :
            this.setResizable(false);
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            this.pack();
            this.setLocationRelativeTo(null); // pour center
            this.setVisible(true);
     
            // surlignement initial :
            highlightCurrentLine();
        }
     
        // méthode procédant au surlignement de la ligne en cours
        // elle est appellée à chaque mouvement de curseur
        private void highlightCurrentLine() {
            highlighter.removeAllHighlights();
            try {
                int lineNumber = textarea.getLineOfOffset(textarea.getCaretPosition());
                highlighter.addHighlight(
                        textarea.getLineStartOffset(lineNumber),
                        textarea.getLineEndOffset(lineNumber),
                        painter);
            } catch (BadLocationException ex) {
                ex.printStackTrace();
            }
        }
     
        // "main" de démonstration
        public static void main(String[] args) {
            new Exemple102_HighlightCaretLine();
        } 
    }

  6. #6
    Membre émérite
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Points : 2 582
    Points
    2 582
    Par défaut
    Je n'avais pas remarqué qu'il y avait des getLineStartOffset et getLineEndOffset sur les JTextArea, ce qui effectivement simplifie bien les choses ! (j'ai plus l'habitude des JTextPanes)
    Mieux que Google, utilisez Sur Java spécialisé sur la plate-forme java !
    Pour réaliser vos applications Java dans le cadre de prestations, forfait, conseil, contactez-moi en message privé.

  7. #7
    Nouveau membre du Club
    Profil pro
    Poste x dans une société
    Inscrit en
    Mars 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations professionnelles :
    Activité : Poste x dans une société

    Informations forums :
    Inscription : Mars 2007
    Messages : 27
    Points : 38
    Points
    38
    Par défaut merci beaucoup
    c'est presque ce que je veut , (colorier toute la ligne c-a-d jusqu'a la limite de la ligne , et pas jusqu'a le dernier caractere) en tous ca je vous remercie beaucoup.

  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
    Quelque chose comme ci-dessous ?

    Petit inconvénient : le surlignement se fait au-dessus du texte, avec un niveau de transparence réglable. Les caractères sont donc moins "noirs".

    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
    // appeler le fichier Exemple103_HighlightCaretLine_2.java
     
    import java.awt.*;
    import java.awt.geom.Rectangle2D;
    import javax.swing.*;
    import javax.swing.event.*;
    import javax.swing.text.*;
     
    // Nicolas_75
    // jeudi 27 septembre 2007
    // pour http://www.developpez.net/forums/showthread.php?t=414305
     
    public class Exemple103_HighlightCaretLine_2 extends JTextArea {
     
        private static final String INITIAL_TEXT = "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)";
        private static final int TEXT_COMPONENT_WIDTH = 400;
        private static final int TEXT_COMPONENT_HEIGHT = 250;
        private static final Color HIGHLIGHT_COLOR = Color.YELLOW;
     
        // niveau de transparence :
        // (de plus en plus opaque au fur et à mesure
        // qu'on se rapproche de 1)
        private static final float TRANSPARENCY_LEVEL = 0.6f;
     
        // constructeur
        public Exemple103_HighlightCaretLine_2() {
     
            // ajout d'un listener réagissant aux mouvement du curseur
            // il appelle la méthode de surlignement, c'est-à-dire
            // ici paint() :
            this.addCaretListener(new CaretListener() {
                public void caretUpdate(CaretEvent e) {
                    repaint();
                }
            });
        }
     
        @Override public void paint(Graphics g) {
            super.paint(g);
            try {
                Graphics2D g2 = (Graphics2D) g;
                // r1 est un rectangle contenant le caractère où le curseur
                // est actuellement positionné :
                Rectangle r1 = this.modelToView(this.getCaretPosition());
                // on en déduit la zone à surligner, c'est-à-dire 
                // toute la ligne :
                Rectangle2D.Double highlightZone = new Rectangle2D.Double(
                        0, r1.getY(), this.getWidth(), r1.getHeight());
                // préparation du surlignement :
                g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, TRANSPARENCY_LEVEL));
                g2.setColor(HIGHLIGHT_COLOR);
                // on surligne la ligne :
                g2.fill(highlightZone);
            } catch (BadLocationException ex) {
                ex.printStackTrace();
            }
        }
     
        // "main" de démonstration
        public static void main(String[] args) {
     
            // mise en place de la zone de texte :
            JTextArea textarea = new Exemple103_HighlightCaretLine_2();      
            textarea.append(INITIAL_TEXT);
     
            // mise en place du contenu de la frame :
            textarea.setEditable(true);
            JScrollPane scroll = new JScrollPane(textarea);
            scroll.setPreferredSize(new Dimension(TEXT_COMPONENT_WIDTH ,TEXT_COMPONENT_HEIGHT));
            JFrame frame = new JFrame();
            frame.getContentPane().add(scroll);
     
            // préparation de la frame :
            frame.setResizable(false);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.pack();
            frame.setLocationRelativeTo(null); // pour centrer
            frame.setVisible(true); 
        }
    }

Discussions similaires

  1. Colorier une ligne dans un StringGrid et cacher une colonne
    Par Siguillaume dans le forum Langage
    Réponses: 8
    Dernier message: 02/07/2008, 20h24
  2. Réponses: 1
    Dernier message: 04/12/2007, 16h28
  3. [VBA-E] Colorier une ligne dans une feuille excel
    Par skyst3f dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 24/10/2006, 11h42
  4. [JTable] colorier une ligne de manière simple
    Par _KB_ dans le forum Composants
    Réponses: 10
    Dernier message: 16/06/2006, 13h51
  5. Colorier une ligne d'un RichEdit
    Par didi59650 dans le forum Composants VCL
    Réponses: 7
    Dernier message: 05/05/2006, 11h40

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