ComboBox mit Daten befüllen

Status
Nicht offen für weitere Antworten.

maxwell

Mitglied
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]
 
Eigentlich geht das befüllen so.
Code:
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
 
Nachtrag.

Es gibt diese convenience Methoden.
Kannst dem Constructor des Models auch einen Vector mitgeben.
 
Bin mir nicht sicher, ob das DefaultComboBoxModel auch Methoden zum weiteren einfügen bereitstellt.
Ja, auch zum entfernen
Code:
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.
JComboBox(Object[] items)
Creates a JComboBox that contains the elements in the specified array.
JComboBox(Vector<?> items)
Creates a JComboBox that contains the elements in the specified Vector.
und das von DefailtComboBoxModel:
DefaultComboBoxModel()
Constructs an empty DefaultComboBoxModel object.
DefaultComboBoxModel(Object[] items)
Constructs a DefaultComboBoxModel object initialized with an array of objects.
DefaultComboBoxModel(Vector<?> v)
Constructs a DefaultComboBoxModel object initialized with a vector.
 
Code für das Befüllen der Box:
Code:
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:
Code:
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
 
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
 
: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
 
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! 🙂
 
@ 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!
 
ok, sorry, hier noch a bisserl code....

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:
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben