3

ユーザーがクリックしてパネルに図形を描画する JPanel とボタンを備えたアプリケーションがあります。パネル内で形状を移動するだけでなく、形状に色を付けたり、サイズを変更したりできます。このようなアプリケーションに取り消しとやり直しを実装するにはどうすればよいでしょうか? すべてのアクションが実際に実装されている Actions クラスがあります。このクラスでは、各アクションは AbstractAction を拡張する独自のクラスです。私の Actions クラスは、基本的にネストされたクラスです。

たとえば、これは私の Actions クラスのクラスの 1 つです。

private class RandomAction extends AbstractAction {
  private static final long serialVersionUID = 1L;
  public NewAction(String text, ImageIcon icon, String desc){
            super(text, icon);
            putValue(SHORT_DESCRIPTION, desc);
        }
        public void actionPerformed(ActionEvent e) {

        }
    }

次に、ボタンを作成するときに行うことは次のとおりです。

 randButton = new JButton(Actions.RandomAction);
4

2 に答える 2

5

通常、元に戻す/やり直し機能は、スタックを実装することによって行われます。以前の X アクションを追跡する独自のアクション スタックを実装できます。これにより、ユーザーがアクションを元に戻すたびにポップオフできます。おそらく、やり直し機能のために同様のタイプの構造を維持する必要があります。そのため、アクションが元に戻すスタックからポップされると、最初にやり直しスタックに移動する必要があります。

Java と NetBeans を使用している場合 (厳密に言えば、NetBeans IDE を使用する必要はありません)、NetBeans プラットフォーム (個別にダウンロードできます) を参照できます。元に戻す/やり直しはあまり使用していませんが、機能は提供しています。

個人的には、ユーザーが実行できる「アクション」をラップするクラスを作成するだけです。これは、すでに行っていることがわかります。今では、これらのアクションを追跡するためにスタックを実装するだけの問題であり、元に戻すスタックからポップされたときに、アクションの「反対」を行う必要があります。アイテムをやり直しスタックに配置すると、ユーザーがやり直しをクリックしたときに、アクションをやり直しスタックからポップして、アプリケーションが通常どおりに処理できるようになります。

于 2010-11-18T05:17:11.860 に答える
1

私はニコの投稿に同意し、元に戻す/やり直しの両方に1つのスタックを使用できることを追加します。

大学に戻って数年、私は完全な元に戻す/やり直し機能を必要とするデータフロー図エディタを書いていました。可能なユーザーアクション(UndoメソッドとDoメソッドを使用)を表す抽象Actionクラスと、実行されたすべてのアクションのリストをラップし、最後に実行されたアクションへのポインターを維持するActionStackを作成しました。アクションを元に戻すと、ポインターがスタックの下に移動し、アクションをやり直すと、ポインターが上に移動します。したがって、ユーザーが10個のアクションを実行すると、スタックにはアクション1〜10が含まれ、ポインターはアクション#10を指します。その後、ユーザーが5回の取り消しを実行すると、スタックには10個のアクションが残りますが、ポインターはアクション#5に戻ります。その後、ユーザーが新しいアクションを実行すると、ポインターの上のすべてのアクション(アクション6〜10)が削除され、新しいアクションがスタックの一番上に追加され、それに応じてポインターが調整されます。

説明するユーザーアクションはそれほど複雑に聞こえませんが、より複雑なアクションの場合は、子アクションで構成できるようにすることができます。

于 2010-11-18T06:29:13.363 に答える