Swing/MouseOverPainter のバックアップ(No.9)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/MouseOverPainter へ行く。
- 1 (2007-08-22 (水) 11:02:35)
- 2 (2011-05-05 (木) 08:26:33)
- 3 (2013-02-23 (土) 23:15:12)
- 4 (2014-11-22 (土) 03:59:58)
- 5 (2015-02-02 (月) 17:44:25)
- 6 (2015-04-04 (土) 22:09:44)
- 7 (2016-03-25 (金) 21:27:54)
- 8 (2016-09-18 (日) 21:06:07)
- 9 (2017-10-31 (火) 14:13:28)
- 10 (2019-04-25 (木) 17:37:01)
- 11 (2021-02-04 (木) 01:44:10)
- 12 (2024-03-22 (金) 16:22:14)
- category: swing folder: MouseOverPainter title: JTextAreaの行をマウスでロールオーバー表示 tags: [JTextArea, MouseListener, MouseMotionListener] author: aterai pubdate: 2006-09-25T03:59:45+09:00 description: JTextAreaのマウスカーソルがある行をロールオーバー表示します。 image:
概要
JTextArea
のマウスカーソルがある行をロールオーバー表示します。
Screenshot
Advertisement
サンプルコード
class HighlightCursorTextArea extends JTextArea {
private static final Color LINE_COLOR = new Color(250, 250, 220);
private int rollOverRowIndex = -1;
private MouseAdapter rolloverHandler;
@Override public void updateUI() {
removeMouseMotionListener(rolloverHandler);
removeMouseListener(rolloverHandler);
super.updateUI();
setOpaque(false);
setBackground(new Color(0x0, true)); // Nimbus
rolloverHandler = new RollOverListener();
addMouseMotionListener(rolloverHandler);
addMouseListener(rolloverHandler);
}
@Override protected void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D) g.create();
Insets i = getInsets();
int h = g2.getFontMetrics().getHeight();
int y = rollOverRowIndex * h + i.top;
g2.setPaint(LINE_COLOR);
g2.fillRect(i.left, y, getSize().width - i.left - i.right, h);
g2.dispose();
super.paintComponent(g);
}
private class RollOverListener extends MouseAdapter {
@Override public void mouseExited(MouseEvent e) {
rollOverRowIndex = -1;
repaint();
}
@Override public void mouseMoved(MouseEvent e) {
int row = getLineAtPoint(e.getPoint());
if (row != rollOverRowIndex) {
rollOverRowIndex = row;
repaint();
}
}
public int getLineAtPoint(Point pt) {
Element root = getDocument().getDefaultRootElement();
return root.getElementIndex(viewToModel(pt));
}
}
}
View in GitHub: Java, Kotlin解説
MouseAdapter
を継承したRollOverListener
で、マウスカーソルのある行を記憶し、JTextArea#paintComponent
メソッドをオーバーライドして、その行の背景に色を付けています。