Swing/MouseOverPainter のバックアップソース(No.2)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - 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)
TITLE:JTextAreaの行をマウスでロールオーバー表示 #navi(../) RIGHT:Posted by [[aterai]] at 2006-09-25 *JTextAreaの行をマウスでロールオーバー表示 [#me3cb8ee] JTextAreaのマウスカーソルがある行をロールオーバー表示します。 -&jnlp; -&jar; -&zip; //#screenshot #ref(http://lh3.ggpht.com/_9Z4BYR88imo/TQTQFUVNyQI/AAAAAAAAAfA/cTsyoFPSNEg/s800/MouseOverPainter.png) **サンプルコード [#z00c25ed] #code{{ 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)); } } } }} **解説 [#a4d2db6d] MouseInputAdapterを継承したRollOverListenerで、マウスカーソルのある行を記憶し、JTextArea#paintComponentメソッドをオーバーライドして、その行の背景に色を付けています。 //**参考リンク **コメント [#rebb2644] #comment