簡體   English   中英

JTable單元更新問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM