2012-07-13 66 views
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();在這一點上是合理的。但是在第一次點擊撤消之後,我無法重新啓動對單個編輯的跟蹤。 (希望你能理解)

+0

您的MyUndoManager如何實現? – Lopina 2012-07-13 13:11:02

+0

這是一個內部類,只需向下滾動代碼片段即可。但是它對普通的'UndoManager'沒有任何影響。 – fachexot 2012-07-13 13:13:38

+0

如何確定'undoManager.canUndo()'看起來像返回false。 – 2012-07-13 13:15:47

回答