2013-07-26 7 views
14

io uso una casella combinata sul pannello e come so che possiamo aggiungere elementi con il testo unicoAggiunta di elementi a un JComboBox

comboBox.addItem('item text'); 

Ma alcune volte ho bisogno di utilizzare un certo valore del testo oggetto e oggetto simile in html selezionare:

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

C'è un modo per impostare sia il valore che il titolo nella voce della casella combinata?

Per ora utilizzo un hash per risolvere questo problema.

+1

perché tag jruby ??? – nachokk

+0

Lo uso con jruby. Ma sono d'accordo che non ci sono riferimenti al rubino nella mia domanda. –

risposta

31

Avvolgere i valori in una classe e sovrascrivere il metodo 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; 
    } 
} 

Aggiungi ComboItem alla tua casella combinata.

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

Ogni volta che si ottiene l'elemento selezionato.

Object item = comboBox.getSelectedItem(); 
String value = ((ComboItem)item).getValue(); 
+0

Aggiornato per Swing. – JBuenoJr

+0

Grazie, questo è quello che mi serve –

+0

Come posso selezionare un articolo dalla chiave? –

2

È possibile utilizzare qualsiasi oggetto come elemento. In quell'oggetto puoi avere diversi campi di cui hai bisogno. Nel tuo caso il campo del valore. Devi sovrascrivere il metodo toString() per rappresentare il testo. Nel tuo caso "item text". Vedere l'esempio:

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

addItem (Oggetto) accetta un oggetto. Il renderer JComboBox predefinito chiama toString() su quell'oggetto e questo è ciò che mostra come etichetta.

Quindi, non passare una stringa ad addItem(). Passa in un oggetto il cui metodo toString() restituisce l'etichetta desiderata. L'oggetto può contenere anche un numero qualsiasi di altri campi dati.

Provare a passare questo nella tua casella combinata e vedere come esegue il rendering. getSelectedItem() restituirà l'oggetto, che potrai ricondurre a Widget per ottenere il valore da.

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

chiamata al metodo setSelectedIndex("item_value"); non funziona perché indice sequenziale setSelectedIndex uso.