Spec-Zone.ru › OpenJDK 21

Класс 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 добавлена поддержка долгосрочного хранения всех JavaBeans в пакет java.beans. См. XMLEncoder.

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

Поля, объявленные в классе javax.swing.undo.CompoundEdit

edits

Поля, объявленные в классе javax.swing.undo.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, обновляя индекс следующей правки соответственно.

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

die, getPresentationName, isInProgress, isSignificant, lastEdit

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

replaceEdit

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

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

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

UndoManager

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

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

getLimit

public int getLimit()
Возвращает максимальное количество редактирований, которое хранит этот UndoManager. Значение меньше 0 указывает на то, что количество редактирований не ограничено.
Возвращает:
максимальное количество редактирований, которое хранит этот UndoManager
См. также:
  • addEdit(javax.swing.undo.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(javax.swing.undo.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 был вызван, это вызывает superclass, в противном случае это вызывает undo на всех редактированиях между индексом следующего редактирования и последним значимым редактированием, обновляя индекс следующего редактирования соответствующим образом.
Спецификация:
undo в интерфейсе UndoableEdit
Переопределяет:
undo в классе CompoundEdit
Исключения:
CannotUndoException - если одно из редактирований выбрасывает CannotUndoException или нет редактирований для отмены
См. также:
  • CompoundEdit.end()
  • canUndo()
  • editToBeUndone()

canUndo

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

redo

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

canRedo

public boolean canRedo()
Возвращает true, если редактирования могут быть повторно выполнены. Если end был вызван, это возвращает значение от super. В противном случае это возвращает 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(javax.swing.undo.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)
Метод-утилита. Вызывает addEdit с e.getEdit().
Определено в:
undoableEditHappened в интерфейсе UndoableEditListener
Параметры:
e - событие редактирования, из которого будет добавлено UndoableEditEvent
См. также:
  • addEdit(javax.swing.undo.UndoableEdit)

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

Spec-Zone.ru

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