如何用 HashMap 中的数据填充 JTable?

How to fill a JTable with data from a HashMap?

我是 Java 的新手,我想知道如何用 HashMap 数据填充 JTable。在哈希映射中,键是一个整数,值是一个对象数组。我想将散列映射中的数据放入 table,但我不知道如何获取值。

HashMap:

Map<Integer, Object[]> prodList = new HashMap<>();
    
prodList.put(1, new Object[]{"Prod_1", 8000.0, 550}); //name, price, amount
prodList.put(2, new Object[]{"Prod_2", 2300.0, 15});
prodList.put(3, new Object[]{"Prod_3", 2700.0, 15});

我一直在尝试这个:

public TableModel fillTable(Map<?,?> prodList)
{
    DefaultTableModel tableModel = new DefaultTableModel(
            new Object[] {"key", "value"}, 0
    );
    
    for(Map.Entry<?,?> data : prodList.entrySet())
    {
        tableModel.addRow(new Object[] {data.getKey(), data.values()});
    }
    
    return tableModel;
}

但它只是 returns 键和这个:[L] java.lang.Object; @ 1565e42a。我想我必须遍历数组并将所有数组值放入一个新列中,但我不知道该怎么做

I think I have to iterate over the array and put all the array values ​​into a new column,

正确。您可以通过将所有值添加到 Vector,然后将 Vector 添加到模型来完成此操作。

    Iterator<Integer> iter = prodList.keySet().iterator();

    while (iter.hasNext())
    {
        Vector<Object> row = new Vector<>(4);

        Integer key = iter.next();
        row.addElement(key);

        //  Cell represents a row after the inserted row

        Object[] values =  (Object[])prodList.get(key);

        for (Object item: values)
        {
            row.addElement(item);
        }

        System.out.println(row);
        tableModel.addRow( row );
    }

上面的代码应该会创建一个包含 4 个项目的 Vector,第一个是键,最后 3 个是您添加到 HashMap 的数组中的值。

请注意,我很少迭代 HashMap 并且我不记得如何使用 EntrySet,所以我只使用旧的 Iterator

想出如何使用 EntrySet 来做到这一点:

    for(Map.Entry<Integer,Object[]> data : prodList.entrySet())
    {
        Vector<Object> row = new Vector<>(4);
        row.addElement(data.getKey());

        Object[] values = data.getValue();

        for (Object item: values)
        {
            row.addElement(item);
        }

        System.out.println(row);
        tableModel.addRow( row );
    }