0

あいまいな質問タイトルで申し訳ありませんが、通常、私はそのようなことはしません。だから私は次の問題があります:

各メニュー項目が特定のアクションに関連付けられている特定のアプリの popupmenu を設計しています。

public class CanvasMenu extends JPopupMenu {        
    public CanvasMenu(){
       this.add(new AbstractAction("Do some operation") {
           @Override
           public void actionPerformed(ActionEvent arg0) {
                doSomeStuff1();
                cleanup(); // has to be done after every menu operation
           }
    });

        this.add(new AbstractAction("Other operation") {
            @Override
            public void actionPerformed(ActionEvent e) {
                doSomeOtherStuff();
                cleanup(); // has to be done after every menu operation
            }
        });
    }
}

AbstractActionメニュー項目を追加して何らかのアクションに関連付けるタスクに使用される場所を読みました。実際には、そのようなアクションが 2 つだけではなく、数十個必要です。

問題はcleanup物です。これらのアクションのいずれかcleanupが選択された後である必要があります。これは、上記の方法を続けると、それぞれについて書く必要があることを意味します。cleanup()AbstractAction

何度も何度も書くのを避ける (簡単/エレガント/素敵な) 方法やパターンはcleanup()ありますか? つまり、アクションのみを取得し、実行後に自動的に呼び出す何かを設計することは可能cleanupですか?

4

1 に答える 1

3

これは次のパターンの 1 つです。

abstract class ActionWithCleanup extend AbstractAction {
       @Override
       public final void actionPerformed(ActionEvent arg0) {
            myAction();
            cleanup(); // has to be done after every menu operation
       }

       public abstract void myAction();
}

...

this.add(new ActionWithCleanup("Do some operation") {
       @Override
       public void myAction() {
            doSomeStuff1();
       }
});
于 2011-07-18T19:25:09.437 に答える