2017-02-20 74 views
0

我搜索上如何把额外的数据中的JComboBox在Java中,我发现最的结果是创建一个包含属性键和值项目类。jCombo盒隐藏数据的Java

我已经做了,但我仍然有此错误whene我试图在JComboBox中使用`新的项目(键,值)新增项目,

错误代码是:

项目不能转换为字符串 jComboTemp1.addItem(new Item(“CA”,“Canada”));

这里是类项目:

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")); 
+1

发布一个真正的程序,一个[mcve],显示你的问题。您需要将您的JComboBox及其型号更改为“JComboBox '和'DefaultComboBoxModel '类型。然后正确显示重写Item的'toString()',或者给组合框一个渲染器。 –

回答

1

你有几个问题:

public class Item { 

类不使用泛型。

public Item(int id, String description) { 

构造函数期待“int”和“String”。

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

当您创建项目对象,你有两个错误:

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

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

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

如果你不使用泛型,那么你需要正确的参数传递给Item对象:

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

如果你想使用泛型,那么你需要修改Item类使用泛型。

查看Item类找到Combo Box With Hidden Data为通用Item对象。这个对象是一个更完整的实现,因为它也实现了equals(...)hashcode()方法。

从上面的链接使用Item类,如果你想在你的ItemInteger的数据,你可以使用:

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类没有变化。

0

改为:

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)

0

你不提供足够的代码在这里:

什么项目类你使用此:

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

您实例化一个通用类,但你的项目类是没有通用类

下面的代码对我的作品

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")); 
+1

我只创建了一个小例子,但我会更正我的答案 –

+0

*“我会纠正我的答案”*我认为你的答案从来没有'错误'。这里的问题是这个问题需要澄清,因为问题的某些部分的OP意味着2条信息是国家名称的字符串缩写和国名,而问题的其他部分意味着2条是一个基于整数和字符串的国家名称。也许他们需要扩展'Item'来包含*整数**和** 2个字符串*,但最终他们需要决定(&告诉我们)“Item”需要包含的是什么。 –