如何用 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 );
}
我是 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 );
}