我使用組合框面板上,當我知道我們可以用純文本添加項目的JComboBox
comboBox.addItem('item text');
但有些時候添加項目,我需要使用項目和項目文本類似的一些價值在HTML中進行選擇:
<select><option value="item_value">Item Text</option></select>
有什麼辦法來設置在組合框中項目價值和標題?
現在我使用散列來解決這個問題。
我使用組合框面板上,當我知道我們可以用純文本添加項目的JComboBox
comboBox.addItem('item text');
但有些時候添加項目,我需要使用項目和項目文本類似的一些價值在HTML中進行選擇:
<select><option value="item_value">Item Text</option></select>
有什麼辦法來設置在組合框中項目價值和標題?
現在我使用散列來解決這個問題。
將值包裝到類中並覆蓋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();
您可以使用任何對象作爲項目。在那個對象中你可以有幾個你需要的領域。在你的情況下,價值領域。您必須重寫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"));
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;
}
}
方法調用setSelectedIndex("item_value");
不會因爲setSelectedIndex
使用順序索引工作。
爲什麼是jruby標籤??? – nachokk
我用它與jruby。但我同意在我的問題中沒有提及ruby。 –