Swing/MouseOverPainter のバックアップの現在との差分(No.1)
- バックアップ一覧
- 差分 を表示
- 現在との差分 - 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(../) *JTextAreaの行をマウスでロールオーバー表示 [#me3cb8ee] >編集者:[[Terai Atsuhiro>terai]]~ 作成日:2006-09-25~ 更新日:&lastmod; --- category: swing folder: MouseOverPainter title: JTextAreaの行をマウスでロールオーバー表示 tags: [JTextArea, MouseListener, MouseMotionListener] author: aterai pubdate: 2006-09-25T03:59:45+09:00 description: JTextAreaのマウスカーソルがある行をロールオーバー表示します。 image: https://lh3.googleusercontent.com/_9Z4BYR88imo/TQTQFUVNyQI/AAAAAAAAAfA/cTsyoFPSNEg/s800/MouseOverPainter.png --- * 概要 [#summary] `JTextArea`のマウスカーソルがある行をロールオーバー表示します。 #contents #download(https://lh3.googleusercontent.com/_9Z4BYR88imo/TQTQFUVNyQI/AAAAAAAAAfA/cTsyoFPSNEg/s800/MouseOverPainter.png) **概要 [#def596ab] JTextAreaのマウスカーソルがある行をロールオーバー表示します。 * サンプルコード [#sourcecode] #code(link){{ class HighlightCursorTextArea extends JTextArea { private static final Color LINE_COLOR = new Color(250, 250, 220); private int rollOverRowIndex = -1; private MouseAdapter rolloverHandler; #screenshot @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); } **サンプルコード [#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)); } } } @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)); } } } }} -&jnlp; -&jar; -&zip; **解説 [#a4d2db6d] MouseInputAdapterを継承したRollOverListenerで、マウスカーソルのある行を記憶し、JTextArea#paintComponentメソッドをオーバーライドして、その行の背景に色を付けています。 * 解説 [#explanation] - `MouseAdapter`を継承した`RollOverListener`でマウスカーソルのある行を記憶 - `JTextArea#paintComponent`メソッドをオーバーライドしてその行の背景色を変更 //**参考リンク **コメント [#rebb2644] * 参考リンク [#reference] - [https://docs.oracle.com/javase/jp/8/docs/api/javax/swing/text/Element.html#getElementIndex-int- Element#getElementIndex(...) (Java Platform SE 8)] * コメント [#comment] #comment #comment