web-dev-qa-db-fra.com

Ajout d'éléments à une JComboBox

J'utilise une liste déroulante sur le panneau et, comme je le sais, nous pouvons ajouter des éléments contenant uniquement du texte.

    comboBox.addItem('item text');

Mais parfois, je dois utiliser une valeur de l'élément et le texte de l'élément, comme en HTML, sélectionnez:

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

Est-il possible de définir à la fois la valeur et le titre dans un élément de liste déroulante?

Pour l'instant, j'utilise un hash pour résoudre ce problème.

16

Enveloppez les valeurs dans une classe et remplacez la méthode toString().

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;
    }
}

Ajoutez le ComboItem à votre comboBox.

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"));

Chaque fois que vous obtenez l'élément sélectionné.

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

Vous pouvez utiliser n'importe quel objet comme élément. Dans cet objet, vous pouvez avoir plusieurs champs dont vous avez besoin. Dans votre cas, le champ de valeur. Vous devez remplacer la méthode toString () pour représenter le texte. Dans votre cas, "texte de l'article". Voir l'exemple:

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) prend un objet. Le moteur de rendu JComboBox par défaut appelle toString () sur cet objet et correspond au libellé. 

Donc, ne passez pas une chaîne à addItem (). Transmettez un objet dont la méthode toString () renvoie l'étiquette souhaitée. L'objet peut contenir un nombre illimité d'autres champs de données.

Essayez de passer cela dans votre liste déroulante et voyez comment il s'affiche. getSelectedItem () retournera l'objet, que vous pourrez renvoyer à Widget pour obtenir la valeur.

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

L'appel de méthode setSelectedIndex("item_value"); ne fonctionne pas car setSelectedIndex utilise un index séquentiel.

0
user5095843