我正在尝试让我的第一个 UndoManager 工作,但我遇到了原型问题。我不明白为什么下面的代码只提供一个撤消。
当我更改文本时,单击撤消并再次更改文本,另一个撤消不会做任何事情。问题在哪里?
import java.awt.*;
import javax.swing.*;
public class IComeUndone
{
public static void main(String[] args)
{
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final JTextArea textArea = new JTextArea(20, 40);
textArea.setText("Back here");
f.add(textArea);
final UndoManager undoManager = new UndoManager();
textArea.getDocument().addUndoableEditListener(undoManager);
undoManager.setLimit(1000);
JButton undoB = new JButton("Undo");
undoB.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
undoManager.end();
if(undoManager.canUndo())
{
undoManager.undo();
}
textArea.requestFocus();
}
});
f.add(undoB, BorderLayout.PAGE_END);
f.pack();
f.setVisible(true);
}
}
更新:当我注释掉该undoManager.end();
行时,它工作正常,但每次单击撤消只会撤消一次编辑,就像一个键入的字母。我想撤消一组单一的编辑,以便undoManager.end();
在这一点上有意义。但是在第一次单击撤消后,我无法重新开始跟踪单个编辑。(希望你能理解)