TITLE:JListのセルをカーソル移動でロールオーバー
#navi(../)
#tags(JList, MouseListener, MouseMotionListener)
RIGHT:Posted by &author(aterai); at 2006-09-11
*JListのセルをカーソル移動でロールオーバー [#q7f9d22f]
``JList``でマウスカーソルの下にあるセルをハイライト表示します。

-&jnlp;
-&jar;
-&zip;

//#screenshot
#ref(http://lh4.ggpht.com/_9Z4BYR88imo/TQTSE8rUioI/AAAAAAAAAiM/4EMPSFpuBVo/s800/RollOverListener.png)

**サンプルコード [#g4cfa246]
#code(link){{
class RollOverList extends JList {
  private int rollOverRowIndex = -1;
  public RollOverList() {
    super();
    RollOverListener rol = new RollOverListener();
    addMouseMotionListener(rol);
    addMouseListener(rol);
    setCellRenderer(new RollOverCellRenderer());
  }
  private class RollOverCellRenderer extends DefaultListCellRenderer{
    @Override public Component getListCellRendererComponent(
            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);
      }
      return c;
    }
  }
  private class RollOverListener extends MouseInputAdapter {
    @Override public void mouseExited(MouseEvent e) {
      rollOverRowIndex = -1;
      repaint();
    }
    @Override public void mouseMoved(MouseEvent e) {
      int row = locationToIndex(e.getPoint());
      if(row != rollOverRowIndex) {
        rollOverRowIndex = row;
        repaint();
      }
    }
  }
}
}}

**解説 [#bbe45ca3]
``MouseInputAdapter``をオーバーライドして、マウスカーソルのあるセルを記憶し、``JList``をリペイントしてそのセルの背景色などを変更しています。

**参考リンク [#z49e85b1]
-[http://forums.sun.com/thread.jspa?threadID=640414 Swing - Highlight JTable rows on rollover]
-[[JTableのセルのハイライト>Swing/CellHighlight]]

**コメント [#c980eab8]
#comment