概要

JTextComponentのサブクラスで文字列選択する際に使用するハイライトの背景色や形状を変更します。

サンプルコード

Highlighter.HighlightPainter selectionPainter =
        new DefaultHighlighter.DefaultHighlightPainter(Color.WHITE) {
  @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) {
      Rectangle r = (Rectangle) s;
      g.setColor(Color.ORANGE);
      g.fillRect(r.x, r.y + r.height - 2, r.width, 2);
    }
    return s;
  }
};
Caret caret = new DefaultCaret() {
  @Override protected Highlighter.HighlightPainter getSelectionPainter() {
    return selectionPainter;
  }
};
caret.setBlinkRate(field2.getCaret().getBlinkRate());
field2.setSelectedTextColor(Color.RED);
field2.setCaret(caret);
View in GitHub: Java, Kotlin

解説

  • Default
    • 選択ハイライトにはLookAndFeel毎に指定されたHighlighter.HighlightPainterが使用される
  • JTextComponent#setSelectionColor(...)
    • JTextComponent#setSelectionColor(...)メソッドを使用して選択ハイライトの背景色を変更
  • JTextComponent#setCaret(...)
    • DefaultCaret#getSelectionPainter()メソッドをオーバーライドして選択ハイライトの色と形状を変更したDefaultHighlighter.DefaultHighlightPainterを返すCaretを作成し、これをJTextComponentに設定

参考リンク

コメント