Bonsoir
Alors voila, je travaille depuis quelques temps sur un projet dans lequel je crée des objets ( de classe ItemDevice ) représenté sur un panel par des icones (des JLabel). Ces icones doivent être cliquables et draggables.
Le probleme, c'est que mon code ne marche pas. Lorsque je clique sur une icone que je n'ai pas draggé, l'évenement est bien traité. Mais une fois un objet draggé, j'ai beau cliquer comme un malade sur ma souris, l'évenement n'est plus traité.

Je joint quand mm mon code :p

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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
public class HomePanel extends JPanel implements MouseListener,MouseMotionListener {
 
    public ItemDevice[] itemAlarme = new ItemDevice[30];
    int nbAlarme = 0;
    public Vector<ItemDevice> itemList = new Vector<ItemDevice>();
    private int itemToDragg = 0;
    public int itemSelected = 0;
 
    public HomePanel() {
        super();
    }
 
    //On définit une image de fond pour le panel
    public void paintComponent(Graphics g) {
        try {
            g.drawImage(ImageIO.read(new File("images/image.png")), 0, 0, this.getWidth(), this.getHeight(), this);
        } catch (IOException e) {
            e.printStackTrace();
        }
 
    }
 
    //Création d'un objet Alarme
    public void createAlarme(String name, String address) {
 
        itemAlarme[nbAlarme] = new ItemDevice("images/items/remotecontrol.png", "alarme", address);
        itemAlarme[nbAlarme].setItemName(name);
        itemAlarme[nbAlarme].getDeviceIcon().setBounds(0, 0, 100, 140);
        itemAlarme[nbAlarme].setPosX(0);
        itemAlarme[nbAlarme].setPosY(0);
        itemAlarme[nbAlarme].getDeviceIcon().addMouseMotionListener(this);
        itemAlarme[nbAlarme].getDeviceIcon().addMouseListener(this);
        this.add(itemAlarme[nbAlarme].getDeviceIcon());
        itemList.add(itemAlarme[nbAlarme]);
        this.nbAlarme++;
        this.repaint();
    }
 
    public void mouseDragged(MouseEvent e) {
        JLabel temp = (JLabel) e.getSource();
            for (int a = 0; a < itemList.size(); a++) {
                ItemDevice item = (ItemDevice) itemList.get(a);
                if((temp.getX() > item.getPosX())& (temp.getX() < item.getPosX() + 100) & ((temp.getY() > item.getPosY()) & (temp.getY() < (item.getPosY() + 140)))){
                    itemToDragg = a;
                }
            }
        temp.setBounds(temp.getX() + e.getX() - 50,    temp.getY() + e.getY() - 70, 100, 140);
        itemList.get(itemToDragg).setPosX(temp.getX());
        itemList.get(itemToDragg).setPosY(temp.getY());
        itemToDragg = 0;
 
    }
 
    public void mouseClicked(MouseEvent e) {
        if (e.getButton() == MouseEvent.BUTTON3) {
            itemLumiereMenu.show(e.getComponent(), e.getX(), e.getY());
        }
        if (e.getButton() == MouseEvent.BUTTON1) {
            if (itemList.size() != 0) {
                for (int a = 0; a < itemList.size(); a++) {
                    ItemDevice item = (ItemDevice) itemList.get(a);
                    if ((e.getX() > item.getPosX())& (e.getX() < item.getPosX() + 100) & ((e.getY() > item.getPosY()) & (e.getY() < (item.getPosY() + 140)))) {
                        itemSelected = a;
                        System.out.println("element selectionné : " +  item.getItemName()+"// indice "+a);
                    }
                }
            }
        }
    }
 
}

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
 
public class ItemDevice {
 
    private JLabel icon = null;
    private String deviceAddress = null;
    private boolean state = false;
    private String itemClass = null;
    private String itemName = null;
    private int posX;
    private int posY;
 
    public ItemDevice(String url, String aClass, String aAddress){
 
        this.icon = new JLabel(new ImageIcon(url));
        this.deviceAddress = aAddress;
        this.state = false;
        this.setItemClass(aClass);
        this.setPosX(0);
        this.setPosY(0);
 
    }
/* Aucune méthode dans cette classe à part les getters and setters */

Voila. Si qqn pouvait me donner un ptit coup de pouce, histoire que j'ai une piste pour faire marcher mon code, ce serait vraiment sympa

Sur ce, et d'ici la, bonne soirée