Swing/BorderHighlightPainter のバックアップ(No.1)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/BorderHighlightPainter へ行く。
- 1 (2024-02-12 (月) 19:11:37)
- 2 (2024-11-20 (水) 11:28:23)
- category: swing folder: BorderHighlightPainter title: JTextAreaの検索ハイライトに縁を描画する tags: [JTextArea, Highlighter, Highlighter.HighlightPainter, Border] author: aterai pubdate: 2024-02-12T19:09:38+09:00 description: JTextAreaの検索文字列に適用するハイライトに縁色を設定します。 image: https://drive.google.com/uc?id=1GPgC3RJq-ZBoxlGhY6xMpwQDo7OlXOgQ
概要
JTextAreaの検索文字列に適用するハイライトに縁色を設定します。
Screenshot
Advertisement
サンプルコード
Highlighter.Highlight hh = highlighter.getHighlights()[idx];
highlighter.removeHighlight(hh);
HighlightPainter currentPainter = new DefaultHighlightPainter(Color.ORANGE) {
@Override public Shape paintLayer(
Graphics g, int offs0, int offs1,
Shape bounds, JTextComponent c, View view) {
Shape s = super.paintLayer(g, offs0, offs1, bounds, c, view);
if (s instanceof Rectangle) {
Graphics2D g2 = (Graphics2D) g.create();
g2.setPaint(Color.RED);
Rectangle r = s.getBounds();
// g2.draw(r);
g2.drawRect(r.x, r.y, r.width - 1, r.height - 1);
g2.dispose();
}
return s;
}
};
try {
highlighter.addHighlight(
hh.getStartOffset(), hh.getEndOffset(), currentPainter);
scrollToCenter(textArea, hh.getStartOffset());
} catch (BadLocationException ex) {
// should never happen
RuntimeException wrap = new StringIndexOutOfBoundsException(
ex.offsetRequested());
wrap.initCause(ex);
throw wrap;
}
View in GitHub: Java, Kotlin解説
- 検索にマッチした文字列のハイライト
DefaultHighlighter.DefaultHighlightPainter(Color.ORANGE)
でハイライト背景色をColor.ORANGE
に設定したHighlightPainter
を使用
- 検索にマッチした文字列のうち現在選択されているハイライト
DefaultHighlighter.DefaultHighlightPainter#paintLayer(...)
をオーバーライドして、ハイライト図形の縁を追加描画paintLayer(...)
メソッドの引数のShape bounds
はJTextComponent
の現在表示されている領域で戻り値がoffs0...offs1
の範囲の文字列領域となるので、super.paintLayer(g, offs0, offs1, bounds, c, view)
を実行して取得した図形に縁を描画している
参考リンク
- JTextComponentの選択ハイライトを変更
- JTextAreaでハイライト付き検索を行う
- JTextPaneで検索結果のハイライト表示と文字色変更を同時に行う
JTextPane
でHighlightPainter
ではなくhtml
タグでハイライトの描画を変更