为什么在编辑JTable单元格时按下escape时未调用cancelCellEditing()?

Epa*_*aga 7 java jtable tablecelleditor

我有一个可编辑的JTable,并设置了一个DefaultCellEditor,如下所示:

    colModel.getColumn( 1 ).setCellEditor( new DefaultCellEditor( txtEditBox ) {
        // ...
        @Override
        public void cancelCellEditing() {
            super.cancelCellEditing();
            // handling the event
        }
        // ...
    }
Run Code Online (Sandbox Code Playgroud)

但是,在编辑此列中的单元格时按下escape时,虽然编辑模式已完成,但不会调用此方法.有什么想法吗?难道我做错了什么?有没有办法处理这个(除了手动添加KeyListener)?

And*_*dré 11

官方方式:您可以注册CellEditorListener:AbstractCellEditor.addCellEditorListener(...).如果取消编辑,则应调用editingCanceled(ChangeEvent e).由于Sun错误 http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6788481,editingCanceled不叫 :(

作为解决方法,您可以为ESCAPE键注册自己的操作并自行处理.但它不适用于调整大小事件.

另一个解决方案(快速和脏;-)):覆盖方法JTable.removeEditor()并在超级调用后插入您的代码.