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 !)
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.
Partager