Swing/RollOverListener のバックアップ差分(No.10)
- バックアップ一覧
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- バックアップ を表示
- Swing/RollOverListener へ行く。
- 1 (2006-09-11 (月) 09:10:47)
- 2 (2006-09-11 (月) 11:34:48)
- 3 (2007-03-04 (日) 18:39:15)
- 4 (2007-04-13 (金) 03:39:46)
- 5 (2011-05-14 (土) 15:08:03)
- 6 (2013-02-23 (土) 23:17:51)
- 7 (2013-08-25 (日) 04:58:34)
- 8 (2014-11-25 (火) 03:03:31)
- 9 (2015-02-03 (火) 16:24:43)
- 10 (2016-09-08 (木) 20:31:29)
- 11 (2017-10-19 (木) 15:30:36)
- 12 (2019-05-15 (水) 21:04:45)
- 13 (2021-02-09 (火) 19:10:32)
- 14 (2024-04-12 (金) 14:46:07)
- 追加された行はこの色です。
- 削除された行はこの色です。
--- category: swing folder: RollOverListener title: JListのセルをカーソル移動でロールオーバー tags: [JList, MouseListener, MouseMotionListener] author: aterai pubdate: 2006-09-11T09:10:47+09:00 description: JListでマウスカーソルの下にあるセルをハイライト表示します。 image: https://lh4.googleusercontent.com/_9Z4BYR88imo/TQTSE8rUioI/AAAAAAAAAiM/4EMPSFpuBVo/s800/RollOverListener.png --- * 概要 [#q7f9d22f] * 概要 [#summary] `JList`でマウスカーソルの下にあるセルをハイライト表示します。 #download(https://lh4.googleusercontent.com/_9Z4BYR88imo/TQTSE8rUioI/AAAAAAAAAiM/4EMPSFpuBVo/s800/RollOverListener.png) * サンプルコード [#g4cfa246] * サンプルコード [#sourcecode] #code(link){{ class RollOverList extends JList { private int rollOverRowIndex = -1; public RollOverList() { super(); RollOverListener rol = new RollOverListener(); addMouseMotionListener(rol); addMouseListener(rol); setCellRenderer(new RollOverCellRenderer()); class RollOverList<E> extends JList<E> { private static final Color ROLLOVERBACKGROUND = new Color(220, 240, 255); private transient RollOverListener rollOverListener; public RollOverList(ListModel<E> model) { super(model); } private class RollOverCellRenderer extends DefaultListCellRenderer{ @Override public void updateUI() { if (rollOverListener != null) { removeMouseListener(rollOverListener); removeMouseMotionListener(rollOverListener); } setSelectionBackground(null); //Nimbus super.updateUI(); EventQueue.invokeLater(new Runnable() { @Override public void run() { rollOverListener = new RollOverListener(); addMouseMotionListener(rollOverListener); addMouseListener(rollOverListener); setCellRenderer(new RollOverCellRenderer()); } }); } private class RollOverCellRenderer extends DefaultListCellRenderer { @Override public Component getListCellRendererComponent( JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { Component c = super.getListCellRendererComponent( list, value, index, isSelected, cellHasFocus); if(index == rollOverRowIndex) { c.setBackground(new Color(220,240,255)); if(isSelected) c.setForeground(Color.BLACK); if (rollOverListener != null && index == rollOverListener.rollOverRowIndex) { c.setBackground(ROLLOVERBACKGROUND); if (isSelected) { c.setForeground(Color.BLACK); } } return c; } } private class RollOverListener extends MouseInputAdapter { private class RollOverListener extends MouseAdapter { private int rollOverRowIndex = -1; @Override public void mouseExited(MouseEvent e) { rollOverRowIndex = -1; repaint(); } @Override public void mouseMoved(MouseEvent e) { int row = locationToIndex(e.getPoint()); if(row != rollOverRowIndex) { if (row != rollOverRowIndex) { Rectangle rect = getCellBounds(row, row); if (rollOverRowIndex >= 0) { rect.add(getCellBounds(rollOverRowIndex, rollOverRowIndex)); } rollOverRowIndex = row; repaint(); repaint(rect); } } } } }} * 解説 [#bbe45ca3] * 解説 [#explanation] `MouseInputAdapter`をオーバーライドして、マウスカーソルのあるセルを記憶し、`JList`をリペイントしてそのセルの背景色などを変更しています。 * 参考リンク [#z49e85b1] * 参考リンク [#reference] - [https://community.oracle.com/thread/1389010 Swing - Highlight JTable rows on rollover] - [[JTableのセルのハイライト>Swing/CellHighlight]] * コメント [#c980eab8] * コメント [#comment] #comment #comment