Java JTextPane未触发UndoableEditListener事件

Java JTextPane未触发UndoableEditListener事件,java,swing,jtextpane,Java,Swing,Jtextpane,我在应用程序的JTextPane中添加了UndoManager,但无法使其正常工作: UndoManager undoManager = new UndoManager(); textpane.getDocument().addUndoableEditListener(undoManager); 当我手动输入文本窗格,然后尝试撤消更改时,不会发生任何事情undoManager.canUndo()始终返回false 我还尝试了另一种添加经理的方法,如下所示: textpane.getDocume

我在应用程序的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());
    }
});
通过上面的代码,我可以在输出窗口中看到,
UndoableEditOccessed(UndoableEditEvent e)
在开始时被调用一次(很可能是通过加载测试文件的
read
调用)。当我进行更改(通过关键字)或
insertText(…)
调用时,不会再调用侦听器

我在StackOverflow中发现了一些类似的问题,但解决方案总是围绕着他们为
JTextPane
定制的输入方法,我不知道。。。据我所知没有


我可能忽略了什么?

我发现了为什么
UndoableEditListener
没有触发

在我设置了
文档
侦听器之后,我调用了
JTextPane.read(Reader Reader,Object Object)
——我不知道的是调用
read(…)
方法会创建一个新的
文档
模型并将其添加到
JTextPane
,它基本上删除了我以前对旧
文档所做的任何操作

解决方案


在调用
JTextPane之后使用
文档
模型。阅读(…)

阅读Swing教程中的部分以获取工作示例。本教程还有一节介绍如何实现撤消和重做。