 <blockquote> <p>I'm calling tableModel.fireTableCellUpdated(tableRowIndex, tableColumnIndex);</p> </blockquote> <p>That is wrong. You should never invoke the firXXX methods directly. That is the job of the TableModel to invoke the appropriate event when the data is changed.</p> <blockquote> <p>I will update the corresponding icon in that cell.</p> </blockquote> <p>All you need to do is invoke model.setValueAt(...) method to change the Icon and the model will notify the table that data has changed so the table can repaint itself.</p> <blockquote> <p>examTable.repaint(...)</p> </blockquote> <p>Again you should not need to manually invoke repaint on the table </p> <blockquote> <p>But problem comes when I drag and drop the columns from one position to another in Table header. </p> </blockquote> <p>Not sure why you need special code for this if you follow the advice from above. But if for some reason it is still necessary then you need to look at the <code>convertColumnIndex...(...)</code> methods to make sure you are using the proper index for your column.</p>