Класс 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 был вызван, это вызывает superclass, в противном случае это вызывает 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 был вызван, это вызывает superclass. В противном случае это вызывает 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. Это удаляет все отменённые редактирования.- Переопределяет:
-
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)
addEdit с e.getEdit().- Определено в:
-
undoableEditHappenedв интерфейсеUndoableEditListener - Параметры:
-
e- событие редактирования, из которого будет добавленоUndoableEditEvent - См. также:
toString
public String toString()
- Переопределяет:
-
toStringв классеCompoundEdit - Возвращает:
- строковое представление этого объекта
© 1993, 2023, 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/21/docs/api/java.desktop/javax/swing/undo/UndoManager.html