0

请原谅模糊的问题标题,但通常我不做这种事情。所以我有以下问题:

我正在为特定应用程序设计一个弹出菜单,其中每个菜单项都与某个操作相关联:

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用于此类任务的地方,您希望在其中添加菜单项并将它们与某些操作相关联。实际上,我想要的不仅仅是两个这样的动作,而是几十个。

问题是cleanup事情。cleanup应该在选择了这些操作中的任何一个之后。这意味着,如果我以上述方式继续,我将不得不cleanup()为每个AbstractAction.

是否有任何(简单/优雅/漂亮)的方式或模式来避免cleanup()一遍又一遍地写作?即是否有可能设计一些只会获得动作并在执行后自动调用的东西cleanup

4

1 回答 1

3

这是其中一种模式:

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 回答