16

XML エディターを作成しましたが、最後の段階で行き詰まっています。元に戻す/やり直し機能を追加することです。

ユーザーが要素、属性、またはテキストを JTree に追加したときに、元に戻す/やり直しを追加するだけです。

私はまだこれに慣れていませんが、今日の学校で、undo と redo という 2 つのスタック オブジェクト [] を作成し、実行されたアクションをそれらに追加しようとしました (失敗しました)。

たとえば、私は持っています:

Action AddElement() {

// some code
public void actionPerformed(ActionEvent e) {

                    performElementAction();
                }
}

performElementAction は、JTree に Element を実際に追加するだけです。

このアクションを元に戻すスタックに追加する方法を追加したいと考えています。undo.push(実行されたアクション全体)または何かを行う簡単な方法はありますか?

4

3 に答える 3

1

You have to define undo(), redo() operations along with execute() in Command interface itself.

例:

interface Command {

    void execute() ;

    void undo() ;

    void redo() ;
}

ConcreteCommand クラスで State を定義します。execute() メソッドの後の現在の State に応じて、コマンドを Undo Stack に追加するか Redo Stack に追加するかを決定し、それに応じて決定する必要があります。

理解を深めるために、このundo-redoコマンドの記事をご覧ください。

于 2016-02-14T17:29:16.410 に答える
0

Action を継承する AddElementAction クラスを使用して、Action クラスを作成しようとします。AddElementAction には、それに応じて要素を追加/削除する Do() および Undo() メソッドを含めることができます。次に、元に戻す/やり直すためにアクションの 2 つのスタックを保持し、ポップする前に一番上の要素で Do()/Undo() を呼び出すだけです。

于 2012-07-17T20:25:59.537 に答える