带有隐藏数据的 jComboBox java

jCombo Box With Hidden Data java

我在 java 中搜索了如何将额外数据放入 jComboBox 中,我发现的最多结果是创建一个包含属性键和值的项目 Class。

我已经做到了,但是当我尝试使用 `new Item(key, value),

在 jComboBox 中添加项目时,我仍然遇到这个错误

错误代码是:

Item cannot be converted to String jComboTemp1.addItem(new Item("CA", "Canada"));

这是 class 项目:

public class Item {

    private int id;
    private String description;

    public Item(int id, String description) {
        this.id = id;
        this.description = description;
    }

    public int getId() {
        return id;
    }

    public String getDescription() {
        return description;
    }

    @Override
    public String toString() {
        return description;
    }
}

虽然我重写了 toString 方法,但问题还是出现在这里:

jComboTemp1.addItem(new Item<String>("CA", "Canada"));

而不是:

jComboTemp1.addItem(new Item<String>("CA", "Canada"));

使用:

jComboTemp1.addItem("CA");
jComboTemp1.addItem("Canada");

jComboTemp1.addItem(new Item(1, "CA"));
jComboTemp1.addItem(new Item(2, "Canada"));

你有一个构造函数 Item(int, String) 而不是 Item(String)

您在此处提供的代码不足:

您在这里使用什么项目class:

jComboTemp1.addItem(new Item<String>("CA", "Canada"));

您实例化了一个泛型 class 但您的项目 class 不是泛型 class

以下代码对我有用

class Item {
    private final int id;
    private final String name;
    public Item(int id, String name) {
        super();
        this.id = id;
        this.name = name;
    }
    public int getId() {
        return id;
    }
    public String getName() {
        return name;
    }
    @Override
    public String toString() {
        return getName();
    }
 }


JComboBox<Item> combobox = new JComboBox<Item>();       
combobox.addItem(new Item(4711, "name1"));
combobox.addItem(new Item(4712, "name2"));
combobox.addItem(new Item(4713, "name3"));

你有几个问题:

public class Item {

class不使用泛型。

public Item(int id, String description) {

构造函数需要 "int" 和 "String"。

jComboTemp1.addItem(new Item<String>("CA", "Canada"));

创建 Item 对象时有两个错误:

  1. 您正在尝试使用泛型
  2. 你传递了错误的参数。

所以你有两个解决方案。您需要:

  1. 正确使用泛型,或者
  2. 不要使用泛型。

如果您不使用泛型,则需要将适当的参数传递给 Item 对象:

jComboTemp1.addItem(new Item(1, "Canada"));

如果您确实想使用泛型,则需要修改 Item class 以使用泛型。

检查 Item class 在 Combo Box With Hidden Data 中找到的通用 Item 对象。该对象是一个更完整的实现,因为它还实现了 equals(...)hashcode() 方法。

如果您想在 Item class 中包含 Integer 数据,请使用上面 link 中的 Item class使用:

JComboBox<Item<Integer>> jcomboTemp1 = new JComboBox<Item<Integer>>();
...
jcomboTemp1.addItem(new Item<Integer>(1, "Canada"));  

使用通用对象稍微复杂一些,但您可以获得编译时检查的额外安全性,以确保将正确的数据添加到 class。

通用的 class 更可重用。您可以轻松地将代码更改为:

JComboBox<Item<String>> jcomboTemp1 = new JComboBox<Item<String>>();
...
jcomboTemp1.addItem(new Item<String>("CA", "Canada"));  

现在 class 支持字符串格式的隐藏值,并且 Item class.

无需更改