package gsingh.learnkirtan.ui.shabadeditor.tableeditor; import javax.swing.event.UndoableEditEvent; import javax.swing.event.UndoableEditListener; import javax.swing.table.DefaultTableModel; @SuppressWarnings("serial") public class UndoTableModel extends DefaultTableModel { public void setValueAt(Object value, int row, int column, boolean undoable) { UndoableEditListener listeners[] = getListeners(UndoableEditListener.class); if (value != null) { value = ((String) value).trim(); } if (undoable == false || listeners == null) { super.setValueAt(value, row, column); return; } Object oldValue = getValueAt(row, column); if (oldValue == null && value != null && value.equals("")) { return; } super.setValueAt(value, row, column); CellEdit cellEdit = new CellEdit(this, oldValue, value, row, column); UndoableEditEvent editEvent = new UndoableEditEvent(this, cellEdit); for (UndoableEditListener listener : listeners) listener.undoableEditHappened(editEvent); } @Override public void setValueAt(Object value, int row, int column) { setValueAt(value, row, column, true); } public void addUndoableEditListener(UndoableEditListener listener) { listenerList.add(UndoableEditListener.class, listener); } }