2010-11-10 24 views
0

J'ai créé un dialogue avec deux JLists affichés et un bouton qui prend la valeur sélectionnée dans le second JList et fait quelque chose (disons qu'il affiche la valeur sélectionnée). La liste des valeurs du second JList est mise à jour en fonction de la sélection de la valeur du premier JList.instance multiple d'un événement JButton listener dans JLists

Lorsque la boîte de dialogue est affichée initialement, le bouton est désactivé. Lorsqu'une valeur est sélectionnée à partir du premier, puis du second JList, le bouton est activé et l'écouteur de sélection requis y est ajouté. Le problème est que chaque fois que l'on clique sur le bouton, le nombre de messages de sortie est égal au temps où une valeur de la seconde JList est sélectionnée. Par exemple, si je sélectionne une valeur dans le second JList, alors je change d'avis et sélectionne une autre valeur, le clic sur le bouton affichera le message deux fois. Est-ce que quelqu'un connaît une méthode pour empêcher une telle chose?

+5

Pouvez-vous poster un extrait de code? – Adamski

Répondre

1

Oui: ne pas mettre en cache les sélections, il suffit de traiter la sélection réelle dans votre deuxième liste.

Si possible, postez le code qui est exécuté une fois que vous avez appuyé sur le bouton. Je suppose que vous avez une sorte de collection (une liste ou une file d'attente) qui stocke toutes les sélections que vous faites dans la boîte de dialogue et lorsque vous appuyez sur le bouton, chaque sélection stockée est traitée.

Cela ressemble à un comportement voulu, parce que vous ne codez généralement pas cela par hasard;)

Si elle est destinée et vous voulez juste d'éliminer les doublons, pensez à utiliser un Set au lieu d'une liste, comme Set ne contiendra que des valeurs uniques.

2

Votre liste ListSelectionListener devrait vérifier (e.getValueIsAdjusting() == false) sinon vous répondrez à toutes les sélections de l'utilisateur et pas seulement la finale.

0

Ajoutez-vous un ActionListener au bouton chaque fois que vous l'activez?

1

Il fait parfaitement ce qu'il devrait faire.

Il tire deux événements,

1> Sélection est retiré du premier élément.

2> La sélection est effectuée sur le deuxième élément. Comme le dit fbcocq, vous devriez vérifier getValueIsAdjusting(). Vérifiez , ça va aider.