java为什么在编辑JTable单元格时按escape键时不调用CancellEditing()?
我有一个可编辑的JTable,并设置了DefaultCellEditor,如下所示:
colModel.getColumn( 1 ).setCellEditor( new DefaultCellEditor( txtEditBox ) {
// ...
@Override
public void cancelCellEditing() {
super.cancelCellEditing();
// handling the event
}
// ...
}
但是,在编辑此列中的单元格时按escape键时,尽管编辑模式已完成,但不会调用此方法。知道为什么吗?我做错什么了吗?有没有办法处理这个问题(除了手动添加一个按键监听器)
# 1 楼答案
我也有这个问题。我写了另一个涉及ActionListener和FocusListener的变通方法。就是这样:
Here你可以找到一个更完整的解决方案
# 2 楼答案
官方方式:你可以注册一个CellEditorListener:AbstractCellEditor。addCellEditorListener(…)。如果编辑被取消,则应调用EditingCancelled(ChangeEvent e)由于太阳虫http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6788481,编辑取消未被调用:(
作为解决方法,您可以注册自己对退出密钥的操作,并自行处理。但它不适用于调整大小事件
另一个解决方案(快速而肮脏;-):覆盖methode JTable。removeEditor()并在超级调用后插入代码