JList - désélectionner en cliquant déjà un élément sélectionné

Si un index sur une JList est cliqué, je veux qu'il dé-sélectionner. En d'autres termes, en cliquant sur les indices de la réalité bascule de leur sélection. N'a pas l'air comme cela a été pris en charge, j'ai donc essayé

list.addMouseListener(new MouseAdapter()
{
   public void mousePressed(MouseEvent evt)
   {
      java.awt.Point point = evt.getPoint();
      int index = list.locationToIndex(point);
      if (list.isSelectedIndex(index))
         list.removeSelectionInterval(index, index);
   }
});

Le problème ici est que c'est invoquée après JList a déjà agi sur l'événement de la souris, de sorte qu'il permet de désélectionner tout. Alors j'ai essayé de supprimer tous JList est MouseListeners, ajoutant ma propre, puis ajouter la totalité de la valeur par défaut auditeurs de retour. Cela ne fonctionne pas, depuis JList serait de sélectionner à nouveau l'index après que je l'ai désactivée. De toute façon, ce que j'ai finalement venu avec est

MouseListener[] mls = list.getMouseListeners();
for (MouseListener ml : mls)
   list.removeMouseListener(ml);
list.addMouseListener(new MouseAdapter()
{
   public void mousePressed(MouseEvent evt)
   {
      java.awt.Point point = evt.getPoint();
      final int index = list.locationToIndex(point);
      if (list.isSelectedIndex(index))
         SwingUtilities.invokeLater(new Runnable()
         {
            public void run()
            {
               list.removeSelectionInterval(index, index);
            }
         });
   }
});
for (MouseListener ml : mls)
   list.addMouseListener(ml);

... et qui fonctionne. Mais je ne l'aime pas. Est-il un meilleur moyen?

Honnêtement, je l'aurais fait comme vous l'avez déjà décrire, à l'aide d'un MouseAdapter. Si il y a une solution plus élégante, je serais ravi d'entendre parler de lui, trop.
C'est pris en charge par défaut dans la JList, mais vous avez maintenant la touche Ctrl enfoncée (au moins sous Windows) sur un élément sélectionné dans l'ordre pour le désélectionner.

OriginalL'auteur Pete | 2010-03-27