Se connecter avec
S'enregistrer | Connectez-vous

[ Java ] Problem de MouseListener

Dernière réponse : dans Programmation

Hi everybody :lol: 

Je fait un prog de Messenger. J'ai une fenêtre ki contient une liste de contacts dans une JList, et lorsque je clique sur un des contacts, une nouvelle fenêtre s'ouvre, portant le nom du contact.

Voila mon code :
Ici l'appel de la classe qui écoute le click de souris et ouvre une nouvelle fenêtre :
  1. contacts.setListData(contactlist);
  2. contacts.addMouseListener(new ActionJList(contacts, liste_window, liste, moi));

Ici ma classe ActionJList :
  1. import java.awt.event.MouseAdapter;
  2. import java.awt.event.MouseEvent;
  3. import javax.swing.JList;
  4. import javax.swing.ListModel;
  5.  
  6. class ActionJList extends MouseAdapter
  7. {
  8. JList list;
  9. List_Dialog_window liste_window;
  10. PersonnesPresentes liste;
  11. Personne moi;
  12.  
  13. public ActionJList(JList l, List_Dialog_window liste_window, PersonnesPresentes liste, Personne moi)
  14. {
  15. list = l;
  16. this.liste_window = liste_window;
  17. this.liste = liste;
  18. this.moi=moi;
  19. }
  20.  
  21. public void mouseClicked(MouseEvent e)
  22. {
  23. if(e.getClickCount() == 1)
  24. {
  25. int index = list.locationToIndex(e.getPoint());
  26. ListModel dlm = list.getModel();
  27. Object item = dlm.getElementAt(index);
  28. list.ensureIndexIsVisible(index);
  29.  
  30. Dialog_window Fenetre_conversation = new Dialog_window(String.valueOf(list.getSelectedValue()), liste, moi);
  31. Fenetre_conversation.setVisible(true);
  32.  
  33. liste_window.ajoutFenetre(Fenetre_conversation);
  34. }
  35. }
  36. }


Le problème, c'est que chaque fois que je click n'importe où, même en dehors de la fenêtre de contact, le click est pris en compte et m'ouvrira plein de fenêtres n'importe comment.
Est-ce que je peux bloquer le MouseListener ou qqch ???
Bon désolé si je parachute mon code n'importe comment ... :??: 

En tout cas, merci beaucoup d'avance :pt1cable: 

Autres pages sur : java problem mouselistener

Lassé par la pub ? Créez un compte

Merci :D 
Mais g essayé ton truc Céric, et ça marche pas mieux (exactement pareil koi :(  )

Et kangOl, il fo que je fasse une boucle "for" pour parcourir tous les élément de ma JList et que je leur affecte à chacun un MouseListener ???
Jy suis pas arrivé encore ... Mé c bien ça ? ou ya une fonction tte faite ?

En tt cas, merci encore :pt1cable: 

Bin en fait, j'ai essayé de modifier mon code en disant :
puisk'il m'ouvre plusieurs fois la même fenêtre, je vais l'en empêcher.

J'ai donc posé la condition (dans la fonction public void mouseClicked(MouseEvent e), juste avant de créer une nouvelle fenêtre : si la fenêtre portant le même titre n'est pas déjà créée, je la crée.

ça marche bien : je ne peux pas ouvrir 2 fois la même fenêtre.

Par contre, qd j'ouvre une fenêtre et que je la ferme ensuite (comme on ferme une fenêtre Windows XP normalement :wahoo:  ), eh bin je ne peux plus en rouvrir une du même nom. C'est-à-dire que pour lui le fait que je ferme ma fenêtre ne la retire pas de la mémoire tampon ...

Comment je peux faire ???
Merci d'avance :sol: 

Plutôt qu'un MouseListener, utilise plutôt un ListSelectionListener, c'est fait pour ;) 

Pour stocker tes fenêtres, utilise une HashMap:
- La clef est le nom du contact,
- L'objet est l'instance de la fenêtre associée.

Quand ta sélection change, tu demande à ta HashMap la fenêtre du contact:
- Si elle te renvoie NULL, tu la crées et tu l'ajoutes à la HashMap,
- Sinon tu donnes le focus à la fenêtre.
Lassé par la pub ? Créez un compte