将项添加到JComboBox

时间:2013-07-26 17:56:30

标签: java swing jcombobox

我在面板上使用了一个组合框,据我所知,我们可以添加仅包含文本的项目

    comboBox.addItem('item text');

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

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

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

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

6 个答案:

答案 0 :(得分:33)

将值包装在类中并覆盖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。

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

答案 1 :(得分: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"));

答案 2 :(得分:1)

addItem(Object)接受一个对象。默认的JComboBox渲染器调用该对象上的toString(),这就是它显示为标签的内容。

因此,不要将String传递给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;
    }
}

答案 3 :(得分:0)

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

答案 4 :(得分:0)

创建一个名为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);

答案 5 :(得分:-1)

您可以使用String数组添加jComboBox项

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

JComboBox comboOne = new JComboBox (items);
相关问题