簡體   English   中英

TableModel.fireTableCellUpdated(tableRowIndex, tableColumnIndex) 不更新 JTable 中的單元格

[英]TableModel.fireTableCellUpdated(tableRowIndex, tableColumnIndex) is not updating the cell in JTable

我的代碼中有一個 JTable。

每當行(基本上是單元格)中的任何特定列有更新時,我都會更新該單元格中的相應圖標。

所以我基本上遵循這些步驟。

第 1 步:我更新模型。

第2步2:我打電話

       tableModel.fireTableCellUpdated(tableRowIndex, tableColumnIndex);

這工作正常。

但是當我將列從表標題中的一個位置拖放到另一個位置時,問題就出現了。 每當對任何特定單元格進行更新時,我都會按照我之前提到的相同步驟進行操作。

問題:我沒有看到圖標被繪制。 但是,如果我將焦點放在表格中該行的頂部,則它正在繪制圖標。

觀察:拖動列后,我看到 tableRowIndex 和 tableColumnIndex 是正確的。

只是為了測試,我在問題場景中添加了這段代碼。

     examTable.repaint(examTable.getCellRect(examTableRowIndex, examTableColumnIndex, true));

這是正確重新繪制單元格。

但這不是我猜的正確解決方案。 我試圖調試代碼我沒有找到太多關於問題的信息

我打電話給 tableModel.fireTableCellUpdated(tableRowIndex, tableColumnIndex);

那是錯的。 永遠不要直接調用 firXXX 方法。 這是 TableModel 的工作,用於在數據更改時調用適當的事件。

我將更新該單元格中的相應圖標。

您需要做的就是調用 model.setValueAt(...) 方法來更改圖標,模型將通知表數據已更改,以便表可以重新繪制自身。

ExamTable.repaint(...)

同樣,您不需要手動調用桌子上的重繪

但是當我將列從表標題中的一個位置拖放到另一個位置時,問題就出現了。

如果您遵循上面的建議,不確定為什么需要特殊代碼。 但是如果由於某種原因仍然有必要,那么您需要查看convertColumnIndex...(...)方法以確保您為您的列使用了正確的索引。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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