Java JTable单元更新问题

Java JTable单元更新问题,java,swing,jtable,Java,Swing,Jtable,我遇到了一个问题,我无法独自解决,也无法在其他话题的帮助下解决。发现一些非常相似的,但没有帮助 我的问题有点棘手,我想,我会尽力解释清楚 因此,我得到了一个包含两列的JTable,第2列和第3列是可编辑的,第4列是这两列的乘积(col4=col2*col3)。我要做的是,当我编辑第2列或第3列时,第4列将自动更新它的值。我做到了,但还没有完全做到。 只有当我通过鼠标单击完成编辑时,单元格才会更新。如果编辑是按ENTER键完成的,我希望单元格以同样的方式进行反应 我试了一下: if(recipeT

我遇到了一个问题,我无法独自解决,也无法在其他话题的帮助下解决。发现一些非常相似的,但没有帮助

我的问题有点棘手,我想,我会尽力解释清楚

因此,我得到了一个包含两列的JTable,第2列和第3列是可编辑的,第4列是这两列的乘积(col4=col2*col3)。我要做的是,当我编辑第2列或第3列时,第4列将自动更新它的值。我做到了,但还没有完全做到。 只有当我通过鼠标单击完成编辑时,单元格才会更新。如果编辑是按ENTER键完成的,我希望单元格以同样的方式进行反应

我试了一下:

if(recipeTable.getCellEditor()!=null)recipeTable.getCellEditor().stopCellEditing();
但这并没有改变任何事情

这是我的密码:

recipeTableModel = new DefaultTableModel(COLUMN_HEADLINE, 0) {

        @Override
        public boolean isCellEditable(int row, int column) 
        {
            model.updateTotalPriceInTable(recipeTable);
            return (column == 2) || (column == 3);
        }
    };
以及:


重写TableModel的
setValueAt(…)
方法。您可以调用super.setValueAt(…)来正常保存数据


然后,每当第2列或第3列中的数据发生变化时,您就可以计算第4列的值并更新模型。

与默认方法相比,覆盖方法中的实际变化是什么?好的,我算出了,我覆盖setValueAt,如下所示:@bbZ,更新您的问题以显示您使用的代码。不要使用外部链接。@bbz,这不是一个很好的解决方案。您不应该直接访问向量。您不应该调用firstTableDataChanged,因为您没有更改整个模型。我建议您调用
super.setValueAt()
来调用默认代码来更新模型。然后我建议您需要一个
if语句来检查第2/3列是否发生了更改。如果是这样,则计算第4列的值,并为第4列调用super.setValueAt(…)方法。然后它将调用适当的fireXXX方法。
public void updateTotalPriceInTable(JTable table)
{
    double totalPrice;
    DefaultTableModel tableModel = (DefaultTableModel) table.getModel();
    for(int i = 0; i < tableModel.getRowCount(); i++)
    {
        totalPrice = Double.parseDouble(tableModel.getValueAt(i, 2).toString()) * Double.parseDouble(tableModel.getValueAt(i, 3).toString());
        tableModel.setValueAt(totalPrice, i, 4);
    }
    tableModel.fireTableDataChanged();
}
@Override
        public void setValueAt(Object aValue, int row, int column)
        {
        Vector rowVector = (Vector)dataVector.elementAt(row);
        rowVector.setElementAt(aValue, column);
        rowVector.setElementAt(Double.parseDouble((String) rowVector.get(2))*Double.parseDouble((String) rowVector.get(3)), 4);
        fireTableDataChanged();
        }