关于记事本“撤销”这个按钮的功能有什么好的实现方法?

解决方案 »

  1.   

    嗯,具体研究一下 设计模式的 Command模式。好运,古天乐~
      

  2.   

    正在做用java做一个记事本,感觉这个键的功能很棘手!!
      

  3.   

    我做过, 你没次操作要用一个Command类来进行管理,然后把这些Command存到一个链表里。
    这样就差不多了。Command作为多种操作的Base class,应该提供redo和undo的接口方法。
      

  4.   

    import java.awt.BorderLayout;
    import java.awt.GridLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JTextArea;
    import javax.swing.event.UndoableEditEvent;
    import javax.swing.event.UndoableEditListener;
    import javax.swing.undo.CannotRedoException;
    import javax.swing.undo.UndoManager;public class UndoRedoTextArea extends JFrame {
        protected JTextArea textArea = new JTextArea();    protected UndoManager undoManager = new UndoManager();    protected JButton undoButton = new JButton("Undo");    protected JButton redoButton = new JButton("Redo");    public UndoRedoTextArea() {
            super("Undo/Redo Demo");        undoButton.setEnabled(false);
            redoButton.setEnabled(false);        JPanel buttonPanel = new JPanel(new GridLayout());
            buttonPanel.add(undoButton);
            buttonPanel.add(redoButton);        JScrollPane scroller = new JScrollPane(textArea);        getContentPane().add(buttonPanel, BorderLayout.NORTH);
            getContentPane().add(scroller, BorderLayout.CENTER);        textArea.getDocument().addUndoableEditListener(
                    new UndoableEditListener() {
                        public void undoableEditHappened(UndoableEditEvent e) {
                            undoManager.addEdit(e.getEdit());
                            updateButtons();
                        }
                    });        undoButton.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    try {
                        undoManager.undo();
                    } catch (CannotRedoException cre) {
                        cre.printStackTrace();
                    }
                    updateButtons();
                }
            });        redoButton.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    try {
                        undoManager.redo();
                    } catch (CannotRedoException cre) {
                        cre.printStackTrace();
                    }
                    updateButtons();
                }
            });        setSize(400, 300);
            setVisible(true);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        }    public void updateButtons() {
            undoButton.setText(undoManager.getUndoPresentationName());
            redoButton.setText(undoManager.getRedoPresentationName());
            undoButton.setEnabled(undoManager.canUndo());
            redoButton.setEnabled(undoManager.canRedo());
        }    public static void main(String argv[]) {
            new UndoRedoTextArea();
        }
    }
      

  5.   

    Java的Swing中不是提供了一个包装好的方法undo()~~~