【问题标题】:How to fill a JTable with data from a HashMap?如何用来自 HashMap 的数据填充 JTable?
【发布时间】:2021-08-03 02:43:27
【问题描述】:

我是 Java 新手,我想知道如何用 HashMap 数据填充 JTable。在哈希映射中,键是整数,值是对象数组。我想把hash map中的数据放到表中,但是不知道怎么取值。

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;
}

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

【问题讨论】:

    标签: java swing hashmap jtable


    【解决方案1】:

    我想我必须遍历数组并将所有数组值放入一个新列中,

    正确。为此,您可以将所有值添加到 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 );
        }
    

    【讨论】:

      猜你喜欢
      • 2011-01-12
      • 1970-01-01
      • 2016-05-25
      • 2020-03-14
      • 1970-01-01
      • 1970-01-01
      • 2015-05-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多