如何从单元格中保存新值,而不是旧单元格?

时间:2011-02-17 23:14:15

标签: java swing jtable

我在JScrollPane中有一个JTable,数据来自数据库。单元格是可编辑的,我想将新值(已编辑的值)保存在数据库中。问题是 getValueAt(row,col)返回旧的未编辑的值。

以下是从单元格中获取值并将其插入数据库的代码。

    DefaultTableModel tableModel = (DefaultTableModel) table.getModel();
    int row = table.getEditingRow();
    if(row == -1) return -1;
    String name = tableModel.getValueAt(row, 0).toString();
    String stringPrice = tableModel.getValueAt(row, 1).toString();
    float price = Float.parseFloat(stringPrice);
    products.updateProduct(name, price);
    ...
    return 1;

以下是 updateProduct(名称,价格)方法中的内容:

UPDATE products
SET `prod_name` = 'OLD_NAME', `prod_price` = 'OLD_PRICE'
WHERE `id` = 4

而不是:

UPDATE products
SET `prod_name` = 'NEW_NAME', `prod_price` = 'NEW_PRICE'
WHERE `id` = 4

可能有一个简单的解决方案,但我无法弄清楚。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:1)

如果不确切知道你的代码是如何被调用的,我猜你的问题是单元格编辑器还没有被停止,所以模型还没有用新数据更新。

当单元格中的数据发生更改时,您可以使用TableModelListener进行通知。然后保证模型中的数据是正确的。

或者,如果您使用“保存”按钮更新数据库,则需要阅读Table Stop Editing以解决问题。

答案 1 :(得分:-1)

您可以实现自己的单元格编辑器,并使用其当前值而不是模型中的值(如果它处于活动状态)