# JComboBox wie in HTML - Beispiel gesucht



## mchashi (6. Dezember 2004)

Hallo Leute,

Ich wollte jetzt eine JComboBox programmieren und konnte auch mit addItem(String) mehere Einträge einfügen, doch kann ich nicht den Auswahl-Wert irgendwie bestimmen, so wie in HTML?

  <select name="liste">
    <option value="0">Bitte auswählen</option>
    <option value="frau">Frau</option>
    <option value="mann">Mann</option>
  </select>

Ich kann zwar mit getIndex() herausfinden, welcher Wert ausgewählt wurde, doch leider sind die Werte leider von 0 - ... durchnummeriert.

Wie kann ich den oberen HTML-Code in Java umsetzen?

JComboBox liste = new JComboBox();
etc. ...

Danke.

Gruß

Sven.


----------



## Vincentius (6. Dezember 2004)

Hallo,

mit dem HTML-Code kannst Du in Java Gottseidank  nichts bewirken, außer vielleicht, die Label-Beschriftung formattieren.

Um einen Wert in der ComboBox zu setzen, benutzt man eine von den beiden Methoden: *setSelectedIndex(int anIndex)* oder *setSelectedItem(Object anObject)*.

Gruß
Vincent.


----------



## mchashi (6. Dezember 2004)

Wollte eigentlich nur ein Code-Beispiel in Java wie das den oben dargestellten in HTML entspricht, etwas wie:

JComboBox anredeJComboBox = new JComboBox();

anredeJComboBox.setSelectedItem("Bitte auswählen");
anredeJComboBox.addItem("Frau");
anredeJComboBox.addItem("Herr");

Das Problem, hier setze ich den option-value selber nicht, sondern "Bitte auswählen" hat den Wert 0, "Frau" den Wert 1 und "Herr" den Wert 2.
Das möchte ich aber nicht, sondern wie in HTML die Werte bei einer Auswahl selbst bestimmen!

Hoffe ich habe mich jetzt besser ausgedrückt...

Sven.


----------



## Snape (6. Dezember 2004)

Moin,
wofür soll das gut sein? Was hast Du davon, wenn Du den Index für Herr auf 32 und den für Frau auf 976 setzen kannst?


----------



## Vincentius (6. Dezember 2004)

So was wie option-value gibt es bei der JComboBox nicht, aber Du kannst in der *addItem()* Methode jedes beliebige Objekt übergeben, das muss nicht unbedingt ein String sein.

Wenn ich Deinen HTML-Code in Java umsetzen müsste, würde ich folgendes machen:

```
public class ComboBoxTest {
    
    public ComboBoxTest() {
        JFrame frame = new JFrame("ComboBoxTest");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        final JComboBox anredeJComboBox = new JComboBox();
        anredeJComboBox.addItem(new Anrede("0", "Bitte auswählen"));
        anredeJComboBox.addItem(new Anrede("frau", "Frau"));
        anredeJComboBox.addItem(new Anrede("mann", "Mann"));
        
        Container c = frame.getContentPane();
        c.setLayout(new BorderLayout());
        frame.getContentPane().add(anredeJComboBox, BorderLayout.NORTH);
        
        final JTextArea text = new JTextArea();
        c.add(new JScrollPane(text), BorderLayout.CENTER);
        
        anredeJComboBox.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                Anrede anrede = (Anrede) anredeJComboBox.getSelectedItem();
                text.append("value=" + anrede.getValue() + ", label=" + anrede.getLabel() + "\n");
            } 
        });
        
        frame.setSize(300, 200);
        frame.setVisible(true);
    }
    
    public static void main(String[] args) {
        new ComboBoxTest();
    }
    
    private class Anrede {
        private String value;
        private String label;
        
        public Anrede(String value, String label) {
            this.value = value;
            this.label = label;
        }

        public final String getLabel() {
            return label;
        }

        public final String getValue() {
            return value;
        }
        
        public String toString() {
            return label;
        }
    }
}
```
Die Klasse *Anrede* ist nur eine Wrapper-Klasse für die ComboBox Einträge. Wichtig dabei ist, die *toString* Methode zu überschreiben, sonst siehst Du in der ComboBox nur den Klassennamen anstatt Beschtiftung. 

Gruß
Vincent


----------



## mchashi (6. Dezember 2004)

danke schon mal, gucke mir den Code mal an...

@Snape

wenn ich Benutzer aus einer Datenbank lade, möchte ich gerne die ID aus der DB (Primärschlüssel) gerne als Index haben.

Oder wie mache ich das dann geschickt in Java. Mache es so nämlich immer mit PHP.

Keine Ahnung?


----------



## Snape (6. Dezember 2004)

Moin,
als Index wird das so nicht gehen. Aber Vincentius Vorgehensweise kann Dir da evtl. helfen, nur in der Klasse Anrede nicht mit "frau" und "mann" arbeiten, sondern mit der ID. Entweder als Integer oder als String mit Inhalt der ID.


----------



## mchashi (6. Dezember 2004)

die vorgehensweise von Vincentius gefällt mir schon ganz gut!

aber wie macht ihr das denn sonst. auslesen von daten aus einer datenbank ist doch ein alltägliches problem oder?


----------



## Snape (6. Dezember 2004)

Für mich nicht. 
Ich würde die Daten einfach reinlegen und das Auslesen über das selectedItem erledigen. Damit hast Du doch direkt das Objekt, was Du benötigst, im Zugriff. Das ist auch besser, als Strings in die ComboBox zu legen und sich dann anhand dieser andere Daten zusammen zu suchen.


----------

