Класс 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, если 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() | Создает новый |
Методы
| Модификатор и тип | Метод | Описание |
|---|---|---|
boolean | addEdit(UndoableEdit anEdit) | Добавляет |
boolean | canRedo() | Возвращает true, если изменения можно повторить. |
boolean | canUndo() | Возвращает true, если изменения можно отменить. |
boolean | canUndoOrRedo() | Возвращает true, если можно вызвать методы |
void | discardAllEdits() | Очищает менеджер отмены, отправляя каждому изменению сообщение |
protected UndoableEdit | editToBeRedone() | Возвращает следующее значимое изменение для повтора, если вызван метод |
protected UndoableEdit | editToBeUndone() | Возвращает следующее значимое изменение для отмены, если вызван метод |
void | end() | Преобразует этот |
int | getLimit() | Возвращает максимальное количество изменений, которые хранит этот |
String | getRedoPresentationName() | Возвращает описание повторимой формы этого изменения. |
String | getUndoOrRedoPresentationName() | Удобный метод, возвращающий либо |
String | getUndoPresentationName() | Возвращает описание отменяемой формы этого изменения. |
void | redo() | Повторяет соответствующие изменения. |
protected void | redoTo(UndoableEdit edit) | Повторяет все изменения от индекса следующего изменения до |
void | setLimit(int l) | Устанавливает максимальное количество изменений, которые хранит этот |
String | toString() | Возвращает строку, отображающую и идентифицирующую свойства этого объекта. |
protected void | trimEdits(int from,
int to) | Удаляет изменения в указанном диапазоне. |
protected void | trimForLimit() | Уменьшает количество ожидаемых изменений до диапазона размера ограничения, центрированного на индексе следующего изменения. |
void | undo() | Отменяет соответствующие изменения. |
void | undoableEditHappened(UndoableEditEvent e) | Метод |
void | undoOrRedo() | Удобный метод, вызывающий один из методов |
protected void | undoTo(UndoableEdit 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 был вызван, это обращается к суперклассу, в противном случае это вызывает 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(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)
Метод UndoableEditListener. Вызывает addEdit с e.getEdit().
- Указано:
-
undoableEditHappenedв интерфейсеUndoableEditListener - Параметры:
-
e-UndoableEditEvent, из которого будет добавленUndoableEditEvent - См. также:
addEdit(javax.swing.undo.UndoableEdit)
toString
public String toString()
Возвращает строку, отображающую и идентифицирующую свойства этого объекта.
- Переопределяет:
-
toStringв классеCompoundEdit - Возвращает:
- строковое представление этого объекта
© 1993, 2020, 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/11/docs/api/java.desktop/javax/swing/undo/UndoManager.html