Java Jtable中有一个键和多个值的hashmap?
可以用一个键和多个值实现hashmap,如Java Jtable中有一个键和多个值的hashmap?,java,swing,jtable,hashmap,Java,Swing,Jtable,Hashmap,可以用一个键和多个值实现hashmap,如 Map<Object,ArrayList<Object>> multiMap = new HashMap<Object,ArrayList<Object>>(); Map multiMap=newhashmap(); 在Jtable中?我有这样一个hashmap,但我只能填充两行…例如,您可以使用不同的数据多次输出同一个键 键1:数据1 关键1:数据2 然后将相同的密钥分组。有关如何设置分组模型的详细
Map<Object,ArrayList<Object>> multiMap = new HashMap<Object,ArrayList<Object>>();
Map multiMap=newhashmap();
在Jtable中?我有这样一个hashmap,但我只能填充两行…例如,您可以使用不同的数据多次输出同一个键 键1:数据1
关键1:数据2
然后将相同的密钥分组。有关如何设置分组模型的详细信息,请参阅。键只能与
对象映射。但您始终可以将对象添加到数组列表中作为值显示
Map<Object,ArrayList<Object>> multiMap = new HashMap<Object,ArrayList<Object>>();
Object key ;//key to be searched
Object value ;
if(multiMap.get(key)==null){
ArrayList<Object> arObj = new ArrayList<Object>();
arObj.add(value);
multiMap.put(key,arObj);
}
else{
multiMap.get(key).add(value);
}
Map multiMap=newhashmap();
对象键//要搜索的密钥
目标价值;
如果(multiMap.get(key)==null){
ArrayList arObj=新的ArrayList();
增加(价值);
multiMap.put(key,arObj);
}
否则{
multiMap.get(key).add(value);
}
我有这样一个hashmap,但我只能填充两行
您的TableModel有问题
下面是一个使用以下内容的示例:
Map<Integer, Map<Integer, Object>> data = new HashMap<Integer, HashMap<Integer, Object>>();
Map data=newhashmap();
作为TableModel的数据存储:
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import javax.swing.table.*;
public class TableSparse extends JPanel
{
public TableSparse(int row, int column)
{
setLayout( new BorderLayout() );
TableModel model = new SparseTableModel(row, column);
JTable table = new JTable(model);
table.setAutoResizeMode( JTable.AUTO_RESIZE_OFF );
JScrollPane scrollPane = new JScrollPane( table );
add( scrollPane );
model.setValueAt("one", 0, 0);
model.setValueAt("two", 5, 5);
}
class SparseTableModel extends AbstractTableModel
{
Map<Integer, Map<Integer, Object>> data = new HashMap<Integer, Map<Integer, Object>>();
int rows;
int columns;
public SparseTableModel(int rows, int columns)
{
this.rows = rows;
this.columns = columns;
}
@Override
public int getRowCount() { return rows; }
@Override
public int getColumnCount() { return columns; }
@Override
public boolean isCellEditable(int row, int column) { return true; }
@Override
public Object getValueAt(int row, int column)
{
// Check for row
Integer key = new Integer(row);
Map<Integer, Object> rows = data.get(key);
if (rows == null) return null;
// Now check for column
key = new Integer(column);
return rows.get(key);
}
@Override
public void setValueAt(Object value, int row, int column)
{
// Remove cell data
if (value.toString().equals(""))
{
removeCellData(row, column);
return;
}
// Save cell data
Integer key = new Integer(row);
Map<Integer, Object> rows = data.get(key);
if (rows == null)
{
rows = new HashMap<Integer, Object>();
data.put(key, rows);
}
key = new Integer(column);
rows.put(key, value);
}
private void removeCellData(int row, int column)
{
Integer rowKey = new Integer(row);
Map<Integer, Object> rows = data.get(rowKey);
if (rows == null) return;
Integer columnKey = new Integer(column);
rows.remove(columnKey);
if (rows.isEmpty())
data.remove(rowKey);
}
}
private static void createAndShowGUI()
{
JFrame frame = new JFrame();
frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
frame.add( new TableSparse(100, 256) );
frame.setSize(600, 600);
frame.setVisible(true);
}
public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
createAndShowGUI();
}
});
}
}
import java.awt.*;
导入java.awt.event.*;
导入java.util.*;
导入javax.swing.*;
导入javax.swing.table.*;
公共类表解析扩展了JPanel
{
公共表解析(int行,int列)
{
setLayout(新的BorderLayout());
TableModel model=新的SparseTableModel(行、列);
JTable table=新的JTable(模型);
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
JScrollPane scrollPane=新的JScrollPane(表);
添加(滚动窗格);
model.setValueAt(“一”,0,0);
型号:setValueAt(“2”,5,5);
}
类SparseTableModel扩展了AbstractTableModel
{
映射数据=新的HashMap();
int行;
int列;
公共SparseTableModel(int行、int列)
{
this.rows=行;
this.columns=列;
}
@凌驾
public int getRowCount(){返回行;}
@凌驾
public int getColumnCount(){return columns;}
@凌驾
公共布尔值isCellEditable(int行,int列){return true;}
@凌驾
公共对象getValueAt(int行,int列)
{
//查看行
整数键=新整数(行);
映射行=data.get(键);
if(rows==null)返回null;
//现在检查列
键=新的整数(列);
返回行。get(键);
}
@凌驾
public void setValueAt(对象值,int行,int列)
{
//删除单元格数据
if(value.toString().equals(“”)
{
removeCellData(行、列);
返回;
}
//保存单元格数据
整数键=新整数(行);
映射行=data.get(键);
if(行==null)
{
行=新HashMap();
data.put(键,行);
}
键=新的整数(列);
rows.put(键、值);
}
私有void removeCellData(int行,int列)
{
整数行键=新整数(行);
映射行=data.get(rowKey);
if(rows==null)返回;
Integer columnKey=新的整数(列);
行。删除(列键);
if(rows.isEmpty())
数据删除(rowKey);
}
}
私有静态void createAndShowGUI()
{
JFrame=新JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(新表解析(100256));
框架。设置尺寸(600600);
frame.setVisible(true);
}
公共静态void main(字符串[]args)
{
invokeLater(新的Runnable()
{
公开募捐
{
createAndShowGUI();
}
});
}
}
您应该能够修改代码,以便对模型数据使用ArrayList的HashMap。您所说的“刚好能够填充2行…”是什么意思?很好的示例+1个用于;也请考虑<代码> map < /COD>。@ TrasHead,这是我躺在周围的旧代码(从我第一次学习自定义TabelMelDelm的时候开始),实际上我今天早些时候尝试更新代码,使用泛型代码<代码> MAP<代码>,但是我得到了一个我无法解决的错误。在你的提示下,我又看了一眼,意识到我误读了错误,所以我的问题解决了。代码已更新。谢谢你的鼓励:)