JComboBox wie in HTML - Beispiel gesucht

mchashi

Mitglied
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.
 
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.
 
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.
 
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?
 
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:
Code:
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
 
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?
 
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.
 
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?
 
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.
 
Zurück