22

我在面板上使用组合框,据我所知,我们只能添加带有文本的项目

    comboBox.addItem('item text');

但有时我需要使用项目和项目文本的一些值,如 html 选择:

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

有没有办法在组合框项目中同时设置值和标题?

现在我使用哈希来解决这个问题。

4

6 回答 6

48

将值包装在一个类中并覆盖该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();
于 2013-07-26T18:02:52.990 回答
3

您可以将任何对象用作项目。在该对象中,您可以有几个您需要的字段。在您的情况下,值字段。您必须重写 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"));
于 2013-07-26T18:33:28.047 回答
2

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;
    }
}
于 2013-07-26T18:50:53.310 回答
1

创建一个名为 ComboKey​​Value.java 的新类

    public class ComboKeyValue {
        private String key;
        private String value;
    
        public ComboKeyValue(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;
        }
}

当你想添加一个新项目时,只需编写如下代码

 DefaultComboBoxModel model = new DefaultComboBoxModel();
    model.addElement(new ComboKeyValue("key", "value"));
    properties.setModel(model);
于 2020-10-12T02:23:33.460 回答
0

方法调用setSelectedIndex("item_value");不起作用,因为setSelectedIndex使用顺序索引。

于 2015-07-08T21:00:18.893 回答
-1

您可以使用字符串数组添加 jComboBox 项

String [] items = { "First item", "Second item", "Third item", "Fourth item" };

JComboBox comboOne = new JComboBox (items);
于 2020-01-09T07:08:01.117 回答