0

初めて UndoManager を動作させようとしていますが、プロトタイプに問題がありました。次のコードで元に戻す操作が 1 つしかない理由がわかりません。

テキストを変更し、[元に戻す] をクリックしてテキストを再度変更すると、もう一度元に戻しても何も起こりません。キャッチはどこですか?

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();をクリックするたびに、1 つの入力文字など、1 つの編集のみが元に戻されます。この時点で が理にかなっているように、単一の編集のグループを元に戻したかったのです。しかし、元に戻すが最初にクリックされた後、単一の編集の追跡を再開することはできません。(あなたが理解することを願って)undoManager.end();

4

1 に答える 1

0

興味深いことに、end() を呼び出すと、UndoManager が CompoundEdit に変換され、さらにやらなければならない作業があるようです。次のリンクに例があります: http://tips4java.wordpress.com/2008/10/27/compound-undo-manager/

于 2012-07-16T21:06:42.323 に答える