如何解决JTextPane不触发UndoableEditListener事件
我在我的应用程序的JTextPane中添加了UndoManager,但无法正常工作:
UndoManager undoManager = new UndoManager();
textpane.getDocument().addUndoableEditListener(undoManager);
当我手动在文本窗格中键入内容,然后尝试撤消更改时,什么也没有发生undoManager.canUndo()
总是返回false。
textpane.getDocument().addUndoableEditListener(new UndoableEditListener()
{
@Override
public void undoableEditHappened( UndoableEditEvent e )
{
System.out.println("UndoableEditEvent");
undoMgr.addEdit(e.getEdit());
}
});
使用上面的代码,我可以在输出窗口中看到undoableEditHappened( UndoableEditEvent e )
在开始时被调用了一次(很可能是通过read
调用来加载测试文件)。当我(通过关键字)或insertText(...)
进行更改时,没有其他侦听器调用。
我在StackOverflow中发现了一些类似的问题,但是解决方案始终沿用JTextPane
的自定义输入法的思路,我不是……不是我所知道的。
我可能忽略了什么?
解决方法
我发现了为什么UndoableEditListener
没有触发的原因。
设置了JTextPane.read(Reader reader,Object object)
侦听器后,我正在调用Document
-我不知道的是,调用read(...)
方法会创建并添加一个新的Document
模型JTextPane
,基本上删除了我以前对 old Document
做过的一切。
解决方案
在调用Document
JTextPane.read(...)
模型版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。