it-swarm.com.de

Elemente zu einer JComboBox hinzufügen

Ich verwende ein Kombinationsfeld auf dem Panel und ich weiß, dass wir Elemente nur mit dem Text hinzufügen können

    comboBox.addItem('item text');

Aber manchmal muss ich einen bestimmten Wert des Elements und des Elementtextes verwenden, wie in HTML-Auswahl:

    <select><option value="item_value">Item Text</option></select>

Gibt es eine Möglichkeit, den Wert und den Titel in einem Kombinationsfeldelement festzulegen?

Im Moment verwende ich einen Hash, um dieses Problem zu lösen.

16

Wickeln Sie die Werte in eine Klasse ein und überschreiben Sie die toString()-Methode.

class ComboItem
{
    private String key;
    private String value;

    public ComboItem(String key, String value)
    {
        this.key = key;
        this.value = value;
    }

    @Override
    public String toString()
    {
        return key;
    }

    public String getKey()
    {
        return key;
    }

    public String getValue()
    {
        return value;
    }
}

Fügen Sie das ComboItem Ihrer ComboBox hinzu.

comboBox.addItem(new ComboItem("Visible String 1", "Value 1"));
comboBox.addItem(new ComboItem("Visible String 2", "Value 2"));
comboBox.addItem(new ComboItem("Visible String 3", "Value 3"));

Wann immer Sie den ausgewählten Artikel erhalten.

Object item = comboBox.getSelectedItem();
String value = ((ComboItem)item).getValue();
33
JBuenoJr

Sie können jedes Objekt als Element verwenden. In diesem Objekt können Sie mehrere Felder haben, die Sie benötigen. In Ihrem Fall das Wertefeld. Sie müssen die toString () -Methode überschreiben, um den Text darzustellen. In Ihrem Fall "Artikeltext". Siehe das Beispiel:

public class AnyObject {

    private String value;
    private String text;

    public AnyObject(String value, String text) {
        this.value = value;
        this.text = text;
    }

...

    @Override
    public String toString() {
        return text;
    }
}

comboBox.addItem(new AnyObject("item_value", "item text"));
2
Ataul Ahmad

addItem (Object) nimmt ein Objekt. Der Standard-JComboBox-Renderer ruft toString () für dieses Objekt auf und zeigt dies als Bezeichnung. 

Übergeben Sie also keinen String an addItem (). Übergeben Sie ein Objekt, dessen toString () -Methode die gewünschte Bezeichnung zurückgibt. Das Objekt kann auch eine beliebige Anzahl anderer Datenfelder enthalten.

Übergeben Sie dies in Ihre Combobox und sehen Sie, wie sie dargestellt wird. getSelectedItem () gibt das Objekt zurück, das Sie in Widget umwandeln können, um den Wert zu erhalten.

public final class Widget {
    private final int value;
    private final String label;

    public Widget(int value, String label) {
        this.value = value;
        this.label = label;
    }

    public int getValue() {
        return this.value;
    }

    public String toString() {
        return this.label;
    }
}
1
Eric Stein

Der Methodenaufruf setSelectedIndex("item_value"); funktioniert nicht, da setSelectedIndex den sequenziellen Index verwendet.

0
user5095843