Bonjour,

Voilà j'ai dérivé un JPanel pour afficher plusieurs images sur lesquelles je veux catcher les clics (cf. le code simplifié en dessous).

Le problème: il arrive plus ou moins régulièrement que certains clics dans mon JPanel ne soient pas 'catchés', ie. processClick() n'est pas appelé.

C'est (très) ennuyeux. Aurais-je fait un truc de travers ?

Code : 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
 
public class ImagePanel extends JPanel {
    public ImagePanel () {
        super.addMouseListener(new MouseAdapter() {
            public void mouseClicked(MouseEvent e) {
                processClick(e);
            }
        });
    }
 
    protected void processClick(MouseEvent e) {
        // pour chaque image de la liste, j'appelle getImageRectangle()
        // je compare avec la coordonnée contenue dans 'e' et ainsi 
        // je sais quelle image a été cliquée ; je préviens des listeners.
    }
    public void paintComponent(Graphics g) {
        // ici j'affiche ma liste d'images
        // en calculant leur pos + taille avec getCardRectangle(...)
        for (int pos = 0 ; pos < m_images.size() ; ++pos) {
            Rectangle rect = getImageRectanle(i);
            g.drawImage(img, rect.x, rect.y, rect.width, rect.height, this);
        }
    }
    public Rectangle getImageRectangle(int pos) {
        // je retourne ici la pos + taille de mon image à afficher.
    }
 
    public static void main(String[] argv) {
        CardsPanel cards = new CardsPanel(CardsPanel.Direction.HORIZONTAL, true);
        //etc...
   }
}