---
category: swing
folder: DrawsLayeredHighlights
title: DefaultHighlighterの描画方法を変更する
tags: [DefaultHighlighter, JTextArea, JTextComponent]
author: aterai
pubdate: 2013-08-26T00:05:12+09:00
description: DefaultHighlighterの描画方法を変更して、文字列が選択されている場合のハイライト表示を変更します。
image: https://lh6.googleusercontent.com/-yXndYI0LTyA/UhoR8XLek3I/AAAAAAAABy0/BpEfTjjAGwU/s800/DrawsLayeredHighlights.png
---
* 概要 [#summary]
`DefaultHighlighter`の描画方法を変更して、文字列が選択されている場合のハイライト表示を変更します。

#download(https://lh6.googleusercontent.com/-yXndYI0LTyA/UhoR8XLek3I/AAAAAAAABy0/BpEfTjjAGwU/s800/DrawsLayeredHighlights.png)

* サンプルコード [#sourcecode]
#code(link){{
DefaultHighlighter dh = (DefaultHighlighter) textArea.getHighlighter();
dh.setDrawsLayeredHighlights(false);
}}

* 解説 [#explanation]
- `DefaultHighlighter#setDrawsLayeredHighlights(true)`
-- デフォルト
-- 文字列の描画直前にハイライトも描画されるため文字列の選択描画より手前にハイライトの矩形が表示される
-- `MetalLookAndFeel`以外の`LookAndFeel`などで選択時の文字色が反転する場合ハイライトの色によっては見づらくなる
- `DefaultHighlighter#setDrawsLayeredHighlights(false)`
-- 選択されている文字列の背景だけではなくテキストエリアの右端や範囲内の空行も選択色で塗り潰される
-- 文字列の選択描画より奥にハイライトが表示されるためハイライトの矩形は塗り潰されて非表示となる
-- 文字列を選択するとハイライトされている箇所が見づらくなる
-- `HTMLEditorKit`と合わせて使用する場合、改行を含む文字列を選択すると選択状態の描画がおかしくなる?
-- `HTMLEditorKit`と合わせて使用すると、改行を含む文字列を選択すると選択状態の描画がおかしくなる?場合がある

* 参考リンク [#reference]
- [https://docs.oracle.com/javase/jp/8/docs/api/javax/swing/text/DefaultHighlighter.html#setDrawsLayeredHighlights-boolean- DefaultHighlighter#setDrawsLayeredHighlights(boolean) (Java Platform SE 8)]

* コメント [#comment]
#comment
#comment