2011-09-29 42 views
1

我有一個帶有幾列的JTable,其中一個具有自定義的渲染器,可以在JPanel中顯示3個按鈕以及自定義編輯器以允許它們可點擊。其中一個按鈕向我們的服務器發送刪除命令,然後通過清除數據模型並再次加載數據,從服務器重新加載表格數據。當發生這種情況時,帶有3個按鈕的單元格將繼續顯示(但不包括行的其餘部分),直到我點擊另一行中的另一個按鈕(即使該行不存在)。刪除行時單元格編輯器不退出

我已經設置了putClientProperty("terminateEditOnFocusLost", Boolean.TRUE),但將焦點更改爲另一個組件並沒有幫助。

我已經嘗試在刷新數據之前刪除行本身(甚至刪除了所有行)並確保致電fireTableRowsDeleted()

我也試着調用的cancelCellEditing()stopCellEditing()函數,甚至手動將編輯行/列設置爲另一個單元格。

任何幫助將不勝感激。


好的,所以我想通了。我最終在桌面上打了removeEditor(),並修復了它。

感謝您的回覆。

+2

不知道爲什麼不,在沒有在http://sscce.org/表單中看到您的代碼時發生了什麼錯誤/確實發生了什麼 – mKorbel

回答

-1

好的,所以我想通了。我最終在數據刷新之前在表上調用removeEditor()並修復了它。

感謝您的回覆。

+0

不這麼認爲(猜測涉及到,因爲您沒有顯示任何代碼:-) - 相反,它會繞過編輯器的錯誤行爲:編輯器_must_通知其監聽器它已完成編輯。其中一個列表將是發送數據刷新的代碼。該代碼必須延遲(通過包裝在invokeLater中),直到表內部清理完畢 – kleopatra

1

我已經設置了putClientProperty(「terminateEditOnFocusLost」,Boolean.TRUE),但將焦點改變到另一個組件並沒有幫助。

該方法應該在創建表時調用,而不是在單擊按鈕時在actionPerformed方法中調用。

+0

對不起應該提到它在創建表時設置。 – Ryan

+0

@瑞恩見mKorbel的評論。 – camickr