用一个HashMap(Object)值填充ComboBox

时间:2014-04-06 17:09:14

标签: java netbeans map

我有一个ComboBox,我想填充产品名称。我有一个名为Producto的类,其值为:

private String name;
private String code;
private int price;

所以我创建了一个像这样的HashMap:

Map(Integer, Producto) mapProducto=new HashMap<Integer, Producto>();

我还有一个方法来填充这个HashMap:

Producto stockProducto=new Producto();
stockProducto.setNomProducto("Steel Bike");
stockProducto.setCodeProducto("BIC001");
stockProducto.setPrice(190000);
getMapProducto().put(1, stockProducto);

stockProducto.setNomProducto("Aluminium Bike");
stockProducto.setCodeProducto("BIC002");
stockProducto.setPrice(290000);
getMapProducto().put(1, stockProducto);

之后我填充ComboBox:

Iterator iter=getMapProducto().keySet().iterator();
while(iter.hasNext())
{
this.cboNomProducto.addItem(getMapProducto().get(iter.next()));
}

但是因为它收到了Producto类型的Object,所以它用奇怪的代码填充了Combo,我猜这是代码的内存方向。但我想只使用产品名称填充ComboBox。我怎样才能获得Object Producto的这个值?

提前致谢。

2 个答案:

答案 0 :(得分:0)

您必须覆盖toString。在这里,您只需要返回所需的name。我假设您获得标准toString值,该值将类名与类实例哈希值一起打印。

编辑1: JComboBox始终从插入的对象toString方法中派生显示的文本。它允许定义插入复杂的对象而不仅仅是字符串。你可以查看here。因此,在Producto课程中包含以下方法

public String toString () {
    return name;
}

答案 1 :(得分:0)

试试这个

Iterator iter=getMapProducto().keySet().iterator();
while(iter.hasNext())
{
    this.cboNomProducto.addItem(getMapProducto().get(iter.next()).getNomProducto());
}

<强>详细信息:

getMapProducto().get(iter.next())将返回无法直接设置为组合框的Producto对象,您必须从该对象获取产品名称并添加到组合框中。

修改

Producto stockProducto=new Producto();
stockProducto.setNomProducto("Steel Bike");
stockProducto.setCodeProducto("BIC001");
stockProducto.setPrice(190000);
getMapProducto().put(1, stockProducto);

stockProducto = new Producto(); // You forgot this
stockProducto.setNomProducto("Aluminium Bike");
stockProducto.setCodeProducto("BIC002");
stockProducto.setPrice(290000);
getMapProducto().put(1, stockProducto);

如果您没有创建新的Producto,那么HashMap中的同一个对象会被引用两次而不是Producto