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をリペイントしてそのセルの背景色などを変更しています。

参考リンク

コメント