今天發現當我在 JTable 編輯 cell 時,直接按 button 儲存 JTable 內的值,結果最後一個 cell 卻沒有資料。最後發現當 JTable focus lost 時,並不會去執行 setValueAt,造成最後一個 cell 的值沒有被儲存。

上 google 查詢,發現很多人都在 JTable 加一個 FocusListener 去處理。

table = new JTable(); table.addFocusListener(new FocusListener() { public void focusGained(FocusEvent e) { } public void focusLost(FocusEvent e) { if (table.isEditing()) table.getCellEditor().stopCellEditing(); } });

但是上面方法很麻煩,而且又要多一個 class。最後發現一個更簡單的方法,只要設定 terminateEditOnFocusLost 為 true 即可。

table = new JTable(); table.putClientProperty("terminateEditOnFocusLost", true);

JAVA 的文件都沒有寫到這一點,也不知這個答案誰找出來,也有人提到去看一下 JTable 裏面的 CellEditorRemover 就知道了。

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()