将项添加到JComboBox

我在面板上使用了一个combobox,据我所知,我们只能添加带有文本的项目

comboBox.addItem('item text'); 

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

  Item Text 

有没有办法在combobox项目中设置值和标题?

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

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

您可以将任何Object用作项目。 在该对象中,您可以拥有所需的多个字段。 在您的情况下,值字段。 您必须覆盖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(),这就是它显示为标签的内容。

因此,不要将String传递给addItem()。 传入一个对象,其toString()方法返回所需的标签。 该对象也可以包含任意数量的其他数据字段。

尝试将其传递到您的combobox中,看看它是如何呈现的。 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使用顺序索引,所以不起作用。