Ух, какое совпадение - буквально за последний час я реализовал отмену / повтор в моем текстовом редакторе WYSIWYG:
Основная идея - либо сохранить все содержимое текстового редактора в массиве, либо разницу между последним редактированием.
Обновите этот массив в значимых точках, то есть каждые несколько символов (проверяйте длину содержимого при каждом нажатии клавиши, если его значение превышает, скажем, 20 символов, то создайте точку сохранения). Также при изменениях стиля (если форматированный текст), добавления изображений (если это разрешено), вставки текста и т. Д. Вам также нужен указатель (просто переменная int), чтобы указать, какой элемент в массиве является текущим состоянием редактор)
Сделать массив установленной длины. Каждый раз, когда вы добавляете точку сохранения, добавляйте ее в начало массива и перемещайте все остальные точки данных вниз на одну. (последний элемент в массиве будет забыт, когда у вас будет столько точек сохранения)
Когда пользователь нажимает кнопку отмены, проверьте, совпадает ли текущее содержимое редактора с последним сохранением (если нет, то пользователь внес изменения с последней точки сохранения, поэтому сохраните текущее содержимое редактора (чтобы его можно было переделать), сделать редактор равным последней точке сохранения и сделать указатель переменной = 1 (2-й элемент в массиве). Если они одинаковые, изменений не было начиная с последней точки сохранения, поэтому вам нужно отменить к точке до этого. Для этого увеличьте значение указателя + 1 и сделайте содержимое редактора = значением указателя.
Чтобы повторить, просто уменьшите значение указателя на 1 и загрузите содержимое массива (убедитесь, что вы достигли конца массива).
Если пользователь вносит изменения после отмены, переместите ячейку массива указанных значений вверх в ячейку 0 и переместите остальные на ту же величину (вы не хотите возвращаться к другим материалам после того, как они сделали разные правки).
Еще один важный момент - убедитесь, что вы добавляете точку сохранения только в том случае, если содержимое текстового редактора действительно изменилось (в противном случае вы получите дублирующиеся точки сохранения, и вам может показаться, что отмена ничего не делает.
Я не могу помочь вам с особенностями Java, но я рад ответить на любые другие ваши вопросы,
Nico