jCombo框与隐藏数据java

时间:2017-02-20 12:22:46

标签: java swing jcombobox

我已经搜索了如何在java中的jComboBox中添加额外的数据,我发现的最多结果是创建一个包含属性键和值的Item类。

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

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

错误代码是:

  

项无法转换为String           jComboTemp1.addItem(新项目(" CA","加拿大"));

这是课程项目:

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

3 个答案:

答案 0 :(得分:1)

你有几个问题:

public class Item {

该类不使用泛型。

public Item(int id, String description) {

构造函数需要“int”和“String”。

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

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

  1. 您正在尝试使用泛型
  2. 您传递了错误的参数。
  3. 所以你有两个解决方案。你需要:

    1. 正确使用泛型或
    2. 不要使用泛型。
    3. 如果您不使用泛型,则需要将适当的参数传递给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"));  
      

      现在该类支持String格式的隐藏值,并且Item类不需要进行任何更改。

答案 1 :(得分: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)

答案 2 :(得分:0)

这里没有提供足够的代码:

您在这里使用什么Item类:

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

您实例化一个泛型类,但您的Item类不是泛型类

以下代码适用于我

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