Bonjour à tous, j'ai une liste de miniatures, sur lesquelles je souhaiterais ajouter une zone cliquable. (Bon, mon explication est déjà bancale, je vous joints une image qui parlera mieux que moi !)

Nom : list.png
Affichages : 134
Taille : 27,2 Ko

Cette liste de miniature est crée comme ceci :

Code java : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 modelObj = new DefaultListModel();
   //liste de String contenant le nom de chaque fichier image
   objList = new JList(modelObj);
   ListCellRenderer rendererObj = new ThumbCellRendererObj();
   objList.setCellRenderer(rendererObj);
objList.addMouseListener((MouseListener)rendererObj);


et à présent le listCellRenderer :


Code java : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
 
class ThumbCellRendererObj  implements ListCellRenderer, MouseListener  {
  protected DefaultListCellRenderer defaultRenderer = new DefaultListCellRenderer();
 
  public Component getListCellRendererComponent(JList list, Object value, int index,
      boolean isSelected, boolean cellHasFocus) {
 
 
 
    Font theFont = null;
    java.awt.Color theForeground = null;
    Icon theIcon = null;
    String theText = null;
 
 
    JLabel renderer = (JLabel) defaultRenderer.getListCellRendererComponent(list, value, index,
        isSelected, cellHasFocus);
 
 
    if (value instanceof Object[]) 
   {
      Object values[] = (Object[]) value;
      theFont =  fontCatalogObj;
      theForeground = java.awt.Color.DARK_GRAY;
      theIcon = new Icon(values[1]+".png");
      theText =  (String) values[0];
 
    } 
    if (!isSelected) {
      renderer.setForeground(theForeground);
    }
 
    renderer.setFont(theFont);
    renderer.setToolTipText(theText);
    renderer.setText(theText);
 
    //renderer.addMouseListener(this);
     return renderer;
  }
 
        public void mouseClicked(MouseEvent e) {
            System.out.println("mousepick = " + e.getX() + " " + e.getY());
        }
 
        public void mousePressed(MouseEvent e) {
        }
 
        public void mouseReleased(MouseEvent e) {
        }
 
        public void mouseEntered(MouseEvent e) {
        }
 
        public void mouseExited(MouseEvent e) {
        }
    }

Ce que j'essaye de faire, c'est détecter à quelles coordonnées de la vignette l'utilisateur a cliqué. Hors, avec objList.addMouseListener((MouseListener)rendererObj);
je récupère bien les coordonnées, mais par rapport à l'ensemble de mon scrollPane, et pas par rapport à la vignette sur laquelle j'ai cliqué. J'ai bien tenté d'ajouter le MouseListener sur le renderer (JLabel) à la fin de mon ListCellRenderer, mais cela ne semble pas fonctionner. Auriez vous des idées ? Je suis à peu près certain de ne pas avoir été assez clair, n'hésitez pas à me demander d'expliciter tout ce que vous n'auriez pas compris.