reference:原文
当JTable的单元格处于编辑状态时,如果用户触发以下事件,表格就会退出编辑状态,进而调用TableModel的
public void setValueAt(Object aValue, int row, int column)
1. 回车确认
2. 使用方向键或tab移动到别的单元格
3. 鼠标点击别的单元格
但是,如果用户点击了表格之外的控件,表格中单元格还是处于编辑状态,此时如果点击的是“保存”按钮,由于单元格并没有接受用户的输入,导致当前编辑的单元格的值为null,用户输入的数据没有保存。
同时,由于表格中的所有单元格是共用一个CellEditor,当用户新建一行时,通常会让光标移动到新建的行的某一个单元格,此时原来正在编辑的单元格就会替换到新增加的行中,而之前单元格的输入的内容没有保存。
因此,在触发其他操作之前,最好能够取消表格正在编辑的状态。
方法1.
JTable table = new JTable(...);
table.putClientProperty("terminateEditOnFocusLost", Boolean.TRUE);
当其他控件获取焦点后,表格会停止编辑,但是点击最小化时没有效果。
方法2.
if (table.isEditing())
table.getCellEditor().stopCellEditing();
在需要取消表格编辑状态的按钮等控件的事件响应中根据具体情况来取消表格的编辑状态。
原文说点击表格的表头,使用第一种方法,表格不会退出编辑状态,但是经测试也是会退出编辑状态的。