Класс 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 | Модификатор и тип | Поле | Описание |
|---|---|---|
protected Vector |
edits |
Коллекция UndoableEdits, отменённых/повторённых одновременно этим CompoundEdit. |
Поля, объявленные в классе AbstractUndoableEdit
RedoName, UndoName | Модификатор и тип | Поле | Описание |
|---|---|---|
protected static final String |
RedoName |
Строка, возвращаемая методом getRedoPresentationName; начиная с Java 2 platform v1.3.1 это поле больше не используется. |
protected static final String |
UndoName |
Строка, возвращаемая методом getUndoPresentationName; начиная с Java 2 platform v1.3.1 это поле больше не используется. |
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
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() |
Сокращает количество изменений в очереди до диапазона размером limit, центрированного относительно индекса следующего изменения. |
void |
undo() |
Отменяет соответствующие изменения. |
void |
undoableEditHappened |
Метод UndoableEditListener. |
void |
undoOrRedo() |
Вспомогательный метод, вызывающий один из методов: undo или redo. |
protected void |
undoTo |
Отменяет все изменения от индекса следующего изменения до edit, соответствующим образом обновляя индекс следующего изменения. |
Методы, объявленные в классе CompoundEdit
die, getPresentationName, isInProgress, isSignificant, lastEdit | Модификатор и тип | Метод | Описание |
|---|---|---|
void |
die() |
Отправляет die каждому вложенному изменению в обратном порядке их добавления. |
String |
getPresentationName() |
Возвращает getPresentationName последнего UndoableEdit, добавленного в edits. |
boolean |
isInProgress() |
Возвращает true, если изменение выполняется, то есть для него ещё не был вызван метод end. |
boolean |
isSignificant() |
Возвращает true, если это верно хотя бы для одного из UndoableEdits в edits. |
protected UndoableEdit |
lastEdit() |
Возвращает последнее UndoableEdit в edits или null, если edits пуст. |
Методы, объявленные в классе AbstractUndoableEdit
replaceEdit | Модификатор и тип | Метод | Описание |
|---|---|---|
boolean |
replaceEdit |
Реализация по умолчанию возвращает false. |
Методы, объявленные в классе Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait | Модификатор и тип | Метод | Описание |
|---|---|---|
protected Object |
clone() |
Создаёт и возвращает копию этого объекта. |
boolean |
equals |
Определяет, равен ли этот объект другому объекту. |
protected void |
finalize() |
Устарело, подлежит удалению: этот элемент API может быть удалён в будущей версии. Финализация объявлена устаревшей и может быть удалена в одном из будущих выпусков. |
final Class |
getClass() |
Возвращает класс времени выполнения этого Object. |
int |
hashCode() |
Возвращает хеш-код этого объекта. |
final void |
notify() |
Пробуждает один поток, ожидающий на мониторе этого объекта. |
final void |
notifyAll() |
Пробуждает все потоки, ожидающие на мониторе этого объекта. |
final void |
wait() |
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt. |
final void |
wait |
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt, либо истечения заданного интервала реального времени. |
final void |
wait |
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt, либо истечения заданного интервала реального времени. |
Подробное описание конструкторов
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()
- Переопределяет:
-
toStringin classCompoundEdit - Возвращает:
- строковое представление этого объекта
© 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.