jtextpane和undo管理器样式更改

inb24sb2  于 2021-07-09  发布在  Java
关注(0)|答案(1)|浏览(377)

我的情况是:我有一个jtextpane,它有自己的语法高亮显示。我设置了它,这样当用户停止键入时,它会使用setcharacterattributes()方法更新文本中的样式。
我的问题:如果不执行样式的这些更新,撤消管理器将按预期工作。但当我使用它时,撤销管理器会将这些样式更改计算为实际的可撤销操作!这意味着按ctrl+z(按下时我将其绑定为撤消)只会取消我键入的最后一个字符的颜色。而不是真正地移除/撤消它。
我怎样才能得到这样的结果:撤消和重做只影响文本更改,而不影响样式文档中的样式/字体更改?
谢谢您。

66bbxpm5

66bbxpm51#

听起来你需要利用 addEdit 或者 Significant 属性 UndoManager :
undomanager利用issignificant来确定应该撤消或重做多少编辑。undomanager将撤消或重做当前编辑和上一次或下一次重要编辑之间所有不重要的编辑(issignificant返回false)。addedit和replaceedit可用于将多个编辑视为单个编辑,从issignificant返回false可用于同时撤消或重做多个较小的编辑。使用addedit方法也可以实现类似的功能。
资料来源:https://docs.oracle.com/javase/8/docs/api/javax/swing/undo/undoableedit.html

相关问题