我在面板上使用组合框,据我所知,我们只能添加带有文本的项目
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;
}
}
创建一个名为 ComboKeyValue.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);
方法调用setSelectedIndex("item_value");
不起作用,因为setSelectedIndex
使用顺序索引。
您可以使用字符串数组添加 jComboBox 项
String [] items = { "First item", "Second item", "Third item", "Fourth item" };
JComboBox comboOne = new JComboBox (items);