Java by API/javax.swing.text/Highlighter

Материал из Java эксперт
Перейти к: навигация, поиск

Highlighter: addHighlight(int p0, int p1, HighlightPainter p)

   <source lang="java">

import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.text.BadLocationException; import javax.swing.text.DefaultHighlighter; import javax.swing.text.Highlighter; import javax.swing.text.JTextComponent; public class MultiHighlight implements ActionListener {

 private JTextComponent comp;
 private String charsToHighlight;
 public MultiHighlight(JTextComponent c, String chars) {
   comp = c;
   charsToHighlight = chars;
 }
 public void actionPerformed(ActionEvent e) {
   Highlighter h = comp.getHighlighter();
   h.removeAllHighlights();
   String text = comp.getText().toUpperCase();
   for (int j = 0; j < text.length(); j += 1) {
     char ch = text.charAt(j);
     if (charsToHighlight.indexOf(ch) >= 0)
       try {
         h.addHighlight(j, j + 1, DefaultHighlighter.DefaultPainter);
       } catch (BadLocationException ble) {
       }
   }
 }
 public static void main(String args[]) {
   JFrame frame = new JFrame("MultiHighlight");
   frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   JTextArea area = new JTextArea(5, 20);
   area.setText("ww\nw.jexp.c\nom");
   frame.getContentPane().add(new JScrollPane(area), BorderLayout.CENTER);
   JButton b = new JButton("Highlight All Vowels");
   b.addActionListener(new MultiHighlight(area, "aeiouAEIOU"));
   frame.getContentPane().add(b, BorderLayout.SOUTH);
   frame.pack();
   frame.setVisible(true);
 }

}


 </source>
   
  
 
  



Highlighter: getHighlights()

   <source lang="java">
 

import javax.swing.JTextArea; import javax.swing.text.Highlighter; import javax.swing.text.JTextComponent; public class Main {

 public static void main(String[] argv) throws Exception {
   JTextArea textComp = new JTextArea();
   removeHighlights(textComp);
 }
 public static void removeHighlights(JTextComponent textComp) {
   Highlighter hilite = textComp.getHighlighter();
   Highlighter.Highlight[] hilites = hilite.getHighlights();
   for (int i = 0; i < hilites.length; i++) {
     hilite.removeHighlight(hilites[i]);
   }
 }

}


 </source>
   
  
 
  



Highlighter: removeAllHighlights()

   <source lang="java">

import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.text.BadLocationException; import javax.swing.text.DefaultHighlighter; import javax.swing.text.Highlighter; import javax.swing.text.JTextComponent; public class MultiHighlight implements ActionListener {

 private JTextComponent comp;
 private String charsToHighlight;
 public MultiHighlight(JTextComponent c, String chars) {
   comp = c;
   charsToHighlight = chars;
 }
 public void actionPerformed(ActionEvent e) {
   Highlighter h = comp.getHighlighter();
   h.removeAllHighlights();
   String text = comp.getText().toUpperCase();
   for (int j = 0; j < text.length(); j += 1) {
     char ch = text.charAt(j);
     if (charsToHighlight.indexOf(ch) >= 0)
       try {
         h.addHighlight(j, j + 1, DefaultHighlighter.DefaultPainter);
       } catch (BadLocationException ble) {
       }
   }
 }
 public static void main(String args[]) {
   JFrame frame = new JFrame("MultiHighlight");
   frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   JTextArea area = new JTextArea(5, 20);
   area.setText("ww\nw.jexp.c\nom");
   frame.getContentPane().add(new JScrollPane(area), BorderLayout.CENTER);
   JButton b = new JButton("Highlight All Vowels");
   b.addActionListener(new MultiHighlight(area, "aeiouAEIOU"));
   frame.getContentPane().add(b, BorderLayout.SOUTH);
   frame.pack();
   frame.setVisible(true);
 }

}


 </source>
   
  
 
  



implements Highlighter.HighlightPainter

   <source lang="java">

import java.awt.BorderLayout; import java.awt.Graphics; import java.awt.Rectangle; import java.awt.Shape; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.text.BadLocationException; import javax.swing.text.Caret; import javax.swing.text.DefaultCaret; import javax.swing.text.Highlighter; import javax.swing.text.JTextComponent; public class LineHighlightPainter implements Highlighter.HighlightPainter {

 private void paintLine(Graphics g, Rectangle r, int x2) {
   int ytop = r.y + r.height - 3;
   g.fillRect(r.x, ytop, x2 - r.x, 3);
 }
 public void paint(Graphics g, int p0, int p1, Shape bounds, JTextComponent c) {
   Rectangle r0 = null, r1 = null, rbounds = bounds.getBounds();
   int xmax = rbounds.x + rbounds.width; 
   try { 
     r0 = c.modelToView(p0);
     r1 = c.modelToView(p1);
   } catch (BadLocationException ex) {
     return;
   }
   if ((r0 == null) || (r1 == null))
     return;
   g.setColor(c.getSelectionColor());
   // special case if p0 and p1 are on the same line
   if (r0.y == r1.y) {
     paintLine(g, r0, r1.x);
     return;
   }
   // first line, from p1 to end-of-line
   paintLine(g, r0, xmax);
   // all the full lines in between, if any (assumes that all lines have
   // the same height--not a good assumption with JEditorPane/JTextPane)
   r0.y += r0.height; // move r0 to next line
   r0.x = rbounds.x; // move r0 to left edge
   while (r0.y < r1.y) {
     paintLine(g, r0, xmax);
     r0.y += r0.height; // move r0 to next line
   }
   // last line, from beginning-of-line to p1
   paintLine(g, r0, r1.x);
 }
 public static void main(String args[]) {
   // extend DefaultCaret as an anonymous inner class
   Caret lineHighlightPainterCaret = new DefaultCaret() {
     private Highlighter.HighlightPainter lhp = new LineHighlightPainter();
     // override getSelectionPainter to return the LineHighlightPainter
     protected Highlighter.HighlightPainter getSelectionPainter() {
       return lhp;
     }
   };
   JFrame frame = new JFrame("LineHighlightPainter demo");
   frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   JTextArea area = new JTextArea(9, 45);
   area.setCaret(lineHighlightPainterCaret);
   area.setLineWrap(true);
   area.setWrapStyleWord(true);
   area.setText("This is the story\nof the hare who\nlost his spectacles.");
   frame.getContentPane().add(new JScrollPane(area), BorderLayout.CENTER);
   frame.pack();
   frame.setVisible(true);
 }

}


 </source>