• 追加された行はこの色です。
  • 削除された行はこの色です。
TITLE:JTextAreaの行をマウスでロールオーバー表示
#navi(../)
#tags()
RIGHT:Posted by &author(aterai); at 2006-09-25
*JTextAreaの行をマウスでロールオーバー表示 [#me3cb8ee]
JTextAreaのマウスカーソルがある行をロールオーバー表示します。
---
title: JTextAreaの行をマウスでロールオーバー表示
tags: [JTextArea, MouseListener, MouseMotionListener]
author: aterai
pubdate: 2006-09-25
description: JTextAreaのマウスカーソルがある行をロールオーバー表示します。
---
* 概要 [#me3cb8ee]
`JTextArea`のマウスカーソルがある行をロールオーバー表示します。

-&jnlp;
-&jar;
-&zip;
#download(https://lh3.googleusercontent.com/_9Z4BYR88imo/TQTQFUVNyQI/AAAAAAAAAfA/cTsyoFPSNEg/s800/MouseOverPainter.png)

//#screenshot
#ref(http://lh3.ggpht.com/_9Z4BYR88imo/TQTQFUVNyQI/AAAAAAAAAfA/cTsyoFPSNEg/s800/MouseOverPainter.png)

**サンプルコード [#z00c25ed]
* サンプルコード [#z00c25ed]
#code(link){{
class HighlightCursorTextArea extends JTextArea {
  public HighlightCursorTextArea() {
    super();
    setOpaque(false);
    RollOverListener rol = new RollOverListener();
    addMouseMotionListener(rol);
    addMouseListener(rol);
  }
  private final Color linecolor = new Color(250,250,220);
  @Override protected void paintComponent(Graphics g) {
    Graphics2D g2 = (Graphics2D)g;
    Insets i = getInsets();
    int h = g2.getFontMetrics().getHeight();
    int y = rollOverRowIndex*h+i.top;
    g2.setPaint(linecolor);
    g2.fillRect(i.left, y, getSize().width-i.left-i.right, h);
    super.paintComponent(g);
  }
  private int rollOverRowIndex = -1;
  private class RollOverListener extends MouseInputAdapter {
    @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();
      }
    }
    @Override public int getLineAtPoint(Point pt) {
      Element root = getDocument().getDefaultRootElement();
      return root.getElementIndex(viewToModel(pt));
    }
  }
}
}}

**解説 [#a4d2db6d]
MouseInputAdapterを継承したRollOverListenerで、マウスカーソルのある行を記憶し、JTextArea#paintComponentメソッドをオーバーライドして、その行の背景に色を付けています。
* 解説 [#a4d2db6d]
`MouseInputAdapter`を継承した`RollOverListener`で、マウスカーソルのある行を記憶し、`JTextArea#paintComponent`メソッドをオーバーライドして、その行の背景に色を付けています。

//**参考リンク
**コメント [#rebb2644]
//* 参考リンク
* コメント [#rebb2644]
#comment
#comment