假设我有这个JTable:
private JScrollPane scrollPane1;
private JTable table;
private DefaultTableModel model;
DefaultTableModel model = new DefaultTableModel();
model.addColumn("Item");
model.addColumn("ID");
model.addColumn("Price");
model.addColumn("Category");
this.scrollPane1 = new JScrollPane();
this.scrollPane1.setBounds(33, 518, 604, 300);
this.contentPane.add(this.scrollPane1);
table = new JTable(model);
this.scrollPane1.setViewportView(table);
我有一个Item类,所以当我创建一个Item的新实例时,我将项目信息添加到JTable:
Item item = new Item("Shovel", 1, 123, "Tools");
model.addRow(new Object[]{item.getItem(), item.getID(), item.getPrice(), item.getCategory()});
到目前为止一切顺利。 但是,如果我更新项目,例如将价格从5更改为10,则不会在JTable中更新。所以如果我做的话:
item.setPrice(10);
它在JTable中没有更新。我试过调用model.fireTableDataChanged();和table.repaint();但它们都不起作用。看起来单元格中的值与对象值无关?我该怎么做? (第一次使用JTables。)
有什么建议吗?不要被缺乏方法等困扰,我只是快速地把这个放在一起。 编辑:我的项目对象存储在HashMap中。
答案 0 :(得分:0)
实际上,您没有修改表格中的任何单元格,item
对象没有直接与您的表格关联,您使用item
中的相同值在表格中创建了一个现在的值对象
您需要做的是更新单元格本身,然后从AbstractTableModel
类重写以下方法:
@Override
public void setValueAt(Object value, int row, int col) { //
然后致电
model.fireTableDataChanged();