TITLE:JListのセルをマウスカーソルでロールオーバー

JListのセルをカーソル移動でロールオーバー

編集者:Terai Atsuhiro
作成日:2006-09-11
更新日:2024-04-12 (金) 14:46:07

概要

JListでマウスカーソルの下にあるセルをハイライト表示します。

#screenshot

サンプルコード

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{
    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 {
    public void mouseExited(MouseEvent e) {
      rollOverRowIndex = -1;
      repaint();
    }
    public void mouseMoved(MouseEvent e) {
      int row = locationToIndex(e.getPoint());
      if(row != rollOverRowIndex) {
        rollOverRowIndex = row;
        repaint();
      }
    }
  }
}
  • &jnlp;
  • &jar;
  • &zip;

解説

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

参考リンク

コメント