JTextPane и отмена изменения стиля менеджера
Моя ситуация: у меня есть JTextPane с собственной подсветкой синтаксиса. Я установил его так, чтобы, когда пользователь прекращает печатать, он обновляет стиль в тексте с помощью метода setCharacterAttributes().
Моя проблема: когда эти обновления стиля не выполняются, менеджер отмены работает как положено. Но когда я его использую, менеджер отмены считает эти изменения стиля фактическими отменяемыми действиями! Это означает, что нажатие Ctrl + z (я должен отменить при нажатии), просто не окрашивает последний набранный мной символ. Вместо того, чтобы фактически удалить / отменить это.
Как бы получить его, чтобы отмена и повторное изменение влияло только на изменения текста, а не на изменение стиля / шрифта в моем StyledDocument?
Спасибо.
1 ответ
Похоже, вам нужно использовать addEdit
или Significant
атрибут, как объясняется UndoManager
:
UndoManager использует isSignificant, чтобы определить, сколько правок следует отменить или повторить. UndoManager отменит или отменит все незначительные изменения (isSignificant возвращает false) между текущим редактированием и последним или следующим значительным редактированием. addEdit и replaceEdit могут использоваться для обработки нескольких правок как одного правки, возвращая false из isSignificant позволяет обрабатывать, чтобы иметь возможность отменить или переделать множество мелких правок одновременно. Подобную функциональность также можно выполнить с помощью метода addEdit.
Источники: https://docs.oracle.com/javase/8/docs/api/javax/swing/undo/UndoableEdit.html