Swing/HighlightTextForeground のバックアップの現在との差分(No.2)
- category: swing folder: HighlightTextForeground title: JTextPaneで検索結果のハイライト表示と文字色変更を同時に行う tags: [JTextPane, StyledDocument, Style, Highlighter, Matcher, Pattern] author: aterai pubdate: 2014-11-10T00:02:14+09:00 description: Highlighter.HighlightPainterを使用したハイライト表示では文字色を変更することが出来ないので、JTextPaneにStyleを適用してこれを同時に行います。 description: Highlighter.HighlightPainterを使用したハイライト表示では文字色が変更不可なので、JTextPaneにStyleを設定してこれを同時に適用します。 image:
概要
Highlighter.HighlightPainter
を使用したハイライト表示では文字色を変更することが出来ないので、JTextPane
にStyle
を適用してこれを同時に行います。
概要
Highlighter.HighlightPainter
を使用したハイライト表示では文字色が変更不可なので、JTextPane
にStyle
を設定してこれを同時に適用します。
Screenshot
Advertisement
サンプルコード
サンプルコード
StyledDocument doc = textPane.getStyledDocument();
#spandel
Style def = StyleContext.getDefaultStyleContext().getStyle(StyleContext.DEFAULT_STYLE);
#spanend
#spandel
Style regular = doc.addStyle("regular", def);
#spanend
#spandel
Style htf = doc.addStyle("highlight-text-foreground", regular);
#spanend
#spandel
StyleConstants.setForeground(htf, new Color(0xFFDDFF));
#spanend
#spandel
//...
#spanend
#spanadd
Style def = doc.getStyle(StyleContext.DEFAULT_STYLE);
#spanend
#spanadd
Style htf = doc.addStyle("highlight-text-foreground", def);
#spanend
#spanadd
StyleConstants.setForeground(htf, new Color(0xFF_DD_FF));
#spanend
#spanadd
// ...
#spanend
//clear the previous highlight:
Highlighter highlighter = textPane.getHighlighter();
for (Highlighter.Highlight h: highlighter.getHighlights()) {
doc.setCharacterAttributes(
h.getStartOffset(), h.getEndOffset() - h.getStartOffset(), def, true);
}
highlighter.removeAllHighlights();
#spandel
//...
#spanend
#spanadd
// ...
#spanend
//match highlighting:
Highlighter.Highlight hh = highlighter.getHighlights()[current];
highlighter.removeHighlight(hh);
highlighter.addHighlight(
hh.getStartOffset(), hh.getEndOffset(), currentPainter);
doc.setCharacterAttributes(
hh.getStartOffset(), hh.getEndOffset() - hh.getStartOffset(), s, true);
scrollToCenter(textPane, hh.getStartOffset());
View in GitHub: Java, Kotlin解説
上記のサンプルでは、JTextAreaでハイライト付き検索を行うに、以下のような変更を追加することで、検索結果のハイライト表示と文字色変更を同時に行っています。解説
上記のサンプルでは、JTextAreaでハイライト付き検索を行うで使用したコードに以下のような変更を追加することで検索結果のハイライト表示と文字色変更を同時に行っています。-
StyledDocument
に名称"regular"
でStyle
を追加 -
StyledDocument
に親Style
が"regular"
で、名称"highlight-text-foreground"
、文字色のみ変更したStyle
を追加 - 検索結果のハイライト(背景)と同時に、
StyledDocument#getStyle("highlight-text-foreground")
で取得したStyle
をStyledDocument#setCharacterAttributes(...)
で、上書き追加- 現在の対象になっている検索結果以外は、
StyledDocument#getStyle("highlight-text-foreground")
のStyle
で文字色を元に元に戻す
- 現在の対象になっている検索結果以外は、
-
StyledDocument
にスタイル名highlight-text-foreground
で文字色のみデフォルトから変更したStyle
を追加 - 検索結果のハイライト(背景)と同時に
StyledDocument#getStyle("highlight-text-foreground")
で取得したStyle
をStyledDocument#setCharacterAttributes(...)
で上書き追加- 現在の対象になっている検索結果以外は
StyledDocument#getStyle("highlight-text-foreground")
のStyle
で文字色を元に元に戻す
- 現在の対象になっている検索結果以外は
参考リンク
参考リンク
- JTextAreaでハイライト付き検索を行う
- JTextPaneでキーワードのSyntaxHighlight
- Highlighterで文字列をハイライト
- こちらのコメントからソースコードを移動。
- こちらのコメントからソースコードを移動して、この記事を作成