作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
请原谅这个模糊的问题标题,但通常我不会做这样的事情。所以我有以下问题:
我正在为特定应用程序设计一个弹出菜单,其中每个菜单项都与特定操作相关联:
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
用于此类任务,您希望添加菜单项并将其与某些操作相关联。事实上,我想要的不仅是两个这样的操作,而是几十个。
问题出在清理
方面。 清理
应该在选择这些操作中的任何之后进行。这意味着,如果我继续采用上述方式,我将必须为每个 AbstractAction
编写 cleanup()
。
是否有任何(简单/优雅/好的)方法或模式可以避免一遍又一遍地编写 cleanup()
? IE。是否可以设计一些只获取操作并在执行后自动调用cleanup
的东西?
最佳答案
这是模式之一:
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();
}
});
关于java - 任何 AbstractAction 执行后都应调用特殊方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6738069/
我是一名优秀的程序员,十分优秀!