Spec-Zone.ru › OpenJDK 25

Класс 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. Изменения, обозначенные прописными буквами полужирным шрифтом, являются значимыми, а изменения, обозначенные строчными курсивными буквами, — незначимыми.

Рисунок 1
Рисунок 1

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

Рисунок 2
Рисунок 2

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

Рисунок 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, как показано на следующем рисунке.

Рисунок 4
Рисунок 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 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()
Сокращает число изменений в очереди до диапазона заданного размера, центрированного относительно индекса следующего изменения.
void undo()
Отменяет соответствующие изменения.
void undoableEditHappened(UndoableEditEvent e)
Метод UndoableEditListener.
void undoOrRedo()
Вспомогательный метод, вызывающий один из методов undo или redo.
protected void undoTo(UndoableEdit edit)
Отменяет все изменения от индекса следующего изменения до edit и соответствующим образом обновляет индекс следующего изменения.

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

die, getPresentationName, isInProgress, isSignificant, lastEdit

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

replaceEdit

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

clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait

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

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()
Сокращает число изменений в очереди до диапазона заданного размера, центрированного относительно индекса следующего изменения.

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 в классе CompoundEdit
Возвращает:
строковое представление этого объекта

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по API и документацию для разработчиков см. в документации Java SE, содержащей более подробные описания для разработчиков, обзоры концепций, определения терминов, обходные решения и примеры работающего кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или её аффилированных лиц в США и других странах.
Авторские права © 1993, 2025, 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.
https://docs.oracle.com/en/java/javase/25/docs/api/java.desktop/javax/swing/undo/UndoManager.html

Spec-Zone.ru

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