Java JTextPane未触发UndoableEditListener事件
我在应用程序的JTextPane中添加了UndoManager,但无法使其正常工作:Java JTextPane未触发UndoableEditListener事件,java,swing,jtextpane,Java,Swing,Jtextpane,我在应用程序的JTextPane中添加了UndoManager,但无法使其正常工作: UndoManager undoManager = new UndoManager(); textpane.getDocument().addUndoableEditListener(undoManager); 当我手动输入文本窗格,然后尝试撤消更改时,不会发生任何事情undoManager.canUndo()始终返回false 我还尝试了另一种添加经理的方法,如下所示: textpane.getDocume
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());
}
});
通过上面的代码,我可以在输出窗口中看到,UndoableEditOccessed(UndoableEditEvent e)
在开始时被调用一次(很可能是通过加载测试文件的read
调用)。当我进行更改(通过关键字)或insertText(…)
调用时,不会再调用侦听器
我在StackOverflow中发现了一些类似的问题,但解决方案总是围绕着他们为JTextPane
定制的输入方法,我不知道。。。据我所知没有
我可能忽略了什么?我发现了为什么
UndoableEditListener
没有触发
在我设置了文档
侦听器之后,我调用了JTextPane.read(Reader Reader,Object Object)
——我不知道的是调用read(…)
方法会创建一个新的文档
模型并将其添加到JTextPane
,它基本上删除了我以前对旧文档所做的任何操作
解决方案
在调用JTextPane之后使用文档模型。阅读(…)
阅读Swing教程中的部分以获取工作示例。本教程还有一节介绍如何实现撤消和重做。