2013-07-26 104 views
14

我使用組合框面板上,當我知道我們可以用純文本添加項目的JComboBox

comboBox.addItem('item text'); 

但有些時候添加項目,我需要使用項目和項目文本類似的一些價值在HTML中進行選擇:

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

有什麼辦法來設置在組合框中項目價值和標題?

現在我使用散列來解決這個問題。

+1

爲什麼是jruby標籤??? – nachokk

+0

我用它與jruby。但我同意在我的問題中沒有提及ruby。 –

回答

31

將值包裝到類中並覆蓋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; 
    } 
} 

將ComboItem添加到您的組合框。

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

每當你得到選定的項目。

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

更新爲Swing。 – JBuenoJr

+0

謝謝,這就是我需要的 –

+0

如何從鑰匙中選擇一個項目? –

2

您可以使用任何對象作爲項目。在那個對象中你可以有幾個你需要的領域。在你的情況下,價值領域。您必須重寫toString()方法來表示文本。在你的情況「項目文本」。請參閱示例:

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(Object)需要一個對象。默認的JComboBox渲染器在該對象上調用toString(),這就是它顯示的標籤。

所以,不要傳入一個字符串addItem()。傳遞一個對象,其toString()方法返回所需的標籤。該對象還可以包含任何數量的其他數據字段。

嘗試將此傳入您的組合框並查看它如何呈現。 getSelectedItem()將返回對象,您可以將其轉回Widget以獲取值。

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

方法調用setSelectedIndex("item_value");不會因爲setSelectedIndex使用順序索引工作。