TITLE:`JEditorPane`で選択色を半透明化

Posted by at 2013-10-07

`JEditorPane`で選択色を半透明化

`JEditorPaneで選択色を半透明化し、HighlightPainterによるハイライトやCSS`での背景色変更と組み合わせた場合の描画のテストを行います。

  • &jnlp;
  • &jar;
  • &zip;
SelectionColor.png

サンプルコード

JEditorPane area = new JEditorPane();
area.setOpaque(false);
area.setForeground(new Color(200, 200, 200));
area.setSelectedTextColor(Color.WHITE);
area.setBackground(new Color(0, true));
area.setSelectionColor(new Color(0xC86464FF, true));
View in GitHub: Java, Kotlin

解説

上記のサンプルでは、`JEditorPaneの選択色などを半透明化して、ハイライトやCSS`での背景色変更と組み合わせた場合のテストをしています。

  • `JTextComponent#setSelectionColor, JTextComponent#setSelectedTextColor`
    • 選択色、選択文字色を変更することができる
    • どちらも半透明色を使用可能
    • デフォルトでは、選択が一番手前に描画されるので、半透明にしておくと他の選択色とアルファで乗算されて表示される
    • JTextComponent#setSelectionColor(Color)では、「色に `null を設定することは、Color.white を設定することと同じです。」となっているが、上記のサンプルで、"setSelectionColor(#C86464FF)"のチェックを外してnull`を設定すると、選択の描画が一行目とそれ以降で異なる
  • `HighlightPainter`
    • ハイライトの背景色は設定可能だが、文字色を変更することはできない
    • 背景色を半透明にすることは可能
    • デフォルトのハイライトの設定(`DefaultHighlighter#setDrawsLayeredHighlights(ture)`)では、文字列の選択描画より手前にハイライトの矩形が表示される
  • `StyleSheet`
    • JEditorPaneのHTMLEditorKitにCSSを適用
    • `styleSheet.addRule(".highlight {color: blue; background: #FF5533; opacity: 0.5;}");`などで、文字色、背景色を変更可能
    • デフォルトの`HTMLEditorKitCSSopacity: 0.5background: rgba(255,100,100,0.6);`などに未対応で、半透明化は不可
  • 文字列選択の描画や、ハイライトの矩形より奥に描画される

参考リンク

コメント