I see no problem, no error, TableCellEditor is canceled correctly when sorting and reordering columns,
import java.awt.*; import javax.swing.*; import javax.swing.table.DefaultTableModel; public class TableWithTimer { private static final long serialVersionUID = 1L; private JFrame frame = new JFrame(); private JScrollPane scroll = new JScrollPane(); private JTable myTable; private String[] head = {"One", "Two", "Three", "Four", "Five", "Six"}; private Object[][] data = {{null, null, null, null, null, null}, {null, null, null, null, null, null}, {null, null, null, null, null, null}, {null, null, null, null, null, null}, {null, null, null, null, null, null}, {null, null, null, null, null, null}, {null, null, null, null, null, null}}; private DefaultTableModel model; public TableWithTimer() { model = new DefaultTableModel(data, head) { private static final long serialVersionUID = 1L; @Override public Class<?> getColumnClass(int colNum) { switch (colNum) { case 0: return Integer.class; case 1: return Double.class; case 2: return Long.class; case 3: return Boolean.class; default: return String.class; } } }; myTable = new JTable(model); myTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); myTable.setGridColor(Color.gray); myTable.setFillsViewportHeight(true); myTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); myTable.setAutoCreateRowSorter(true); scroll.setViewportView(myTable); frame.add(scroll, BorderLayout.CENTER); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setLocation(100, 100); frame.pack(); frame.setVisible(true); } public static void main(String args[]) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { TableWithTimer tableWithTimer = new TableWithTimer(); } }); } }