---
category: swing
folder: LineCursor
title: JTextAreaに行カーソルを表示
tags: [JTextArea, Caret, Highlighter]
author: aterai
pubdate: 2006-01-30T12:22:18+09:00
description: JTextAreaのカーソルがある行全体にアンダーラインを引きます。
image: https://lh5.googleusercontent.com/_9Z4BYR88imo/TQTPL3eZj2I/AAAAAAAAAdk/KJTR3_NeAZE/s800/LineCursor.png
---
* Summary [#summary]
`JTextArea`のカーソルがある行全体にアンダーラインを引きます。
#download(https://lh5.googleusercontent.com/_9Z4BYR88imo/TQTPL3eZj2I/AAAAAAAAAdk/KJTR3_NeAZE/s800/LineCursor.png)
* Source Code Examples [#sourcecode]
#code(link){{
class LineCursorTextArea extends JTextArea {
private static final Color LINE_COLOR = Color.BLUE;
private DefaultCaret caret;
@Override public void updateUI() {
super.updateUI();
caret = new DefaultCaret() {
@Override protected synchronized void damage(Rectangle r) {
if (r != null) {
JTextComponent c = getComponent();
x = 0;
y = r.y;
width = c.getSize().width;
height = r.height;
c.repaint();
}
}
};
caret.setBlinkRate(getCaret().getBlinkRate());
setCaret(caret);
}
@Override protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g.create();
Insets i = getInsets();
int y = caret.y + caret.height - 1;
g2.setPaint(LINE_COLOR);
g2.drawLine(i.left, y, getSize().width - i.left - i.right, y);
g2.dispose();
}
// public static int getLineAtCaret(JTextComponent component) {
// int caretPosition = component.getCaretPosition();
// Element root = component.getDocument().getDefaultRootElement();
// return root.getElementIndex(caretPosition) + 1;
// }
}
}}
* Description [#explanation]
* Description [#description]
`JTextArea#paintComponent`メソッドをオーバーライドして、カーソルがある行にアンダーラインを引いています。
- `Caret`の移動に対応するため`DefaultCaret#damage(Rectangle)`メソッドをオーバーライドして変更された領域を再描画
- [https://github.com/santhosh-tekuri/MyBlog/tree/master/CurrentLineHighlighter MyBlog/CurrentLineHighlighter at master · santhosh-tekuri/MyBlog · GitHub]のように`Highlighter`を使用する方法もある
* Reference [#reference]
- [https://community.oracle.com/thread/1393939 Swing - Line Number in JTextPane]
- [https://community.oracle.com/thread/1377129 Swing - Line highlighting problem in presence of text highlighting!]
- [https://github.com/santhosh-tekuri/MyBlog/tree/master/CurrentLineHighlighter MyBlog/CurrentLineHighlighter at master · santhosh-tekuri/MyBlog · GitHub]
- [[JTextAreaに行ハイライトカーソルを表示>Swing/LineHighlighter]]
* Comment [#comment]
#comment
- `Caret`の高さを使用するよう変更 -- &user(aterai); &new{2008-03-17 (月) 16:54:50};
#comment