0
我試圖讓我的第一個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();
在這一點上是合理的。但是在第一次點擊撤消之後,我無法重新啓動對單個編輯的跟蹤。 (希望你能理解)
您的MyUndoManager如何實現? – Lopina 2012-07-13 13:11:02
這是一個內部類,只需向下滾動代碼片段即可。但是它對普通的'UndoManager'沒有任何影響。 – fachexot 2012-07-13 13:13:38
如何確定'undoManager.canUndo()'看起來像返回false。 – 2012-07-13 13:15:47