的TableCellEditor如果輸入數據後,忘記敲回車鍵就去點擊其他按鈕或者組件使的editor的焦點離開,會導致輸入數據丟失的情況。...

很多人抱怨Swing的TableCellEditor如果輸入數據後,忘記敲回車鍵就去點擊其他按鈕或者組件使的editor的焦點離開,會導致輸入數據丟失的情況。
 
一種解決方法是對editor增加focusListener在失去焦點時調用stopCellEditing進行處理,不過這種解決方法需要對所有 editor進行添加監聽,也許你會考慮用一個基類做增加監聽的處理,但是還有問題是如果你進行輸入值驗證彈出警告時這種情況也會導致 focusListener接收到lostFocus的事件,難道還得爲這種情況加個狀態標識進行區分lostFoucs的類型。
 
忘記上面愚蠢複雜的解決方案吧,其實很多事情可以很簡單的解決:
table.putClientProperty("terminateEditOnFocusLost", Boolean.True);
 
如果你想了解內部原理可以參考一下JTable源碼中的CellEditorRemover內部類的實現。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章