[ Java ] Problem de MouseListener

Rodie

Habitué
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 :
[cpp] contacts.setListData(contactlist);
contacts.addMouseListener(new ActionJList(contacts, liste_window, liste, moi));[/cpp]
Ici ma classe ActionJList :
[cpp]import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JList;
import javax.swing.ListModel;

class ActionJList extends MouseAdapter
{
JList list;
List_Dialog_window liste_window;
PersonnesPresentes liste;
Personne moi;

public ActionJList(JList l, List_Dialog_window liste_window, PersonnesPresentes liste, Personne moi)
{
list = l;
this.liste_window = liste_window;
this.liste = liste;
this.moi=moi;
}

public void mouseClicked(MouseEvent e)
{
if(e.getClickCount() == 1)
{
int index = list.locationToIndex(e.getPoint());
ListModel dlm = list.getModel();
Object item = dlm.getElementAt(index);
list.ensureIndexIsVisible(index);

Dialog_window Fenetre_conversation = new Dialog_window(String.valueOf(list.getSelectedValue()), liste, moi);
Fenetre_conversation.setVisible(true);

liste_window.ajoutFenetre(Fenetre_conversation);
}
}
}[/cpp]

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:
 

KangOl

Grand Maître
tu ne peux pas plutot mettre le MouseListener sur les element de ta JList et pas sur ta Jlist ??
 

ceric35

Habitué
Essaye de changer la condition :
[fixed]if(e.getClickCount() == 1)[/fixed]
en
[fixed]if(e.getClickCount() == 1 && e.getSource() instanceof JList)[/fixed]
 

Rodie

Habitué
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:
 

Rodie

Habitué
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:
 

Athropos

Grand Maître
Plutôt qu'un MouseListener, utilise plutôt un , 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.
 

Rodie

Habitué
Merci bien :pt1cable:

Effectivement, ton "ListSelectionListener" a l'air mieux adapté. J'essaierai. :p
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 128
Messages
6 717 837
Membres
1 586 370
Dernier membre
Flo In Groove
Partager cette page
Haut