Класс 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 поддержка долгосрочного хранения всех JavaBeans добавлена в пакет java.beans. См. XMLEncoder.
Краткое описание полей
Поля, объявленные в классе javax.swing.undo.CompoundEdit
edits
Поля, объявленные в классе javax.swing.undo.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, обновляя индекс следующего изменения соответствующим образом. |
Методы, объявленные в классе javax.swing.undo.CompoundEdit
die, getPresentationName, isInProgress, isSignificant, lastEdit
Методы, объявленные в классе javax.swing.undo.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 был вызван, это возвращает значение из super. В противном случае это возвращает 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 был вызван, это возвращает значение из super. В противном случае это возвращает 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. Это удаляет все отменённые правки.- Overrides:
-
endв классеCompoundEdit - См. также:
getUndoOrRedoPresentationName
public String getUndoOrRedoPresentationName()
getUndoPresentationName, либо getRedoPresentationName. Если индекс следующей правки равен размеру списка правок, возвращается getUndoPresentationName, в противном случае возвращается getRedoPresentationName.- Возвращает:
- название отмены или повторения
getUndoPresentationName
public String getUndoPresentationName()
end, этот метод вызывает super. В противном случае, если существуют правки для отмены, он возвращает значение от следующей значимой правки, которая будет отменена. Если нет правок для отмены и end не был вызван, возвращает значение из свойства UIManager "AbstractUndoableEdit.undoText".- Определено в:
-
getUndoPresentationNameв интерфейсеUndoableEdit - Overrides:
-
getUndoPresentationNameв классеCompoundEdit - Возвращает:
- описание отменяемой формы этой правки
- См. также:
getRedoPresentationName
public String getRedoPresentationName()
end, этот метод вызывает super. В противном случае, если существуют правки для повтора, он возвращает значение от следующей значимой правки, которая будет повторена. Если нет правок для повтора и end не был вызван, возвращает значение из свойства UIManager "AbstractUndoableEdit.redoText".- Определено в:
-
getRedoPresentationNameв интерфейсеUndoableEdit - Overrides:
-
getRedoPresentationNameв классеCompoundEdit - Возвращает:
- описание повторяемой формы этой правки
- См. также:
undoableEditHappened
public void undoableEditHappened(UndoableEditEvent e)
UndoableEditListener. Вызывает addEdit с e.getEdit().- Определено в:
-
undoableEditHappenedв интерфейсеUndoableEditListener - Параметры:
-
e-UndoableEditEvent, из которого будет добавленаUndoableEditEvent - См. также:
toString
public String toString()
- Overrides:
-
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://download.java.net/java/early_access/jdk24/docs/api/java.desktop/javax/swing/undo/UndoManager.html