2012-10-15 65 views
1

我遇到以下問題:我有一個JTable,它在坐在JFrame上的tablemodel上。表模型用自己的散列映射備份以存儲內容。該表有兩列,其中右側是可編輯的。在關閉其未完成編輯的JFrame時保存JTable的內容

通常情況下,用戶在右側改變一些值,然後按下輸入按鈕,觸發調用我的保存功能的tabledatachanged事件。然後框架可以關閉。

但是,有些用戶只是簡單地編輯單元格,然後他們關閉窗口而不按回車,因此我沒有機會保存表格。我知道如何在框架即將關閉時編寫事件,但我不知道如何檢索「未完成」編輯的內容,同時最終確定該編輯。

我想它與celleditors有關,我甚至嘗試過使用table.getCellEditor(),它應該返回活動的那個,但是它會返回null。

感謝您的幫助!

+1

我迷路了,什麼,在哪裏,怎麼樣,請??? – mKorbel

+0

問題是CellEditor,Window或它們的interacion – mKorbel

+2

嘗試table.putClientProperty(「terminateEditOnFocusLost」)如果沒有幫助,請顯示演示問題的SSCCE – kleopatra

回答

6

最簡單的措施就是配置表失去焦點,當儘自己最大的努力:

table.putClientProperty("terminateEditOnFocusLost", Boolean.TRUE); 

不幸的是,有上下文時它的最大努力是不夠好(FI當用戶點擊關閉一幀的按鈕)。在那些沒有辦法,但掛鉤到可能鬆動的編輯和手動強制編輯每個車道停止

if (table.isEditing()) { 
    boolean stopped = table.getCellEditor().stopCellEditing(); 
    if (!stopped) { 
     // here goes error handling and/or cancelling the edit 
    } 
} 

從您的問題描述,

一些用戶只只需編輯單元格,然後他們關閉窗口而不按輸入

我微微一愣的第一工作,本來期望你需要做第二次在一個雙贏dowListener。

又見羅布的blog entry

相關問題