我有一个 JTable,我在其中添加了一个 DatePickerCellEditor 来编辑日期,方法是覆盖表的 getCellEditor 方法。当我通过在文本框上键入来编辑此单元格时,一切正常,数据已更改。不幸的是,当我按下按钮并从日历中选择一个日期时,日历消失了,但日期没有改变。
这是我的getCellEditor。是有什么问题,还是别的什么?我正在使用 JDK 8。谢谢。
@Override
public TableCellEditor getCellEditor(int row, int column) {
TableCellEditor ret;
//column = convertColumnIndexToModel(column);
if ((column == 1 || column == 2) && getModel().getValueAt(row, column) != null) {
Class rowClass = getModel().getValueAt(row, column).getClass();
if (rowClass.equals(Integer.class)) {
return new SpinnerCellEditor();
} else if (rowClass.equals(Date.class)) {
return new DatePickerCellEditor();
} else {
return getDefaultEditor(rowClass);
}
} else {
return super.getCellEditor(row, column);
}
}
问题似乎是表上的终止编辑焦点丢失属性。似乎它迫使DatePickerCellEditor在从日历弹出窗口接收更新之前关闭编辑。
我刚刚从配置 JTable 的代码中注释了以下行,它开始正常工作。
listaFiltragem.putClientProperty("terminateEditOnFocusLost", Boolean.TRUE);