Класс UndoManager
- Все реализуемые интерфейсы:
Serializable, EventListener, UndoableEditListener, UndoableEdit
public class UndoManager extends CompoundEdit implements UndoableEditListener
UndoManager управляет списком UndoableEdits, предоставляя возможность отменять или повторно выполнять соответствующие изменения. Добавлять изменения в UndoManager можно двумя способами. Добавить изменение напрямую с помощью метода addEdit или добавить UndoManager к компоненту, поддерживающему UndoableEditListener. В следующих примерах создаётся UndoManager и добавляется в качестве UndoableEditListener к JTextField: UndoManager undoManager = new UndoManager(); JTextField tf = ...; tf.getDocument().addUndoableEditListener(undoManager);
UndoManager поддерживает упорядоченный список изменений и индекс следующего изменения в этом списке. Индекс следующего изменения равен либо размеру текущего списка изменений, либо, если был вызван undo, соответствует индексу последнего значимого отменённого изменения. При вызове undo отменяются все изменения от индекса следующего изменения до последнего значимого изменения в обратном порядке. Например, рассмотрим UndoManager, состоящий из следующих изменений: A b c D. Изменения, обозначенные прописными буквами полужирным шрифтом, являются значимыми, а изменения, обозначенные строчными курсивными буквами, — незначимыми.
| |
| Рисунок 1 |
Как показано на рисунке 1, если только что было добавлено D, индекс следующего изменения будет равен 4. Вызов undo приводит к вызову undo для D и установке индекса следующего изменения в 3 (изменение c), как показано на следующем рисунке.
| |
| Рисунок 2 |
Последнее значимое изменение — A, поэтому повторный вызов undo приводит к вызову undo для c, b и A именно в таком порядке и устанавливает индекс следующего изменения в 0, как показано на следующем рисунке.
| |
| Рисунок 3 |
Вызов redo приводит к вызову redo для всех изменений от индекса следующего изменения до следующего значимого изменения (или конца списка). Продолжая предыдущий пример, если бы был вызван redo, то redo был бы вызван для A, b и c. Кроме того, индекс следующего изменения устанавливается в 3 (как показано на рисунке 2).
Добавление изменения в UndoManager приводит к удалению всех изменений от индекса следующего изменения до конца списка. Продолжая предыдущий пример, если добавить новое изменение e, то изменение D будет удалено из списка (после вызова для него die). Если c не включается в следующее изменение (c.addEdit(e) возвращает true) и не заменяется им (e.replaceEdit(c) возвращает true), новое изменение добавляется после c, как показано на следующем рисунке.
| |
| Рисунок 4 |
После вызова end для UndoManager поведение суперкласса используется для всех методов UndoableEdit. Дополнительные сведения о его поведении см. в CompoundEdit.
В отличие от остальной части Swing, этот класс является потокобезопасным.
Предупреждение: сериализованные объекты этого класса несовместимы с будущими версиями Swing. Текущая поддержка сериализации подходит для кратковременного хранения или RMI между приложениями, работающими с одной и той же версией Swing. Начиная с версии 1.4 в пакете java.beans добавлена поддержка длительного хранения всех JavaBeans. См. XMLEncoder.
Краткое описание полей
Поля, объявленные в классе CompoundEdit
edits
Поля, объявленные в классе AbstractUndoableEdit
RedoName, UndoName
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
UndoManager() |
Создаёт новый UndoManager. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
boolean |
addEdit |
Добавляет UndoableEdit в этот UndoManager, если это возможно. |
boolean |
canRedo() |
Возвращает true, если изменения можно повторно выполнить. |
boolean |
canUndo() |
Возвращает true, если изменения можно отменить. |
boolean |
canUndoOrRedo() |
Возвращает true, если можно вызвать undo или redo. |
void |
discardAllEdits() |
Очищает менеджер отмены, отправляя при этом каждому изменению сообщение die. |
protected UndoableEdit |
editToBeRedone() |
Возвращает следующее значимое изменение для повторного выполнения при вызове redo. |
protected UndoableEdit |
editToBeUndone() |
Возвращает следующее значимое изменение для отмены при вызове undo. |
void |
end() |
Преобразует этот UndoManager в обычный CompoundEdit. |
int |
getLimit() |
Возвращает максимальное количество изменений, хранящихся в этом UndoManager. |
String |
getRedoPresentationName() |
Возвращает описание формы этого изменения, допускающей повторное выполнение. |
String |
getUndoOrRedoPresentationName() |
Вспомогательный метод, возвращающий либо getUndoPresentationName, либо getRedoPresentationName. |
String |
getUndoPresentationName() |
Возвращает описание формы этого изменения, допускающей отмену. |
void |
redo() |
Повторно выполняет соответствующие изменения. |
protected void |
redoTo |
Повторно выполняет все изменения от индекса следующего изменения до edit и соответствующим образом обновляет индекс следующего изменения. |
void |
setLimit |
Задаёт максимальное количество изменений, хранящихся в этом UndoManager. |
String |
toString() |
Возвращает строку, отображающую и описывающую свойства этого объекта. |
protected void |
trimEdits |
Удаляет изменения в указанном диапазоне. |
protected void |
trimForLimit() |
Сокращает число изменений в очереди до диапазона заданного размера, центрированного относительно индекса следующего изменения. |
void |
undo() |
Отменяет соответствующие изменения. |
void |
undoableEditHappened |
Метод UndoableEditListener. |
void |
undoOrRedo() |
Вспомогательный метод, вызывающий один из методов undo или redo. |
protected void |
undoTo |
Отменяет все изменения от индекса следующего изменения до edit и соответствующим образом обновляет индекс следующего изменения. |
Методы, объявленные в классе CompoundEdit
die, getPresentationName, isInProgress, isSignificant, lastEdit
Методы, объявленные в классе AbstractUndoableEdit
replaceEdit
Подробное описание конструкторов
UndoManager
public UndoManager()
UndoManager.Подробное описание методов
getLimit
public int getLimit()
UndoManager. Значение меньше 0 означает, что количество изменений не ограничено.- Возвращает:
- максимальное количество изменений, хранящихся в этом
UndoManager - См. также:
discardAllEdits
public void discardAllEdits()
die.- См. также:
trimForLimit
protected void trimForLimit()
trimEdits
protected void trimEdits(int from, int to)
die, после чего они будут удалены из списка изменений. Это не влияет на результат, если from > to.- Параметры:
-
from— минимальный индекс для удаления -
to— максимальный индекс для удаления
setLimit
public void setLimit(int l)
UndoManager. Значение меньше 0 означает, что количество изменений не ограничено. Если для уменьшения ограничения необходимо удалить изменения, для них будет вызван die в порядке, обратном порядку их добавления. Значение по умолчанию — 100.- Параметры:
-
l— новое ограничение - Исключения:
-
RuntimeException— если этотUndoManagerне находится в процессе выполнения (вызванend) - См. также:
editToBeUndone
protected UndoableEdit editToBeUndone()
undo. Возвращает null, если изменений для отмены нет.- Возвращает:
- следующее значимое изменение для отмены
editToBeRedone
protected UndoableEdit editToBeRedone()
redo. Возвращает null, если изменений для повторного выполнения нет.- Возвращает:
- следующее значимое изменение для повторного выполнения
undoTo
protected void undoTo(UndoableEdit edit) throws CannotUndoException
edit и соответствующим образом обновляет индекс следующего изменения.- Параметры:
-
edit— изменение, до которого необходимо выполнить отмену - Исключения:
-
CannotUndoException— если одно из изменений генерируетCannotUndoException
redoTo
protected void redoTo(UndoableEdit edit) throws CannotRedoException
edit и соответствующим образом обновляет индекс следующего изменения.- Параметры:
-
edit— изменение, до которого необходимо повторно выполнить действия - Исключения:
-
CannotRedoException— если одно из изменений генерируетCannotRedoException
undoOrRedo
public void undoOrRedo() throws CannotRedoException, CannotUndoException
undo или redo. Если какие-либо изменения были отменены (индекс следующего изменения меньше длины списка изменений), вызывается redo; в противном случае вызывается undo.- Исключения:
-
CannotUndoException— если одно из изменений генерируетCannotUndoException -
CannotRedoException— если одно из изменений генерируетCannotRedoException - См. также:
canUndoOrRedo
public boolean canUndoOrRedo()
undo или redo.- Возвращает:
- true, если вызов
canUndoOrRedoдопустим - См. также:
undo
public void undo() throws CannotUndoException
end, управление передаётся суперклассу; в противном случае для всех изменений от индекса следующего изменения до последнего значимого изменения вызывается undo, а индекс следующего изменения соответствующим образом обновляется.- Определён в:
-
undoв интерфейсеUndoableEdit - Переопределяет:
-
undoв классеCompoundEdit - Исключения:
-
CannotUndoException— если одно из изменений генерируетCannotUndoExceptionили отсутствуют изменения для отмены - См. также:
canUndo
public boolean canUndo()
end, возвращается значение суперкласса. В противном случае возвращает true, если есть изменения для отмены (editToBeUndone возвращает значение, отличное от null).- Определён в:
-
canUndoв интерфейсеUndoableEdit - Переопределяет:
-
canUndoв классеCompoundEdit - Возвращает:
- true, если есть изменения для отмены
- См. также:
redo
public void redo() throws CannotRedoException
end, управление передаётся суперклассу. В противном случае для всех изменений от индекса следующего изменения до следующего значимого изменения вызывается redo, а индекс следующего изменения соответствующим образом обновляется.- Определён в:
-
redoв интерфейсеUndoableEdit - Переопределяет:
-
redoв классеCompoundEdit - Исключения:
-
CannotRedoException— если одно из изменений генерируетCannotRedoExceptionили отсутствуют изменения для повторного выполнения - См. также:
canRedo
public boolean canRedo()
end, возвращается значение суперкласса. В противном случае возвращает true, если есть изменения для повторного выполнения (editToBeRedone возвращает значение, отличное от null).- Определён в:
-
canRedoв интерфейсеUndoableEdit - Переопределяет:
-
canRedoв классеCompoundEdit - Возвращает:
- true, если есть изменения для повторного выполнения
- См. также:
addEdit
public boolean addEdit(UndoableEdit anEdit)
UndoableEdit в этот UndoManager, если это возможно. Удаляет все изменения от индекса следующего изменения до конца списка изменений. Если был вызван end, изменение не добавляется и возвращается false. Если end не был вызван, возвращается true.- Определён в:
-
addEditв интерфейсеUndoableEdit - Переопределяет:
-
addEditв классеCompoundEdit - Параметры:
-
anEdit— добавляемое изменение - Возвращает:
- true, если
anEditможно включить в это изменение - См. также:
end
public void end()
UndoManager в обычный CompoundEdit. Удаляет все отменённые изменения.- Переопределяет:
-
endв классеCompoundEdit - См. также:
getUndoOrRedoPresentationName
public String getUndoOrRedoPresentationName()
getUndoPresentationName, либо getRedoPresentationName. Если индекс следующего изменения равен размеру списка изменений, возвращается getUndoPresentationName; в противном случае возвращается getRedoPresentationName.- Возвращает:
- название отмены или повторного выполнения
getUndoPresentationName
public String getUndoPresentationName()
end, выполняется вызов метода суперкласса. В противном случае, если есть изменения для отмены, возвращается значение следующего значимого изменения, которое будет отменено. Если изменений для отмены нет и end не был вызван, возвращается значение свойства UIManager "AbstractUndoableEdit.undoText".- Определён в:
-
getUndoPresentationNameв интерфейсеUndoableEdit - Переопределяет:
-
getUndoPresentationNameв классеCompoundEdit - Возвращает:
- описание формы этого изменения, допускающей отмену
- См. также:
getRedoPresentationName
public String getRedoPresentationName()
end, выполняется вызов метода суперкласса. В противном случае, если есть изменения для повторного выполнения, возвращается значение следующего значимого изменения, которое будет повторно выполнено. Если изменений для повторного выполнения нет и end не был вызван, возвращается значение свойства UIManager "AbstractUndoableEdit.redoText".- Определён в:
-
getRedoPresentationNameв интерфейсеUndoableEdit - Переопределяет:
-
getRedoPresentationNameв классеCompoundEdit - Возвращает:
- описание формы этого изменения, допускающей повторное выполнение
- См. также:
undoableEditHappened
public void undoableEditHappened(UndoableEditEvent e)
UndoableEditListener. Вызывает addEdit с e.getEdit().- Определён в:
-
undoableEditHappenedв интерфейсеUndoableEditListener - Параметры:
-
e—UndoableEditEvent, из которого будет добавленоUndoableEditEvent - См. также:
toString
public String toString()
- Переопределяет:
-
toStringв классеCompoundEdit - Возвращает:
- строковое представление этого объекта
© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/25/docs/api/java.desktop/javax/swing/undo/UndoManager.html