Spec-Zone.ru › OpenJDK 27

Класс UndoManager

java.lang.Object
javax.swing.undo.AbstractUndoableEdit
javax.swing.undo.CompoundEdit
javax.swing.undo.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. Правки, обозначенные жирными заглавными буквами, являются значимыми, а обозначенные строчными курсивными буквами — незначимыми.

Figure 1
Рисунок 1

Как показано на рисунке 1, если только что добавлена правка D, индекс следующей правки будет равен 4. Вызов undo приводит к вызову undo для D и установке индекса следующей правки в значение 3 (правка c), как показано на следующем рисунке.

Figure 2
Рисунок 2

Последняя значимая правка — A, поэтому повторный вызов undo приводит к вызову undo для c, b и A именно в таком порядке и устанавливает индекс следующей правки в значение 0, как показано на следующем рисунке.

Figure 3
Рисунок 3

Вызов redo приводит к вызову redo для всех правок между индексом следующей правки и следующей значимой правкой (или концом списка). Продолжая предыдущий пример, если бы был вызван redo, то redo последовательно вызывался бы для A, b и c. Кроме того, индекс следующей правки устанавливается в значение 3 (как показано на рисунке 2).

Добавление правки в UndoManager приводит к удалению всех правок от индекса следующей правки до конца списка. Продолжая предыдущий пример, если добавить новую правку e, правка D будет удалена из списка (после вызова для нее die). Если следующая правка не включает в себя c (c.addEdit(e) возвращает true) и не заменяет ее (e.replaceEdit(c) возвращает true), новая правка добавляется после c, как показано на следующем рисунке.

Figure 4
Рисунок 4

После вызова end для UndoManager поведение суперкласса используется для всех методов UndoableEdit. Подробнее о его поведении см. в CompoundEdit.

В отличие от остальных классов Swing, этот класс является потокобезопасным.

Предупреждение: Сериализованные объекты этого класса будут несовместимы с будущими выпусками Swing. Текущая поддержка сериализации предназначена для кратковременного хранения или обмена данными посредством RMI между приложениями, работающими с одной и той же версией Swing. Начиная с версии 1.4 в пакете java.beans добавлена поддержка долгосрочного хранения всех JavaBeans. См. XMLEncoder.

Краткое описание полей

Поля, объявленные в классе CompoundEdit

edits
Модификатор и тип Поле Описание
protected Vector<UndoableEdit> 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 anEdit)
Добавляет 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(UndoableEdit edit)
Повторяет все изменения от индекса следующего изменения до edit, соответствующим образом обновляя индекс следующего изменения.
void setLimit(int l)
Задаёт максимальное количество изменений, хранящихся в этом UndoManager.
String toString()
Возвращает строку, отображающую свойства этого объекта и идентифицирующую его.
protected void trimEdits(int from, int to)
Удаляет изменения в указанном диапазоне.
protected void trimForLimit()
Сокращает количество изменений в очереди до диапазона размером limit, центрированного относительно индекса следующего изменения.
void undo()
Отменяет соответствующие изменения.
void undoableEditHappened(UndoableEditEvent e)
Метод UndoableEditListener.
void undoOrRedo()
Вспомогательный метод, вызывающий один из методов: undo или redo.
protected void undoTo(UndoableEdit edit)
Отменяет все изменения от индекса следующего изменения до 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(UndoableEdit anEdit)
Реализация по умолчанию возвращает false.

Методы, объявленные в классе Object

clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
Модификатор и тип Метод Описание
protected Object clone()
Создаёт и возвращает копию этого объекта.
boolean equals(Object obj)
Определяет, равен ли этот объект другому объекту.
protected void finalize()
Устарело, подлежит удалению: этот элемент API может быть удалён в будущей версии.
Финализация объявлена устаревшей и может быть удалена в одном из будущих выпусков.
final Class<?> getClass()
Возвращает класс времени выполнения этого Object.
int hashCode()
Возвращает хеш-код этого объекта.
final void notify()
Пробуждает один поток, ожидающий на мониторе этого объекта.
final void notifyAll()
Пробуждает все потоки, ожидающие на мониторе этого объекта.
final void wait()
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt.
final void wait(long timeoutMillis)
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt, либо истечения заданного интервала реального времени.
final void wait(long timeoutMillis, int nanos)
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt, либо истечения заданного интервала реального времени.

Подробное описание конструкторов

UndoManager

public UndoManager()
Создает новый UndoManager.

Подробное описание методов

getLimit

public int getLimit()
Возвращает максимальное количество правок, хранящихся в этом UndoManager. Значение меньше 0 означает, что количество правок не ограничено.
Возвращает:
максимальное количество правок, хранящихся в этом UndoManager
См. также:
  • addEdit(UndoableEdit)
  • setLimit(int)

discardAllEdits

public void discardAllEdits()
Очищает менеджер отмены, отправляя при этом каждой правке сообщение die.
См. также:
  • AbstractUndoableEdit.die()

trimForLimit

protected void trimForLimit()
Сокращает количество правок в очереди до диапазона размером limit, центрированного относительно индекса следующей правки.

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)
См. также:
  • CompoundEdit.isInProgress()
  • end()
  • addEdit(UndoableEdit)
  • getLimit()

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()
  • getUndoOrRedoPresentationName()

canUndoOrRedo

public boolean canUndoOrRedo()
Возвращает true, если можно вызвать undo или redo.
Возвращает:
true, если вызов canUndoOrRedo допустим
См. также:
  • undoOrRedo()

undo

public void undo() throws CannotUndoException
Отменяет соответствующие правки. Если был вызван end, этот метод делегирует вызов суперклассу; в противном случае вызывает undo для всех правок между индексом следующей правки и последней значимой правкой, соответствующим образом обновляя индекс следующей правки.
Определено в:
undo в интерфейсе UndoableEdit
Переопределяет:
undo в классе CompoundEdit
Вызывает исключение:
CannotUndoException — если одна из правок вызывает CannotUndoException или отсутствуют правки для отмены
См. также:
  • CompoundEdit.end()
  • canUndo()
  • editToBeUndone()

canUndo

public boolean canUndo()
Возвращает true, если правки можно отменить. Если был вызван end, возвращает значение суперкласса. В противном случае возвращает true, если есть правки для отмены (editToBeUndone возвращает значение, отличное от null).
Определено в:
canUndo в интерфейсе UndoableEdit
Переопределяет:
canUndo в классе CompoundEdit
Возвращает:
true, если есть правки для отмены
См. также:
  • CompoundEdit.canUndo()
  • editToBeUndone()

redo

public void redo() throws CannotRedoException
Повторно применяет соответствующие правки. Если был вызван end, этот метод делегирует вызов суперклассу. В противном случае вызывает redo для всех правок между индексом следующей правки и следующей значимой правкой, соответствующим образом обновляя индекс следующей правки.
Определено в:
redo в интерфейсе UndoableEdit
Переопределяет:
redo в классе CompoundEdit
Вызывает исключение:
CannotRedoException — если одна из правок вызывает CannotRedoException или отсутствуют правки для повтора
См. также:
  • CompoundEdit.end()
  • canRedo()
  • editToBeRedone()

canRedo

public boolean canRedo()
Возвращает true, если правки можно повторить. Если был вызван end, возвращает значение суперкласса. В противном случае возвращает true, если есть правки для повтора (editToBeRedone возвращает значение, отличное от null).
Определено в:
canRedo в интерфейсе UndoableEdit
Переопределяет:
canRedo в классе CompoundEdit
Возвращает:
true, если есть правки для повтора
См. также:
  • CompoundEdit.canRedo()
  • editToBeRedone()

addEdit

public boolean addEdit(UndoableEdit anEdit)
Добавляет UndoableEdit в этот UndoManager, если это возможно. Удаляет все правки от индекса следующей правки до конца списка правок. Если был вызван end, правка не добавляется и возвращается false. Если end не был вызван, возвращает true.
Определено в:
addEdit в интерфейсе UndoableEdit
Переопределяет:
addEdit в классе CompoundEdit
Параметры:
anEdit — добавляемая правка
Возвращает:
true, если anEdit можно включить в эту правку
См. также:
  • CompoundEdit.end()
  • CompoundEdit.addEdit(UndoableEdit)

end

public void end()
Преобразует этот UndoManager в обычный CompoundEdit. Удаляет все отмененные правки.
Переопределяет:
end в классе CompoundEdit
См. также:
  • CompoundEdit.end()

getUndoOrRedoPresentationName

public String getUndoOrRedoPresentationName()
Вспомогательный метод, возвращающий либо getUndoPresentationName, либо getRedoPresentationName. Если индекс следующей правки равен размеру списка правок, возвращается getUndoPresentationName, в противном случае возвращается getRedoPresentationName.
Возвращает:
название отмены или повтора

getUndoPresentationName

public String getUndoPresentationName()
Возвращает описание формы этой правки, которую можно отменить. Если был вызван end, делегирует вызов суперклассу. В противном случае, если есть правки для отмены, возвращает значение следующей значимой правки, которая будет отменена. Если правок для отмены нет и end не был вызван, возвращает значение свойства UIManager "AbstractUndoableEdit.undoText".
Определено в:
getUndoPresentationName в интерфейсе UndoableEdit
Переопределяет:
getUndoPresentationName в классе CompoundEdit
Возвращает:
описание формы этой правки, которую можно отменить
См. также:
  • undo()
  • CompoundEdit.getUndoPresentationName()

getRedoPresentationName

public String getRedoPresentationName()
Возвращает описание формы этой правки, которую можно повторить. Если был вызван end, делегирует вызов суперклассу. В противном случае, если есть правки для повтора, возвращает значение следующей значимой правки, которая будет повторена. Если правок для повтора нет и end не был вызван, возвращает значение свойства UIManager "AbstractUndoableEdit.redoText".
Определено в:
getRedoPresentationName в интерфейсе UndoableEdit
Переопределяет:
getRedoPresentationName в классе CompoundEdit
Возвращает:
описание формы этой правки, которую можно повторить
См. также:
  • redo()
  • CompoundEdit.getRedoPresentationName()

undoableEditHappened

public void undoableEditHappened(UndoableEditEvent e)
Метод UndoableEditListener. Вызывает addEdit с аргументом e.getEdit().
Определено в:
undoableEditHappened в интерфейсе UndoableEditListener
Параметры:
e — UndoableEditEvent, из которого будет добавлена UndoableEditEvent
См. также:
  • addEdit(UndoableEdit)

toString

public String toString()
Возвращает строку, отображающую свойства этого объекта и идентифицирующую его.
Переопределяет:
toString in class CompoundEdit
Возвращает:
строковое представление этого объекта

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по API и документацию для разработчиков см. в разделе Документация Java SE, содержащем более подробные описания для разработчиков, концептуальные обзоры, определения терминов, обходные решения и рабочие примеры кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или ее аффилированных лиц в США и других странах.
Авторские права © 1993, 2026, Oracle и/или ее аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 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.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API