我的情况:我有一个JTextPane,它有自己的语法突出显示。我设置了它,以便当用户停止键入时,它会使用 setCharacterAttributes() 方法更新文本中的样式。
我的问题:当不执行对样式的这些更新时,撤消管理器会按预期工作。但是当我使用它时,撤消管理器将这些样式更改计为实际的可撤消操作!这意味着点击 Ctrl+z(我按下时绑定它以撤消),它只是取消我键入的最后一个字符的颜色。而不是实际删除/撤消它。
我如何获得它,以便撤消和重做仅影响文本更改,而不会影响我的样式文档中的样式/字体更改?
谢谢。
听起来您需要使用 addEdit
或 Significant
属性,如UndoManager
所述:
撤消管理器使用 isSignificant 来确定编辑次数 应撤消或重做。撤消管理器将撤消或重做所有 不重要的编辑(是显著返回假)之间的 当前编辑和上次或下一次重要编辑。添加编辑和 replaceEdit 可用于将多个编辑视为单个编辑, 从 isEssential 返回 false 允许处理可用于 一次撤消或重做许多较小的编辑。类似 也可以使用 addEdit 方法完成功能。
来源:https://docs.oracle.com/javase/8/docs/api/javax/swing/undo/UndoableEdit.html