TITLE:JTextAreaの行をマウスでロールオーバー表示

JTextAreaの行をマウスでロールオーバー表示

編集者:Terai Atsuhiro
作成日:2006-09-25
更新日:2024-03-22 (金) 16:22:14

概要

JTextAreaのマウスカーソルがある行をロールオーバー表示します。

#screenshot

サンプルコード

 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);
   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 {
     public void mouseExited(MouseEvent e) {
       rollOverRowIndex = -1;
       repaint();
     }
     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));
     }
   }
 }
  • &jnlp;
  • &jar;
  • &zip;

解説

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

コメント