# ComboBox mit Daten befüllen



## maxwell (14. Feb 2005)

hallo zusammen,

hab folgendes problem: beim befüllen der combo box mit daten (aus einer dantenbank) hat es einen bug! siehe unten! vielleicht kann mir jemand bittte auf anhieb das problem erläutern,hab darum keinen quelltext gepostet.


Ausgabe in der ComboBox:

*{2=Messort(Kirchengasse3, 3500, Krems), 1=Messort(Kärtnerstrasse1, 1010,Wien)}*

Eigentlich sollte jeder angelegte Messort (1 oder 2)  für sich aus der ComboBox auswählbar sein und nicht in einer Zeile erscheinen!

besten dank im voraus[/img]


----------



## DesertFox (14. Feb 2005)

zeig mal den Code, wie du die Combobox mit daten befüllst


----------



## ugh_bough_ (14. Feb 2005)

Eigentlich geht das befüllen so.

```
JComboBox cb = new JComboBox();
cb.setModel(new DefaultComboBoxModel(new Object[] {obj1, obj}));
```
Dafür musst du eben alle Einträge aus der DB zwischenspeichern.

Bin mir nicht sicher, ob das DefaultComboBoxModel auch Methoden zum weiteren einfügen bereitstellt. Dann wäre das Zwischenspeichern nicht nötig.

Auf alles Geschriebene keine Gewähr 
ugh_bough


----------



## ugh_bough_ (14. Feb 2005)

Nachtrag.

Es gibt diese convenience Methoden.
Kannst dem Constructor des Models auch einen Vector mitgeben.


----------



## DesertFox (14. Feb 2005)

> Bin mir nicht sicher, ob das DefaultComboBoxModel auch Methoden zum weiteren einfügen bereitstellt.


Ja, auch zum entfernen 

```
addElement(Object anObject) 
removeElement(Object anObject) 
removeElementAt(int index)
```



> Kannst dem Constructor des Models auch einen Vector mitgeben.


Jup, hier zur übersicht alle Konstruktoren, man kann auch gleich die Konstruktoren von JComboBox nehmen, das kommt im endeffekt aufs gleiche raus, man kann auch so noch alles editieren, da JComboBox entweder eine Methode namens getModel() bietet oder direkt Methoden wie add(), aber das kannste sicher auch in der API nachschauen :wink: 


> JComboBox()
> Creates a JComboBox with a default data model.
> JComboBox(ComboBoxModel aModel)
> Creates a JComboBox that takes it's items from an existing ComboBoxModel.
> ...


und das von DefailtComboBoxModel:


> DefaultComboBoxModel()
> Constructs an empty DefaultComboBoxModel object.
> DefaultComboBoxModel(Object[] items)
> Constructs a DefaultComboBoxModel object initialized with an array of objects.
> ...


----------



## maxwell (14. Feb 2005)

Code für das Befüllen der Box:

```
DataManager dm = DataManager.getInstance();   //hole mir das 1 Objekt!
.
.
.
private void initComboBoxes() {

    HashMap hm = null;
    try {
      hm = dm.getMessorte();

    } catch (SQLException e) {
      JOptionPane.showMessageDialog(this, "Fehler beim Laden der Messorte!", "Laden", JOptionPane.ERROR_MESSAGE );
    }
    if (hm != null) {
      jComboBox_Messort.addItem(hm);
    }
```


Auslesen aus der Datenbank erfolgt so:

```
public HashMap getMessorte() throws SQLException {
    HashMap messorte = new HashMap();
    Statement stmt = conn.createStatement();
    ResultSet rs = stmt.executeQuery("SELECT * FROM messort;");

    while (rs.next()) {
      int messort_pk = rs.getInt("id");
      String name = rs.getString("name");
      String plz = rs.getString("plz");
      String ort = rs.getString("ort");

      Integer i = new Integer(messort_pk);
      messorte.put(i, new Messort(i, name, plz, ort));
    }

    rs.close();
    stmt.close();

    return messorte;
  }
```

Hab vergessen zu sagen,dass die klammern ebenfalls nicht in der box erscheinen sollten...

mercy


----------



## DesertFox (14. Feb 2005)

jo, da is alles klar,  die Methode getMessorte() gibt den String 
{2=Messort(Kirchengasse3, 3500, Krems), 1=Messort(Kärtnerstrasse1, 1010,Wien)}
zurück, welcher auch zurecht in der Combobox angezeit wird, was solle sie auch anderes machen?
Du musst davor die String zurechtschneiden und splitten, schau dir dazu mal die klasse String und StringBuffer an, StringTokenizer kann auch interesant sein


----------



## maxwell (14. Feb 2005)

:bahnhof: hmm...hab jetzt einiges probiert,aber irgendwie bring ich das nicht auf die reihe!
könntest du mir bitte ein bisschen auf die reihe helfen?!?

mercy


----------



## ronny (14. Feb 2005)

Hi, 

so wie ich das sehe, KANN es im moment nicht gehen, da du EINMAL addItem(hashmap) aufrufst und deine
mühevoll erstellte komplette Hashmap mitgibst... addItem ruft dann einfach die toString() methode auf von der HashMap -> daher dein String mit Klammern und alles....

einfach die Hashmap in ner schleife durchgehen... z. b. über nen Iterator (vorher keySet() von der HashMap aufgerufen) und dann sagst du in der Schleife addItem(item) wobei item das aktuelle aus der Hashmap geholte Objekt zu deinem Key ist.. (der Key scheint n ID von deinem Objekt zu sein...)

dann müssts eigentlich hinhauen!


----------



## maxwell (14. Feb 2005)

@ ronny:

will dich ja um 23 uhr nicht mehr quälen,aber kannst du mir bitte eine kleine unterstützung in form eines codes geben-kann dir so nicht wirklich folgen!

dankeschön!


----------



## ronny (14. Feb 2005)

ok, sorry, hier noch a bisserl code....


```
HashMap map = new HashMap();
        Iterator i = map.keySet().iterator();
        
        while (i.hasNext()) {
        	Integer key = (Integer) i.next();
        	comboBox.addItem(map.get(key));
        }
```


so müssts gehen... map is deine hashmap -> key muss Integer sein, da du ja Integer als key genommen hast...

hoffentlich hilft dir das hier weiter..........  :wink:


----------



## maxwell (14. Feb 2005)

...es funktioniert!
herzlichen dank für deine nächtlichen bemühungen!


----------



## ronny (14. Feb 2005)

hehehhee, kein problem!!!!   :wink: 

viel spass noch!!


----------

