gpt4 book ai didi

java - JTable单元格更新问题

转载 作者:行者123 更新时间:2023-12-02 05:55:24 25 4
gpt4 key购买 nike

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

我认为我的问题有点棘手,我会尽力解释这一点。

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

我尝试了一下:

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);
}
};

还有:

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();
}

最佳答案

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

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

关于java - JTable单元格更新问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23142142/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com