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 .
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 .
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.
je veut faire un highlight de toute la ligne , pas une selection du texte
À 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é.
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(); } }
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é.
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.
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); } }
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager