[Java][Swing] Double événement de sélection de valeur

Double événement de sélection de valeur [Java][Swing] - Java - Programmation

Marsh Posté le 27-08-2003 à 12:32:36    

Bonjour,
 
J'ai une JList auquelle j'ai spécifié une unique sélection possible. Le problème est que lorsqu'un élément est sélectionné, deux événements de sélection modifiée sont générés. Il y en a pourtant bien un seul lorsque le clavier est utilisé.
Alros j'ai viré tos les MouseListener et MouseMotionListener pour ajouter mon propre MouseListener. Rien n'y fait, toujours une double sélection. :??: Comment régler ce problème ?
 

Code :
  1. ...
  2.     this.list = new JList(listModel);
  3.     this.list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
  4.     this.list.addListSelectionListener(new ListSelectionListener()
  5.     {
  6.       public void valueChanged(ListSelectionEvent event)
  7.       {
  8.         System.out.println("selected value : "
  9.           + list.getSelectedValue());
  10.       }
  11.     });
  12.    
  13.     // vire tous les mouse (motion) listeners
  14.     MouseListener[] listeners = this.list.getMouseListeners();
  15.     System.out.println("mouse listeners : " + listeners.length);
  16.     for(int i = 0; i != listeners.length; i++)
  17.     {
  18.       this.list.removeMouseListener(listeners[i]);
  19.     }
  20.     MouseMotionListener[] motionListeners = this.list.getMouseMotionListeners();
  21.     System.out.println("mouse motion listeners : " + listeners.length);
  22.     for(int i = 0; i != motionListeners.length; i++)
  23.     {
  24.       this.list.removeMouseMotionListener(motionListeners[i]);
  25.     }
  26.    
  27.     // ajoute un mouse listener personalisé
  28.     this.list.addMouseListener(new MouseListener()
  29.     {
  30.       private ListSelectionModel selectionModel = list.getSelectionModel();
  31.       public void mouseClicked(MouseEvent event)
  32.       {
  33.         int index = list.locationToIndex(event.getPoint());
  34.         if(index != -1)
  35.         {
  36.           selectionModel.setSelectionInterval(index, index);
  37.           System.out.println("mouse selection : " + list.getSelectedValue());
  38.         }
  39.       }
  40.       public void mousePressed(MouseEvent event)
  41.       {
  42.       }
  43.       public void mouseReleased(MouseEvent event)
  44.       {
  45.       }
  46.       public void mouseEntered(MouseEvent event)
  47.       {
  48.       }
  49.       public void mouseExited(MouseEvent event)
  50.       {
  51.       }
  52.     });
  53.     ...


Message édité par Krueger le 29-08-2003 à 15:21:29

---------------
"Colère et intolérance sont les ennemis d'une bonne compréhension." Gandhi
Reply

Marsh Posté le 27-08-2003 à 12:32:36   

Reply

Marsh Posté le 27-08-2003 à 14:03:30    

retrouvé ceci dans le code d'une applic faite il y a un certain temps :  
 

Code :
  1. rowSM.addListSelectionListener(new ListSelectionListener()
  2.         {
  3.             public void valueChanged(ListSelectionEvent e)
  4.                 {
  5.                     //Ignore extra messages.
  6.                     if (e.getValueIsAdjusting()) return;
  7.                            
  8.                     ListSelectionModel lsm = (ListSelectionModel)e.getSource();
  9.                     //selectedRow is selected
  10.                     if (!lsm.isSelectionEmpty())
  11.                     {
  12.                        //do someting
  13.                     }
  14.                        
  15.                 }
  16.         });


 
tu dos donc tester si e.getValueIsAdjusting() est true et ne pas tenir compte de ces events
 
quand tu cliques e.getValueIsAdjusting() est true
et quand tu relaches le bouton de la souris il devient false
 


Message édité par ozark74 le 27-08-2003 à 14:12:37
Reply

Marsh Posté le 27-08-2003 à 14:16:46    

Merci beaucoup, ça marche. [:youpi]
J'avais vu la méthode mais j'ai lu trop vite la Javadoc pour mal l'utiliser ensuite. :sarcastic: Plus besoin de supprimer les mouse (motion) listeners.


---------------
"Colère et intolérance sont les ennemis d'une bonne compréhension." Gandhi
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed