Java 对象更改时更新JTable中的数据
假设我有一个JTable:Java 对象更改时更新JTable中的数据,java,swing,jtable,Java,Swing,Jtable,假设我有一个JTable: private JScrollPane scrollPane1; private JTable table; private DefaultTableModel model; DefaultTableModel model = new DefaultTableModel(); model.addColumn("Item"); model.addColumn("ID"); model.addColumn("Price"); model.a
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的新实例时,我会将items信息添加到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中。实际上,您没有修改表中的任何单元格,
项目
对象与您的表没有直接关联,您现在可以使用项目
对象中的相同值在表中创建一个值
您需要做的是更新单元格本身,然后从AbstractTableModel
class重写以下方法:
@Override
public void setValueAt(Object value, int row, int col) { //
然后打电话
model.fireTableDataChanged();
你在一张纸(物体)上写5。您还可以在另一张纸(表格模型)上写5。价格发生变化,因此在第一张纸(对象)上擦除5并替换为10。你希望第二张纸(桌子模型)上有10张纸吗?不,这是我问题的重点。如何将单元格中的字符串链接到对象中的字符串?我要做的是完全避免使用DefaultTableModel,并使用AbstractTableModel的自定义子类,该子类将从
列表中获取数据。更新模型会直接修改Item对象。我忘了提到我的项目存储在HashMap中,因为我需要能够使用键获取它们。你有你描述的例子吗?看。用列表替换2D数组,并实现所有必需的方法。我忘了提到我的Item对象存储在HashMap中。老实说,我不太确定重写方法中应该包含什么。您应该在单元格位置旁边传递新值,仅此而已。