[英]JTable cell updating issue
我遇到一個問題,無法單獨解決,也無法借助那里的其他主題解決。 發現一些相似的東西,但沒有幫助。
我的問題有點棘手,我會盡力解釋。
因此,我得到了一個包含幾列的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);
}
};
和:
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列的值並更新模型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.