我搜索了如何在java中将额外的数据放入jComboBox中,我发现的最多结果是创建一个包含属性键和值的项目类。
我已经这样做了,但当我尝试使用“new Item(key, value)”在 jComboBox 中添加项目时,我仍然遇到此错误,
错误代码是:
Item cannot be converted to String jComboTemp1.addItem(new Item("CA", "Canada"));
这是类 Item:
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"));
最佳答案
您有几个问题:
public class Item {
该类不使用泛型。
public Item(int id, String description) {
构造函数需要一个“int”和一个“String”。
jComboTemp1.addItem(new Item<String>("CA", "Canada"));
当您创建 Item 对象时,您有两个错误:
- 您正在尝试使用泛型
- 您传递了错误的参数。
所以你有两个解决方案。您需要:
- 正确使用泛型,或者
- 不要使用泛型。
如果您不使用泛型,那么您需要将正确的参数传递给 Item
对象:
jComboTemp1.addItem(new Item(1, "Canada"));
如果您确实想使用泛型,那么您需要修改 Item
类以使用泛型。
查看 Combo Box With Hidden Data 中找到的 Item
类对于通用 Item
对象。该对象是一个更完整的实现,因为它还实现了 equals(...) 和 hashcode() 方法。
如果您希望在您要使用的 Item
类中包含 Integer
数据,请使用上述链接中的 Item
类:
JComboBox<Item<Integer>> jcomboTemp1 = new JComboBox<Item<Integer>>();
...
jcomboTemp1.addItem(new Item<Integer>(1, "Canada"));
使用通用对象稍微复杂一些,但是您可以通过编译时检查获得额外的安全性,以确保将正确的数据添加到类中。
泛型类更具可重用性。您可以轻松地将代码更改为:
JComboBox<Item<String>> jcomboTemp1 = new JComboBox<Item<String>>();
...
jcomboTemp1.addItem(new Item<String>("CA", "Canada"));
现在该类支持字符串格式的隐藏值,并且不需要对 Item
类进行任何更改。
关于java - jComboBox 与隐藏数据 java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42344510/