Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 对象更改时更新JTable中的数据_Java_Swing_Jtable - Fatal编程技术网

Java 对象更改时更新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

假设我有一个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的新实例时,我会将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中。老实说,我不太确定重写方法中应该包含什么。您应该在单元格位置旁边传递新值,仅此而已。