Werte der JComboBox

chuvak

Erfahrenes Mitglied
Ist es möglich, bei der JComboBox getrennt Werte und den eigentlichen Inhalt zu definieren?
In HTML würde das so aussehen:
HTML:
<select>
  <option value="value1">Content1</option>
  <option value="value2">Content2</option>
  <option value="value3">Content3</option>
</select>

Hier kann man einen kurzen Wert bekommen, egal wie lange der Inhalt ist.

In Java kenne ich nur die folgende Lösung:
Java:
// neue JComboBox mit vordefinierten Werten
   String[] petStrings = { "Bird", "Cat", "Dog", "Rabbit", "Pig" }; 
   private JComboBox combo = new JComboBox(petStrings);

// ausgewählten Wert holen
   System.out.println(combo.getSelectedItem());

Hier würde ich aber nur "Cat", "Dog", usw. bekommen.

Die Sache ist, dass ich alle Namen aus der ArrayList<Kunde> in die JComboBox laden will und dann deren ID erhalten.
In HTML:

HTML:
<select>
  <option value="126">Hans Meier</option>
  <option value="167">Thomas Müller</option>
  <option value="182">Sabine Schulz</option>
</select>
 
Zuletzt bearbeitet von einem Moderator:

sheel

I love Asm
Hi

a) Etwas machen, das id und Inhalt zusammen speichert.
Java:
class comboboxeintrag {
    public int id;
    public String inhalt;
}
Man kann natürlich auch private/protected nehmen und Getter/Setter dazu machen.

b) toString überschreiben, gibt inhalt zurück.

c) Statt Strings solche comboboxeintrag-Objekte in die JCombobox reintun.
Angezeigt wird inhalt, als Selected bekommt man aber das ganze Objekt mit id.

So ein int-String-Paar gibts sicher schon fertig irgendwo in Java,
hab gerade nur keinen Namen im Kopf...
Selber eins in <10 Zeilen machen tut auch nicht weh.

Wieso vergleichst du eigentlich dauernd Java mit HTML?
Das ist sehr, sehr viel anders.

Gruß
 

chuvak

Erfahrenes Mitglied
Java:
// Kunde
public class Kunde{

    int id, score;
    String name;

    public Kunde(int id, String name, int score) {
        this.id = id;
        this.name= name;
        this.score = score
    }

    public int getID() {
        return id;
    }

    public String getName() {
        return name;
    }

  public String getScore() {
        return score;
    }   
}

// andere Klasse

      for (int i = 0; i < kunde.size(); i++) {
            String id = kunde.get(i).getID() + "";
            String name = kunde.get(i).getName();
            String score= kunde.get(i).getScore() + "";
            
            modelKunde.addRow(new String[]{id, name, score});

            combo.addItem(kunde.get(i).getName()); // Der Name soll in der ComboBox angezeigt werden
        }

 System.out.println(combo.getSelectedItem()....); // Hier soll die dazugehörige ID ausgegeben werden
In der Klasse Kunde kann ich Folgendes nicht machen, weil es keine Methode der Superklasse überschreibt:
Java:
    @Override
   public int toString()
   {
       return id;
   }

Wieso vergleiche ich denn dauernd Java mit HTML? Ich habe es nur als Beispiel aufgeführt, um meine Intention zu verdeutlichen. ;-)
 

sheel

I love Asm
In der Combobox sollen doch die Namen sichtbar sein, nicht die id´s?
Gib bei toString den Namen zurück, Returntyp String.

Wenns doch die id sein soll, trotzdem String als Returntyp
und toString von Integer für die id verwenden.
 

chuvak

Erfahrenes Mitglied
Ok, das habe ich jetzt, aber wie soll ich die ID dann zurückgeben? Wie genau kann ich dann auf die Klasse zugreifen?
Java:
System.out.println(combo.getSelectedItem()....); // Hier soll die dazugehörige ID ausgegeben werden
 
Zuletzt bearbeitet von einem Moderator:

sheel

I love Asm
Java:
System.out.println( ((Kunde)(combo.getSelectedItem())) . id);
 
Zuletzt bearbeitet von einem Moderator: