Java by API/javax.swing.text/Highlighter — различия между версиями
Admin (обсуждение | вклад) м (1 версия) |
|
(нет различий)
|
Текущая версия на 17:12, 31 мая 2010
Содержание
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>