[JAVA] Doublons Jcombobox

Bonjour,
je souhaite retirer les doublons dans une JComboBox.
Pourriez vous m'aider?
Merci
Configuration: Windows XP
Firefox 2.0.0.2

3 réponses

  1. Modérateur
    salut

    comment et avec quoi remplis-tu ce JComboBox ..

    ?????
    0
    1. En fait je possède un fichier texte qui contien à chaque ligne un nom, un prénom et une option.
      J'extrait les options du fichier grâce à la classe Tokenizer et ses délimiteurs pour les placer dans le JCombobox.
      0
  2. Salut!

    Si tu ne veux pas de doublons, le mieux est d'utiliser un java.util.Set plutôt qu'une java.util.List pour stocker tes données.

    Je pense que ton problème vient de là.

    Teste la classe ci-dessous qui utilise 2 JComboBox.

    Le première extrait les données à afficher d'un Set, l'autre d'une List.

    Tu peux remarquer que malgré qu'on a ajouté plusieurs fois la même donnée au Set, elle n'apparaît qu'une seule fois.

    /*
     * Created on 27-févr.-2007
     * Author: HackTrack
     */
    package comboDoubleEntriesRemove;
    
    import java.awt.Dimension;
    import java.util.ArrayList;
    import java.util.HashSet;
    import java.util.List;
    import java.util.Set;
    
    import javax.swing.DefaultComboBoxModel;
    import javax.swing.JComboBox;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    
    public class SingleEntryComboTester extends JFrame {
    	private JComboBox combo1;
    	private JComboBox combo2;
    
    	private DefaultComboBoxModel comboModel1;
    	private DefaultComboBoxModel comboModel2;
    
    	public SingleEntryComboTester() {
    		super("Demo");
    		initialize();
    	}
    
    	private void initialize() {
    		setDefaultCloseOperation(EXIT_ON_CLOSE);
    		JPanel panel = new JPanel();
    		panel.setPreferredSize(new Dimension(320,200));
    		comboModel1 = new DefaultComboBoxModel();
    		comboModel2 = new DefaultComboBoxModel();
    		combo1=new JComboBox();
    		combo2=new JComboBox();
    		
    		combo1.setModel(comboModel1);
    		combo2.setModel(comboModel2);
    		panel.add(combo1);
    		panel.add(combo2);
    		getContentPane().add(panel);
    	}
    	
    	
    	public void setFirstComboData(Set data) {
    		comboModel1= new DefaultComboBoxModel(data.toArray());
    		combo1.setModel(comboModel1);
    		validate();
    	}
    	
    	public void setSecondComboData(List data) {
    		comboModel2 = new DefaultComboBoxModel(data.toArray());
    		combo2.setModel(comboModel2);
    	}
    	
    	public static void main(String[] args) {
    		SingleEntryComboTester tester = new SingleEntryComboTester();
    		tester.pack();
    		tester.setVisible(true);
    		Object[] data = new String[]{"Hack","Track","Chouba","Chouba","Hop!","Ka","Track"};
    		Set set = new HashSet();
    		List list = new ArrayList();
    		for(Object o: data){
    			list.add(o);
    			set.add(o);
    		}
    		tester.setFirstComboData(set);
    		tester.setSecondComboData(list);
    	}
    }
    
    


    ;-)
    HackTrack
    0
    1. D'accord merci je vais essayer de mettre ça en oeuvre.
      0
  3. En fait je ne vois pas trop comment adapter celà à ma lecture de fichier. Pour obtenir tous les noms d'option à chaque ligne du fichier je boucle et je récupère ce nom d'option dans un String opt=tok.nextToken(). je vous montre ce qui marchait jusqu'à maintenant avec les doublons:

    public void getOption() throws IOException{
    try{
         BufferedReader lecture=new Bufferedreader
         (new FileReader("D:/IUT/Liste.txt"));
          while(true){
               String ligne=lecture.readLine();
                if(ligne==null)break;
                StringTokenizer tok=new StringTokenizer (ligne, ";"); 
                String opt=tok.nextToken();      //on récupère l'option
                JCBListeOption.additem(opt);  //on ajoute au Jcombobox
                        }
            lecture.close();
            }
    catch(NoSuchElementException e){}
            }
    }
    
    
    0