# Wie doppelte Einträge in ComboBox vermeiden ?



## Guest (15. Mai 2007)

Hallo,

ich habe folgende Methode für das "Füllen" meiner ComboBox geschrieben:

[/code]
	public void fillTypeComboBox()
	{	
		for (int i = 0; i < _typeList.size(); i++)
		{
			String string = _typeList.get(i);
			_comboBoxTypes.addItem(string);
		}
	}
[/code]

_typeList ist eine List<String> (mit doppelten Werten)

Wenn ich die ComboBox auf diese Art und Weise befülle, bekomme ich leider auch doppelte Einträge in der ComboBox angezeigt. Wodurch kann ich das umgehen (ich möchte nicht die Liste abändern!)?

Für einen Hinweis wäre ich euch sehr dankbar.


----------



## SlaterB (15. Mai 2007)

statt der Liste ein neu erstelltes Set ohne Doppelte verwenden:
Set<String> set = new HashSet(_typeList);


----------



## Gast (15. Mai 2007)

Für set gibt es aber keine get Methode, was muss ich denn dafür verwenden?


----------



## SlaterB (15. Mai 2007)

bei Java >= 1.5

for (String string : set) 
{ 
(geht auch mit deiner List)

oder mit einem Iterator, set.iterator()

Iterator<String> it = set.iterator();
    while(it.hasNext()) {
      String st = it.next();
      ...
    }


----------



## Gast (15. Mai 2007)

Hab jetzt folgendes in meinem Code stehen, aber nun werden noch mehr doppelte Einträge angezeigt.


```
public void fillFacilityTypeComboBox()
	{
		Set<String> set = new HashSet<String>(_facilityTypeList);
		
		for (int i = 0; i < set.size(); i++)
		{
			Iterator<String> it = set.iterator();
			while(it.hasNext()) 
			{
			String st = it.next(); 
			_comboBoxFacilityTypes.addItem(st);
			}
		}			
	}
```

Was mache ich verkehrt?


----------



## SlaterB (15. Mai 2007)

ist das nicht offensichtlich?..
wenn das Set 20 Elemente hat, dann durchläufst du 20x mit dem Iterator das ganze Set,

-> 
lasse die for-Schleife weg, 1x Iterator reicht


----------



## Gast (15. Mai 2007)

Habe drei Einträge jeweils 2x.

Mein Code:

```
public void fillFacilityTypeComboBox()
	{
		Set<String> set = new HashSet<String>(_facilityTypeList);
		Iterator<String> it = set.iterator();
		while(it.hasNext()) 
		{
		String st = it.next(); 
		_comboBoxFacilityTypes.addItem(st);
		}
	}
```

Ich weiss echt nicht, woran es liegen kann ?!


----------



## SlaterB (15. Mai 2007)

vielleicht war vorher schon was drin?

schreibe in die while-Schleife
System.out.println("neues Element: "+st+", Anzahl nun: "+getItemCount());


----------



## Gast (15. Mai 2007)

Die Ausgabe der Konsole lautet wie folgt:

neues Element: MM82, Anzahl nun: 3
neues Element: GS, Anzahl nun: 3
neues Element: MM92, Anzahl nun: 3
neues Element: MD77, Anzahl nun: 3
neues Element: Testschrank 2, Anzahl nun: 3
neues Element: Testaufbau, Anzahl nun: 3
neues Element: Testschrank 1, Anzahl nun: 3
neues Element: MS, Anzahl nun: 3
neues Element: MM82, Anzahl nun: 6
neues Element: GS, Anzahl nun: 6
neues Element: MM92, Anzahl nun: 6
neues Element: MD77, Anzahl nun: 6
neues Element: Testschrank 2, Anzahl nun: 6
neues Element: Testaufbau, Anzahl nun: 6
neues Element: Testschrank 1, Anzahl nun: 6
neues Element: MS, Anzahl nun: 6


----------



## SlaterB (15. Mai 2007)

oje oje,
also statt 
getItemCount()
meinte ich natürlich
_comboBoxFacilityTypes.getItemCount());

denn es geht doch um die Anzahl der Items in dieser ComboBox, muss ich das alles erzählen?

-------
erkennbar ist dennoch, dass die Operation 2x durchlaufen wird,
sichergehen kannst du das, indem du am Anfang der Operation vor Erzeugung des Sets
System.out.println("bin in Operation xy");
schreibst,

warum das passiert kann tausend Gründe haben, hängt vom Aufruf ab, den du bisher nicht gepostest hat,
da werde ich aber nun bewußt nicht weiterhelfen, hab genug getan 
ganz ohne Kenntnisse kannst du sowas nicht programmieren

wenn sich hier keiner mehr meldet (da schon so viele Posts),
dann vielleicht neuen Thread aufmachen mit der neuen Frage


----------

